2015-03-13 63 views
-3
import java.util.Scanner; 
public class GradePointAverage 
{ 
    public static double processAverage(int []SubjectGrades,int SubjectsNumber) 
    { 
     double sum=0; 
     double Ave=0; 
     for(int i=0;i<SubjectGrades.length;i++) 
     { 
      sum=SubjectGrades[i]+sum; 
     } 
     Ave=sum/SubjectsNumber; 
      return Ave; 
    } 
    public static int processNumericalValue(double Ave) 
    { 
     int Numeral; 
     if(Ave>=98.0&&Ave<100.0) 
     { 
      Numeral=4; 
     } 
     else if(Ave>=90.0&&Ave<98.0) 
     { 
      Numeral=3; 
     } 
     else if(Ave>=80.0&&Ave<90.0) 
     { 
      Numeral=2; 
     } 
     else if(Ave>=75.0&&Ave<80.0) 
     { 
      Numeral=1; 
     } 
     else 
     { 
      Numeral=0; 
     } 
      return Numeral; 
    } 
    public static void main(String[] args) 
    { 
     double Ave=0; 
     Scanner peace=new Scanner(System.in); 
     System.out.print("How many subjects do you want to enter?: "); 
     int SubjectsNumber=peace.nextInt(); 
     int []SubjectGrades=new int [SubjectsNumber]; 
     String []Subjects=new String [SubjectsNumber]; 
     for(int i=0;i<SubjectsNumber;i++) 
     { 
      Subjects[i]=""; 
      System.out.print("Enter Subject No "+(i+1)+": "); 
      Subjects[i]=peace.next(); 
     } 
      for(int i=0;i<Subjects.length;i++) 
      { 
       System.out.println("What is your grade in "+Subjects[i]+": "); 
       SubjectGrades[i]=peace.nextInt(); 
      } 
     int Numeral; 
     double x=processAverage(SubjectGrades,SubjectsNumber); 
     System.out.println(x); 
     int y=processNumericalValue(Ave); 
     System.out.println(y); 
    } 
} 

晚上好!那麼這是我第二次問這裏。如果我記得去年3月10日我在陣列中發佈了一個麻煩。這次我想知道的是爲什麼我的函數沒有返回所需的答案。我認爲我的第二個功能不讀Ave,這就是爲什麼數字中的答案是0.即使Ave = 96或任何數字,它也不會改變。你能幫助我如何讓我的函數processNumericalValue在我的第一個函數processAverage中讀取Ave。希望能再次引導你們。 :)Java編程中的函數故障

回答

0

相反的:

double x=processAverage(SubjectGrades,SubjectsNumber); 

使用:

Ave =processAverage(SubjectGrades,SubjectsNumber); 

原因,你得到0作爲輸出,爲你呼籲int y=processNumericalValue(Ave);與大道作爲輸入,你永遠不修改大道的價值,你傳遞的價值爲0(什麼你最初在主要方法中初始化)。

+0

這個怎麼樣:'大道= SUM/SubjectsNumber;' – 2015-03-13 15:54:03

+0

這有什麼錯呢? – SMA 2015-03-13 15:59:12

+0

你說他從不改變大街,但他確實如此。 – 2015-03-13 16:00:00

0

問題就在這裏:

double x = processAverage(SubjectGrades,SubjectsNumber); 
    System.out.println(x); 
    int y = processNumericalValue(Ave); 

您需要通過X不AVE,因爲x的平均價值並不大道:

int y = processNumericalValue(x); 

一些代碼合併。

for(int i=0;i<SubjectsNumber;i++) 
    { 
     Subjects[i]=""; 
     System.out.print("Enter Subject No "+(i+1)+": "); 
     Subjects[i]=peace.next(); 
    } 
     for(int i=0;i<Subjects.length;i++) 
     { 
      System.out.println("What is your grade in "+Subjects[i]+": "); 
      SubjectGrades[i]=peace.nextInt(); 
     } 

可以將此代碼簡化爲:

for(int i=0;i<SubjectsNumber;i++) { 
    Subjects[i]=""; 
    System.out.print("Enter Subject No "+(i+1)+": "); 
    Subjects[i]=peace.next(); 
    System.out.println("What is your grade in "+Subjects[i]+": "); 
    SubjectGrades[i]=peace.nextInt(); 
} 

而且這樣的:

public static double processAverage(int[] grades) 
{ 
    double sum = 0; 
    double ave = 0; // try to use lowercase for variable names 
    for(int i = 0; i < grades.length; i++) 
    { 
     sum += grades[i]; 
    } 
    ave = sum/grades.length; 
    return ave; 
} 

函數調用:

double x = processAverage(SubjectGrades); 
+0

感謝您的回答:) – 2015-03-13 16:01:52

0
import java.util.Scanner; 
public class GradePointAverage 
{ 
    public static double processAverage(int []SubjectGrades,int SubjectsNumber) 
    { 
     double sum=0; 
     double Ave=0; 
     for(int i=0;i<SubjectGrades.length;i++) 
     { 
      sum=SubjectGrades[i]+sum; 
     } 
      Ave=sum/SubjectsNumber; 
      return Ave; 
    } 
    public static int processNumericalValue(double Ave) 
    { 
     int Numeral; 
     if(Ave>=98.0&&Ave<100.0) 
     { 
      Numeral=4; 
     } 
     else if(Ave>=90.0&&Ave<98.0) 
     { 
      Numeral=3; 
     } 
     else if(Ave>=80.0&&Ave<90.0) 
     { 
      Numeral=2; 
     } 
     else if(Ave>=75.0&&Ave<80.0) 
     { 
      Numeral=1; 
     } 
     else 
     { 
      Numeral=0; 
     } 
      return Numeral; 
    } 
    public static void processLetterGrade(int Numeral) 
    { 
     if(Numeral==4) 
     { 
      System.out.println("Congratulations!"); 
     } 
     else if(Numeral==3) 
     { 
      System.out.println("Your Letter Grade is B!"); 
     } 
     else if(Numeral==2) 
     { 
      System.out.println("Your Letter Grade is C!"); 
     } 
     else if(Numeral==1) 
     { 
      System.out.println("Your Letter Grade is D!"); 
     } 
     else 
     { 
      System.out.println("You Failed!"); 
     } 
    } 
    public static void main(String[] args) 
    { 
     double Ave=0; 
     Scanner peace=new Scanner(System.in); 
     System.out.print("How many subjects do you want to enter?: "); 
     int SubjectsNumber=peace.nextInt(); 
     int []SubjectGrades=new int [SubjectsNumber]; 
     String []Subjects=new String [SubjectsNumber]; 
     for(int i=0;i<SubjectsNumber;i++) 
     { 
      Subjects[i]=""; 
      System.out.print("Enter Subject No "+(i+1)+": "); 
      Subjects[i]=peace.next(); 
      System.out.println("What is your grade in "+Subjects[i]+": "); 
      SubjectGrades[i]=peace.nextInt(); 
     } 
      int Numeral; 
      Ave=processAverage(SubjectGrades,SubjectsNumber); 
      System.out.println("Your General Average is: "+Ave); 
      Numeral=processNumericalValue(Ave); 
      System.out.println("Numerical Value is: "+Numeral); 
      processLetterGrade(Numeral); 
    } 
}