2012-05-11 45 views
2

我正在嘗試使用掃描儀輸入來計算數組的GPA。我會認爲一個while循環會是最好的,但我不確定。我有一個方法可以嘗試從掃描器輸入到陣列中計算GPA。我的代碼已附加。讓我知道最簡單的方法是什麼。Java GPA陣列掃描儀輸入和計算

import java.util.Scanner; 


public class gpaArrayInput 
{ 

/** 
* @param args 
*/ 
public static void main(String[] args) 
{ 
    // TODO Auto-generated method stub 


    Scanner scan = new Scanner (System.in); 

    int i = 0; 
    //double average; 
    int grades[]=new int [i]; 


    for (i=0; i<grades.length;i++){ 

    System.out.println ("Enter your final class grades for the semester: "); 
     grades[i]=scan.nextInt(); 

    averageMethod(); 
    }} 




public static void averageMethod() 
{ 
    double sum=0; 
    double average; 

    for(int i=0; i<grades.length;i++) 
    { 

     sum += grades[i]; 

    } 

    average = sum/grades.length; 


    System.out.println("Your grade average is: "+average); 
} 

} 
+1

這是功課?如果是這樣,請添加作業標籤。 – moowiz2020

+1

這不是家庭作業,這只是個人的做法。 – Klinetel

+1

爲什麼在你的循環中調用averageMethod()?首先獲取所有成績,然後調用'averageMethod()'而不是重複調用它。此外爲什麼要聲明一個大小爲0的數組?要求用戶輸入掃描儀的等級數。最後我會使用System.out.Print(「輸入你的最終.. \ n」);爲了更好的產出。 – RandellK02

回答

1

這是Scanner documentation

快速測試之後,這似乎工作:

import java.util.Scanner; 

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

     int gradeCounter = 0; 
     int gradeTotal = 0; 

     System.out.println("Input grade: "); 

     while(gradeScanner.hasNextInt()) { 
      int nextGrade = gradeScanner.nextInt(); 
      System.out.println("Recorded grade: " + nextGrade); 
      System.out.println("Input grade: "); 
      gradeTotal += nextGrade; 
      gradeCounter++; 
     } 

     if (gradeCounter > 0) { 
      double avg = gradeTotal/gradeCounter; 
      System.out.println("Here's your average: " + avg); 
     } 
     else { 
      System.out.println("No grades found."); 
     } 
    } 
} 
+0

你的例子中有一個錯誤。如果第一個輸入不是int,則會拋出異常。你爲什麼不使用而不使用它? – dragon66

+0

謝謝!不知道該異常與do while循環有什麼關係,但我解決了它。如果第一次輸入是雙層的,我得到了一個零除異常(顯然)。 – jahroy