2017-10-10 51 views
-1

我目前正在研究一個O Level項目的程序,我選擇了一個班級管理系統。在我的方法課上,我有各種方法來控制我的程序的不同功能,例如收集學生姓名或顯示學生成績直方圖的方法。但是,我發現我的一種方法存在缺陷。這是一種逐一列出學生姓名的方法(它們是從一個在此方法之前執行的方法中保存到數組中的)並要求學生標記。在這裏,用戶可以輸入任何數字,這是不方便的,考慮到數字等級通常在0-100之間。我已經嘗試了下面的代碼,但我已經陷入困境。該代碼事實上阻止了用戶輸入超過100的標記,但是不是允許用戶重新輸入正確的標記,而是跳過到下一個學生,使得以前的學生沒有標記。以下是說代碼:我需要用戶的輸入不跳過值100

//mark input 
public void markin() { 
    System.out.println("====================================="); 
    System.out.println("Please enter the mark of the students"); 
    System.out.println("====================================="); 
    for (int g = 0; g != marks.length; g++) { 
     System.out.println(names[g]); 
     marks[g] = Keyboard.readInt(); 
     while(marks[g]<0||marks[g]>100){ 
      System.out.println("Kindly enter a number that is less than 100"); 
      break; 
     } 
    } 
} 

幫助將是非常讚賞和感謝你提前:) 道歉,如果我的英語不是很好。

+0

兩個問題,我可以看到...你休息實際上需要輸入的無限循環,而且我只能假設'readInt'類似於'Scanner'中的'nextInt',如果您點擊「Enter」然後爲其輸入一個新值,那麼這個功能並不起作用。 – Makoto

回答

0

你幾乎得到它 - 你需要在你的while循環中讀取,而不是在沒有讀取的情況下中斷。另外,do循環將更適合於不必設置初始無效值。

//mark input 
public void markin() { 
    System.out.println("====================================="); 
    System.out.println("Please enter the mark of the students"); 
    System.out.println("====================================="); 
    for (int g = 0; g != marks.length; g++) { 
     System.out.println(names[g]); 
     do { 
      System.out.println("Kindly enter a number that is less than 100"); 
      marks[g] = Keyboard.readInt(); 
     } while(marks[g]<0||marks[g]>100); 
    } 
} 
+0

感謝隊友,你是一個救生員;) –

0

將標記[g]設置爲在循環之前不允許的數字,例如-1,然後檢查while循環內部的鍵盤輸入 (並且只要while循環isn 「T停止, 標誌[G] = Keyboard.readInt();

,不破環,作爲循環將結束反正當輸入有效

+0

好的,謝謝你的幫助 –

0

有效答案必須順序進入數組。 使用這種簡單的伎倆指數[G]恢復到以前的值 那麼你將覆蓋標記[G]值,直到你得到一個有效的:

while(marks[g]<0||marks[g]>100){ 
     System.out.println("Kindly enter a number that is less than 100"); 
     g--; // Resetting index to previous value 
     break; 
    } 
+1

如果你使用這個解決方案,不需要一段時間和休息,只需要使用一個if子句;) – Compufreak

相關問題