2016-02-05 36 views
0

我正在從CodeChef的this問題上工作,我正在用一個數組來初始化一個小數組,這個數組是我用戶輸入的大小進行初始化的,但是我得到了返回值數組似乎已經初始化自己,我不知道爲什麼。我知道我可以查看其他人的意見和'複製和粘貼',但我想知道我做錯了什麼,以及如何解決它,所以我可以實現我自己的代碼,而不是別人。陣列沒有初始化或正確填充其索引

這裏是理論的樣子:

string _input1 = Console.ReadLine().Replace(" ", "");// Get number of items 
int[] _weightsArray = new int[_input1[0]];// Set size to number of items 

一旦用戶輸入的數字說,數字5和3,該陣列應該接受(在0索引的數量是5集該數組指向該索引),然後用戶輸入由空格分隔的5個隨機數字,然後將這些數字填充到數組中。

但是在這個例子中,數組沒有被設置爲索引大小5,它被設置爲53的大小,並且當數組在每個索引處被49填充時。

下面是完整的代碼:

Int16 _testCases = Convert.ToInt16(Console.ReadLine());// Get test cases 

for (int i = 0; i < _testCases; i++) { 
     string _input1 = Console.ReadLine().Replace(" ", "");// Get number of items 
     string _weights = Console.ReadLine().Replace(" ", ""); 
     int[] _weightsArray = new int[_input1[0]];// Set size to number of items 

     for (int j = 0; j < _weights.Length; j++) { 
      _weightsArray[j] = Convert.ToInt32(_weights[j]);// Add weights to array 
      } 

     for (int k = 0; k < _weightsArray.Length; k++) { 
      Console.WriteLine(_weightsArray[k]); 
      } 
     } 
     Console.ReadLine(); 
} 

正如你可以看到_weightsArray應該設置爲_input1 [0],並通過調試,我可以證實,_index1 [0]是逸岸INT端通過用戶,但由於某種原因,編譯器完全忽略了這一點。

下面是實際的輸出,所述陣列的尺寸大於5,並且不包含任何的給定數字(2,2,2,2,)

enter image description here

爲什麼給我隨機指數大小和每個指數50?

三江源

+1

我在這個循環中看到的第一個錯誤'for(int k = 0; ...'你正在使用'i'作爲索引而不是'k' –

+0

好的眼睛謝謝修復它 – AnonDCX

+0

和結果? –

回答

1

你的變量_input1是一個字符串,所以當你創建

int[] _weightsArray = new int[_input1[0]]; 

要創建一個數組,其大小是第一個字符(這是價值50是你的一個數組字符串以2開頭)。

你真正想要做的是將字符串轉換爲整數:

int _weightsArraySize = Convert.ToInt32(_input1); 
int[] _weightsArray = new int[_weightsArraySize]; 

的字符串的權重是一個比較複雜的解析。首先,我們希望它在空間分離,以獲得一個字符串數組與輸入:

string[] _stringWeightsArray = _weights.Split(' ', StringSplitOptions.RemoveEmptyEntries); 

然後,我們希望每一個字符串轉換爲相應的整數:

for (int k = 0; k < _weightsArraySize; k++) { 
     _weightsArray[k] = Convert.ToInt32(_stringWeightsArray[k]); 
    } 

在這一點上,你至少應該正確解析你的問題的輸入。

但是,請注意,此代碼非常基本,如果您的輸入格式不符合預期格式(例如,如果您在權重中鍵入字母或類似內容),所有內容都會爆炸。