2014-02-14 63 views
0

我正在嘗試編寫一個程序,該程序反覆要求用戶在測試中提供分數(滿分爲10)。它需要持續到提供負值爲止。應該忽略高於10的值。我也計算了投入的平均值。輸入分數後,我需要使用單個數組生成一個表格,該表格會自動填充測試分數和某個測試分數的出現次數。與用戶輸入的數組

我希望它看起來是這樣的:

Score | # of Occurrences 

    0 3  
    1 2 
    2 4 
    3 5 
    4 6 

等.. P

我是一個初學者,這是我的第一個問題,所以我很抱歉,如果我犯了一個錯誤發佈該問題或其他內容。

import java.io.*; 
import java.util.*; 

public class Tester1 
{ 
public static void main() 
{ 
    Scanner kbReader= new Scanner (System.in); 

    int score[] = new int [10];//idk what im doing with these two arrays 
    int numofOcc []= new int [10]; 

    int counter=0; 
    int sum=0; 

    for (int i=0;i<10;i++)// Instead of i<10... how would i make it so that it continues until a negative value is entered. 
    { 
     System.out.println("Enter score out of 10"); 
     int input=kbReader.nextInt(); 

     if (input>10) 
     { 
      System.out.println("Score must be out of 10"); 

     } 
     else if (input<0) 
     { 
      System.out.println("Score must be out of 10"); 
      break; 
     } 
     else 
     { 
      counter++; 
      sum+=input; 

     } 
    } 
    System.out.println("The mean score is " +(sum/counter)); 

    } 
} 
+0

對於「空間」問題,您可以使用String.format(「%s%5s」,string1,string2)'。這會爲您的標籤創建最多5個空格 – user2573153

+0

您堅持使用哪個部分? –

+0

如果這是您的第一個問題,我的第一個提示是,請務必詢問您遇到的問題的具體問題。 – csmckelvey

回答

0

你可以使用一個do...while循環是這樣的:

import java.io.*; 
import java.util.*; 

public class Tester1 
{ 
    public static void main(String args[]) { 
     Scanner kbReader= new Scanner (System.in); 

     int scores[] = new int [10]; 

     int counter = 0; 
     int sum = 0;  
     int input = 0; 

     do { 
      System.out.println("Enter score out of 10 or negative to break."); 
      input=kbReader.nextInt(); 

      if (input<0) { 
       break; 
      } else if (input>10) { 
       System.out.println("Score must be out of 10"); 
      } else { 
       scores[input]++; 
       counter++; 
       sum+=input; 
      } 
     } while (input>0); 

     System.out.println("Score\t# of occur..."); 
     for(int i =0; i<10; i++) { 
      System.out.println(i + "\t" + scores[i]); 
     }; 

     System.out.println("The mean score is " +(sum/counter)); 
    } 
} 

的格式當然可以做的更好(沒有C風格的標籤)但我現在還不記得語法。

+0

做得很好!我看到while循環比這個問題的for循環更好。我可以以某種方式在這種情況下使用for循環嗎? – sm15

+0

@ sm15您可以使用for循環,而不指定參數start; end:增量像這樣:for(;;)',這和'while(true)'循環一樣。在這兩種情況下,你都必須在循環中使用'break;'語句來打破循環。 – jpw

+0

好吧,我明白了。沒有學到這麼多大聲笑,但謝謝! – sm15

0

你缺少的是一個while循環。這是一個很好的方式來循環掃描儀輸入。它還捕捉數大於10,並且提供一個錯誤信息:

public static void main() { 
    Scanner s = new Scanner(System.in); 
    ArrayList<Integer> list = new ArrayList<Integer>(); 
    int response = 0; 
    while (response >= 0) { 
     System.out.print("Enter score out of 10: "); 
     response = s.nextInt(); 
     if (response > 10) { 
      System.out.println("Score must be out of 10."); 
     } else if (response >= 0) { 
      list.add(response); 
     } 
    } 
    // Do something with list 
}