2015-10-05 204 views
1

在控制檯應用程序中的一個類中,我編寫了一個讀取許多整數輸入並對它們進行求和的方法。這些輸入調用另一個寫在另一個類中的方法(Input.ReadIntegerConsole()),它應該讀取輸入,然後使輸入爲整數的第一個類的操作繼續,否則以這種方式寫入「無效的選擇」:將兩個步驟總結爲一步

private void ReadInputAndSumNumbers() 
{ 
    Console.Write("\nNumber you choose? "); 
    int.TryParse(Console.ReadLine(), out numberChosen); 
    numberChosen = Input.ReadIntegerConsole(); 
    sum += numberChosen; 

等的問題是,這樣一來,當我運行的應用程序,控制檯問:你選擇號碼?那麼無論我輸入什麼,該程序什麼都不做。此時我將輸入另一個輸入,現在只有ReadIntegerConsole方法開始:如果是整數,則操作繼續,否則程序將顯示「無效選擇」。如何做到這一點,所以程序做了一步而不是兩步,所以它讀取我的輸入,並立即驗證它是否是一個整數,並決定繼續或顯示「無效的選擇」?如何做到這一點,而不必寫兩個輸入?我確信Input.ReadIntegerConsole代碼是正確寫入的,這就是爲什麼我沒有在這裏顯示它。我試着在班上很多不同的地方寫作,但它從未奏效。我也嘗試寫numberChosen=int.Parse(ConsoleReadLine())=Input.ReadIntegerConsole(),但當然不起作用。

+2

** ReadIntergerConsole **有哪些方法?看起來你對第一個控制檯沒有任何幫助.readline \ – code

+2

有關代碼的更多細節將有助於更好地理解問題。你能否爲你的其他方法添加代碼?同時,嘗試刪除這行'int.TryParse(Console.ReadLine(),out numberChosen)'一次。 –

+0

沒有更多的代碼就不可能理解錯誤。請添加調用此代碼段的代碼以及ReadIntegerConsole的代碼 – Steve

回答

1
Console.Write("\nNumber you choose? "); 
int.TryParse(Console.ReadLine(), out numberChosen); 
numberChosen = Input.ReadIntegerConsole(); 
sum += numberChosen; 

你沒有提供的Input.ReadIntegerConsole實施,但其一個公平的猜測,它電話Console.ReadLine和解析成一個int(與它上面的線)。所以基本上,你的代碼是這樣做的:

  1. 打印留言
  2. 等待用戶輸入,解析爲一個int,並存儲在numberChosen
  3. 呼叫Input.ReadIntegerConsole這可能等待用戶輸入,將其解析爲一個int並返回它,並將其存儲在numberChosen
  4. 數量添加到sum

所以當y ou輸入第一個數字,它確實如你所想,但Input.ReadIntegerConsole要求另一個輸入並覆蓋原來的一個(因此如果你輸入垃圾,它說「無效值」)。從控制檯讀取第二個數據解釋了爲什麼程序看起來什麼也不做,因爲它等待更多的輸入。

刪除手冊Console.ReadLine擺脫了冗餘讀/解析,這就是它修復你的代碼的原因。它不是說它沒有Console.ReadLine,它使用的方法隱藏了對它的調用。

+0

是的,它就是這樣! Input.ReadIntegerConsole可以調用另一個Console.ReadLine!現在我明白了爲什麼程序等待另一個輸入。非常感謝! –

0

如果你問我想你問,我想你想要這樣的:

private void ReadInputAndSumNumbers() 
{ 
    Console.Write("\nNumber you choose? "); 
    int numberChosen; 
    if(int.TryParse(Console.ReadLine(), out numberChosen)) { 
     sum += numberChosen; 
    } 
    else { 
     Console.WriteLine("Invalid choice."); 
    } 
} 

int.TryParse是一個out參數,這意味着分析結果將被分配到numberChosen的方法。然而,它返回bool:如果成功則返回true(字符串傳遞可解析爲int);如果不成功,則返回false。所以它是這樣說的:

如果int.TryParse可以從輸入字符串中創建一個int,變量numberChosen在方法結束時存儲結果;添加數字選擇總和。
否則,它是不成功的,並寫入「無效的選擇」。

輸出參數可能會有點混淆,但它們很強大。但是如果我做了一個糟糕的工作解釋,這裏有一些鏈接:Int32.TryParse,out (C# reference)

+0

備註:如果您想多次執行此操作,可能需要將方法塊放入循環中,直到用戶輸入特定輸入爲止,例如「完成」。 – BHustus