none
拜託幫我看看哪兒出錯,無法run出結果 RRS feed

  • 問題

  • //掃描法將排序好的角度依序排入路線中
                Route[] route = new Route[50];    //路線結果
                string[] NodeNumber = new string[250];  //顧客點int轉為string
                int R = 0; //路線數
                int demand = 0;
                float sectime = 0;
                int q = 0;
                for (int a = 0; a < Customer[q].angle; a++)
                {
                    for (int i = 0; i <y.Length; i++)
                    {

                        if (Customer[i].demand < 13)
                        {
                            route[i].LQ += Customer[i].NodeNumber ;
                            sectime += Dissec[Customer[i].NodeNumber, 0];
                            demand += Customer[i].demand;
                        }
                        else
                        {
                            route[i].LQ = R + 1;
                        }
                    }
                }
                for (int i = 0; i < y.Length; i++)
                {
                    soluation4[i] += "路線"+route[i].LQ + "\t" + "行駛時間"+sectime + "\t" +"需求量"+ demand + "\t";
                }
                richTextBox7.Lines = soluation4; 
            }

     

     

    問題是出在"soluation4[i] += "路線"+route[i].LQ + "\t" + "行駛時間"+sectime + "\t" +"需求量"+ demand + "\t";"
    錯誤訊息為"索引在陣列的界限之外。"

    2010年8月19日 上午 09:22

解答

  • 你好 LindsatPeng,

    以下的兩個問題的改法要視您想做的事情而定:

    =============================

    route[i].LQ += Customer[0].NodeNumber + NodeNumber + Customer[0].NodeNumber;

     錯誤1:無法將運算子 '+' 套用至型別 'int' 和 'string[]' 的運算元

     

    string ithLQ = route[i].LQ;

    錯誤2: 無法將型別 'int' 隱含轉換為 'string'

    =============================

    錯誤1:其中的 NodeNumber 乃宣告為一個字串陣列,您是用來存「顧客點int轉為string」 這個資訊,

    所以是不是該跟 i 做連動呢? 既然是存顧客點的話...... 例如改為: NodeNumber[i]

    此外,如果這個式子要成立,表示等號左邊 route[i].LQ 的型別應該是被定義成 int,

    這是因為在 else 裡面是這樣:route[i].LQ = R + 1; 而且 R 定義為 int......

    也就是說等號右邊也得是 int 型別相加,這跟您將 NodeNumber 定義為 string[] 有所違背,

    或者該說你將 NodeNumber 定義為 string[] 是多此一舉,既然宣告的那一行有這樣的註解「顧客點int轉為string」...

    小弟覺得您可以再更詳細說明一下你要做的事情,而不只是拿出錯誤來問要怎麼解決,因為很難就這樣解決掉...

     

    錯誤2:這是小弟的眼睛瞎掉造成的,因為沒注意到有這一行:route[i].LQ = R + 1;

    所以以為您將 route[i].LQ 宣告為 string 了,您只要將這一行改為下列這樣即可:

    int ithLQ = route[i].LQ;



    Best regards



    2010年8月19日 下午 04:34

