2013-02-20 38 views
0

/*這是一個簡單的代碼,使用c#向數組中添加值,然後僅打印它們。但爲了做到這一點,我有一個錯誤。什麼可能的錯誤可能是? */我不能只將值添加到數組,然後我想要打印值

 int size = 0, k = 0; 
     Console.WriteLine("Enter size of array: ");    
     size = Console.Read(); 
     string[] array = new string[size]; 

     for (int i = 0; i < size; i++) 
     { 
      Console.WriteLine("Enter at index: {0}", i); 
      array[i] = Console.ReadLine();     
     } 

     foreach (string s in array) 
     { 
      Console.WriteLine("Value at index: {0}", k++ + " = " + s); 
     } 
+3

如何爲k應該在第二循環遞增? – AbZy 2013-02-20 22:20:46

+0

我現在編輯了實際的代碼...在第一個循環中出現問題 – Amir 2013-02-20 22:45:16

回答

2
k++ 
在foreach循環將工作


我將實際只是寫:

Console.WriteLine("Value at index: {0} = {1}", k++, s); 
+0

是的,這是正確的......我忘了添加K ++粘貼在這裏......有同樣的問題 – Amir 2013-02-20 22:27:22

+0

你得到什麼錯誤?你能修正上面的代碼來顯示實際運行的是什麼嗎? – jzworkman 2013-02-20 22:28:14

+0

在第一個循環中有問題...它一直在... – Amir 2013-02-20 22:42:33

0

Twothings:

1)串[]數組=新的字符串[大小];很可能不會編譯,你可以得到一個負數

2)Console.WriteLine(「value at index:{0}」,k +「=」+ s); - >應該是我認爲Console.WriteLine(「價值指數:{0}」+ k +「=」+ s);

+0

你的答案的第二部分將無法正常工作,'{0}'需要一個參數替換(在逗號後),是什麼'k +「=」+ s'將是 – jzworkman 2013-02-20 22:24:18

+0

huh,那麼c#完全不接近c/++。自從我學習c#以來,這已經有一段時間了。 – Infested 2013-02-20 22:28:02

+0

這將是更好的做Console.WriteLine(「價值指數:{0} = {1}」,K + +,S);我做了,但有相同的概率 – Amir 2013-02-20 22:29:14

0

我相信你能實現你想要你的foreach循環內改變代碼如下所示:

Console.WriteLine("Value at index {0}: {1}", k++, s); 

(看起來像喬已經在他的回答這個解決方案以及)。

{0}是格式字符串參數後的Console.WriteLine方法的第一個參數的值的佔位符。 {1}是格式字符串參數後Console.WriteLine方法的第二個參數值的佔位符。

我使用k++在foreach循環的每次迭代中增加值k

foreach循環只是簡單地遍歷IEnumerable對象(或更具體地說,在這種情況下爲IEnumerable<int>對象),而IEnumerable對象的功能是它只是爲您提供集合中的每個項目。它沒有「索引」的概念,所以如果你想把索引與每個項目聯繫起來,那麼你需要親自處理。

請注意,對於某些集合(例如數組和列表),您將始終按照它們存在於這些結構中的順序獲取這些項目。但是,IEnumerableIEnumerable<T>接口本身不一定能保證您將以任何特定順序獲取項目,或者如果您再次循環它們,您將按相同順序獲取項目。迭代順序由底層實現決定,在這種情況下,它是一個整數數組(int[])。

0

我認爲Console.Read()導致您的問題,嘗試的ReadLine(),而不是和轉換必要時INT和增量K:

int size = 0, k = 0; 
Console.WriteLine("Enter size of array: "); 
size = Convert.ToInt32(Console.ReadLine()); 
string[] array = new string[size]; 

for (int i = 0; i < size; i++) 
{ 
    Console.WriteLine("Enter at index: {0}", i); 
    array[i] = Console.ReadLine(); 
} 

foreach (string s in array) 
{ 
    Console.WriteLine("Value at index: {0}", k + " = " + s); 
    k++; 
} 

Console.ReadLine(); 
+0

你是什麼意思?我把最後一個Console.ReadLine()放在剛剛打開的控制檯中,以便您可以看到輸出。如果你把它拿出來,它會做你想做的嗎? – 2013-02-20 22:41:46

+0

現在只有在第一個循環中有問題...它一直在 – Amir 2013-02-20 22:47:19

+0

上運行它是否要求您在索引處輸入:x其中x大於您輸入的數組大小? – 2013-02-20 22:48:45

0

爲何使用Console.Read()?它讀取對應於輸入流中的每個字符的整數,但直到按下輸入(其本身將發送兩個整數,一個13和一個10)。

也許你應該用Console.ReadLine()來代替?

+0

啊RYT ......但循環不斷去上 – Amir 2013-02-20 22:40:33

+0

我的意思是隻有第一循環 – Amir 2013-02-20 22:47:49

+0

@Amir你還有'Console.Read()''中的大小= Console.Read();'。你認爲這會給你什麼樣的體積?它取決於從輸入流中讀取的第一個字符的代碼點。你想讓用戶輸入一個數字嗎?至少你應該寫出'尺寸',以便用戶可以看到他獲得的尺寸。 – 2013-02-21 09:52:11

0

此作品(測試):

 int size = 0, k = 0; 
     Console.WriteLine("Enter size of array: "); 
     size = int.Parse(Console.ReadLine()); 
     string[] array = new string[size]; 

     for (int i = 0; i < size; i++) 
     { 
      Console.WriteLine("Enter at index: {0}", i); 
      array[i] = Console.ReadLine(); 
     } 

     foreach (string s in array) 
     { 
      Console.WriteLine("Value at index: {0} = {1}", k++, s); 
     } 

     Console.Read(); 
相關問題