2016-01-30 24 views
0

這是我的第一個Java程序。它應該允許用戶輸入介於0和100之間的整數等級。如果用戶輸入負值,則停止輸入數據並顯示統計信息。我不能包含靜態方法,數學或數組。Java從掃描儀輸入中找到最小值始終爲零

我遇到了最低等級minGrade的問題。無論程序運行時輸入什麼值,minGrade總是爲零。我一直在修補這一段時間,但無濟於事。

我遇到的另一個問題是,當我運行程序時,輸入一串int,但輸入一些字母以測試錯誤檢查時,程序會解析用戶兩次而不是一次。

"Please enter a numeric grade between 0 and 100, inclusive, and press Enter:" 

各代碼是:

import java.util.Scanner; 


public class Grades { 

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

     System.out.println("Please enter the Course Code and and press Enter:"); 
     String courseCode = keyboard.nextLine(); 
     System.out.println("You entered: " + courseCode + "\n"); 

     int grade = 0; 

     int numberOfGrades = 0; 
     int maxGrade = 0; 
     int minGrade =0; 
     double avgGrade = 0; 
     int sumGrades = 0; 

     int sentinel = 0; 



     do 

     { 


       **System.out.println("Please enter a numeric grade between 0 and 100, inclusive, and press Enter:");** 
       while(!keyboard.hasNextInt()) 
       { 

        System.out.println("Please enter a numeric grade between 0 and 100, inclusive, and press Enter:"); 
        keyboard.nextLine(); 

       } 

       grade = keyboard.nextInt(); 
       if((grade <=100) && (grade >= 0)) 
       { 
        numberOfGrades++; 
        sumGrades += grade; 
        sentinel = 0; 

        if(maxGrade < grade) 
         maxGrade = grade; 

        **if(minGrade > grade) 
         minGrade= grade;** 
       } 
       else if(grade > 100) 
       { 

        System.out.println("The entered number was greater than 100. Please enter a number between 0 and 100 inclusive, " 
          + "or input a negative number to exit Grade entry"); 
        sentinel = 0; 
       } 
       else if(grade <0) 
       { 
        grade = 0;//maybe? 
        sentinel = -1; 

       } 

     } 
     while((grade >100) || (sentinel == 0)); 


     avgGrade = (sumGrades/numberOfGrades); 



     System.out.println("You entered: " + "\ngrade: " + grade + "\n" + "sentinel: "+ sentinel + 
       "\nSum of Grades: " + sumGrades +"\nNumber of Grades: "+ numberOfGrades +"\nAverage Grades: " + avgGrade 
       + "\nMaxium Grade: "+ maxGrade+"\nMinimum Grade: "+minGrade); 
    } 

} 

在此的任何輸入,我的用於我的第一java程序代碼,或其他任何的形式,將不勝感激。

我遇到的最後一個問題是平均成績總是排在第十位。我怎麼能得到第十名不是零和實際平均金額?

回答

1

minGrade的問題是您將其初始化爲0.這已經是最小值,因此沒有其他值會小於此值。 (事實上​​,通過將負等級設置爲0,可以確保更好。)將其初始化爲最大值(100)。

它看起來像你的「雙提示」問題是common onenextLinenextInt。該解決方案似乎只使用nextLine,然後解析Integer對象的返回值。 (並打印出一個NumberFormatException你的「無效輸入」文本。

最後,您avgGrade總是xx.0因爲你是劃分兩個整數,它總是給人一個整數回來了。你需要轉換一個雙獲得雙回覆:。

avgGrade = ((double)sumGrades/numberOfGrades); 
+0

是的,我的意思是詢問用戶兩次。 '.nextLine()'和'nextInt(),我會如何確保當數字不是'Int'時它不會詢問兩次。我自己並不完全理解這兩個語句,java文檔沒有太多幫助。 謝謝,雙轉換工作。我試過avgGrade = 1.0d *(x/y),它似乎沒有工作 – SeesSound

+0

@SajSeesSound你需要將其中一個項目轉換爲雙倍,就像我在代碼示例中顯示的那樣。問題是(x/y)會截斷爲int,所以你需要做((double)x/y)。我正在處理雙重提示問題。 – River

+0

最後,「等級」的值在第一個「if」語句之前不會更改爲零以外的其他值嗎?如果是這樣,爲什麼計算值會重複爲零? – SeesSound

1

minGrade將永遠不會被設置爲0,因爲0決不會大於級進入其他任何東西,所以這個檢查失敗if(minGrade > grade)嘗試初始化minGradeInteger.MAX_VALUE