所有回覆

  • 2010年8月19日 上午 09:25
    版主
  • 改好了,但出來答案是"0"= =

    請問一下,我的語法邏輯哪裡出錯了??

    拜託幫幫我,非常感謝!!

    2010年8月19日 上午 09:29
  • y.Length  ?

     

    上面程式碼  沒看到  y  


    Cmf.Net (C) 2010
    2010年8月19日 上午 09:30
  • 改好了,但出來答案是"0"= =

    請問一下,我的語法邏輯哪裡出錯了??

    拜託幫幫我,非常感謝!!


    照您的描述,只能請您試著下中斷點逐步偵錯,去看變數值哪裡有問題

    http://www.dotblogs.com.tw/jimmyyu/archive/2009/06/02/8648.aspx


    歡迎參觀我的Blog.NET菜鳥自救會
    2010年8月19日 上午 09:32
    版主
  • 你好 LindsayPeng,

    將這邊修改一下看看:

    for (int i = 0; i < y.Length; i++)
    {
      string ithLQ = route[i].LQ;
      soluation4[i] += "路線"+ ithLQ + "\t" + "行駛時間"+sectime + "\t" +"需求量"+ demand + "\t";
    }

    然後看一下錯在哪一行,再來做處理~~~



    Best regards



    • 已編輯 DK. Da 2012年6月10日 上午 02:12
    2010年8月19日 上午 11:28
  • 你好,不好意思,請問我設的Customer[i].NodeNumber屬性為"int",要如何把他轉為"string"?

    我的寫法為"string[] NodeNumber = new string[250];"

    所以更改過後的程式碼為:

    //掃描法將排序好的角度依序排入路線中
                Route[] route = new Route[252];    //路線結果
                string[] NodeNumber = new string[252];  //顧客點int轉為string
                int R = 0; //路線數
                float sectime = 0;
                int demand = 0;
                int q = 0;
                for (int a = 0; a < Customer[q].angle; a++)
                {
                    for (int i = 0; i < y.Length; i++)
                    {

                        if (Customer[i].demand < 13)
                        {
                            route[i].LQ += Customer[0].NodeNumber + NodeNumber + Customer[0].NodeNumber;
                            sectime += Dissec[Customer[i].NodeNumber, 0];
                            demand += Customer[i].demand;
                        }
                        else
                        {
                            route[i].LQ = R + 1;
                        }
                    }
                }
                for (int i = 0; i < y.Length; i++)
                {
                    string ithLQ = route[i].LQ;
                    soluation4[i] += "路線" + ithLQ + "\t" + "行駛時間" +"="+ sectime + "\t" + "需求量" +"="+demand + "\t";
                }
                richTextBox7.Lines = soluation4; 

     

     

    錯誤訊息在:route[i].LQ += Customer[0].NodeNumber + NodeNumber + Customer[0].NodeNumber;

     錯誤1:無法將運算子 '+' 套用至型別 'int' 和 'string[]' 的運算元

    string ithLQ = route[i].LQ;

    錯誤2: 無法將型別 'int' 隱含轉換為 'string' 

     

    不好意思麻煩你,拜託教教我!!非常感謝你^^

    2010年8月19日 下午 12:33
  • 你好 LindsatPeng,

    以下的兩個問題的改法要視您想做的事情而定:

    =============================

    route[i].LQ += Customer[0].NodeNumber + NodeNumber + Customer[0].NodeNumber;

     錯誤1:無法將運算子 '+' 套用至型別 'int' 和 'string[]' 的運算元

     

    string ithLQ = route[i].LQ;

    錯誤2: 無法將型別 'int' 隱含轉換為 'string'

    =============================

    錯誤1:其中的 NodeNumber 乃宣告為一個字串陣列,您是用來存「顧客點int轉為string」 這個資訊,

    所以是不是該跟 i 做連動呢? 既然是存顧客點的話...... 例如改為: NodeNumber[i]

    此外,如果這個式子要成立,表示等號左邊 route[i].LQ 的型別應該是被定義成 int,

    這是因為在 else 裡面是這樣:route[i].LQ = R + 1; 而且 R 定義為 int......

    也就是說等號右邊也得是 int 型別相加,這跟您將 NodeNumber 定義為 string[] 有所違背,

    或者該說你將 NodeNumber 定義為 string[] 是多此一舉,既然宣告的那一行有這樣的註解「顧客點int轉為string」...

    小弟覺得您可以再更詳細說明一下你要做的事情,而不只是拿出錯誤來問要怎麼解決,因為很難就這樣解決掉...

     

    錯誤2:這是小弟的眼睛瞎掉造成的,因為沒注意到有這一行:route[i].LQ = R + 1;

    所以以為您將 route[i].LQ 宣告為 string 了,您只要將這一行改為下列這樣即可:

    int ithLQ = route[i].LQ;



    Best regards



    2010年8月19日 下午 04:34
  • 感謝你的回答,謝謝你^^
    2010年8月20日 上午 02:07