2012-12-17 95 views
0

在學習如何運行tpass參數時,我無法確定程序顯示錯誤的原因。我會突出顯示下面的代碼。變量已經定義?

public class pkgExone 
{ 
    static void displayMarkRange(int[] ref,double[] mark, double size,double topValue, 
    double bottomValue, String message) 
     { 
      int index; //declare a variable index 
       System.out.println("\n\n"+ message+"\n\n"); //print parameter message 
       System.out.println("Reference \t Mark "); 
        System.out.println("Number \t Obtained\n"); 
        // loop through the whole array and decide whether to print a students mark 
     for(index=0;index<=size-1;index=index+1) 
      { 
       if ((mark[index]>= bottomValue) && (mark[index]<=topValue)) 
       { 
       System.out.println(ref[index]+" \t\t\t"+ mark[index]); 
       } // end if construct 
      } // end for loop 
      System.out.println("\n\n"); 
     } // end of displayMarkRangeMethod 

    static double Calaverage(double [] mark, double size) 
    { 
     int index; 
     double total=0; 
     double calculatedaverage;   
     int validentries=0; 

     for (index=0;index<=size-1;index ++) 

      if ((mark[index]>=1) && (mark [index] <=100)) 
      { 
      **double total + mark [index]; 
      int validentries= validentries +1;** 
      } 
     **double calculatedaverage = total/validentires;** 
     return calculatedaverage; 


    } 



    public static void main(String[] args) 
    { 
     double [] ref; 
     double Averagemark; 
     double howMany=10; 
     int[] studentID = {900,901,902,903,904,905,906,907,908,909}; 
     double[] examMark = {23,45,56,90,83,114,48,39,26,102}; 

     displayMarkRange(studentID,examMark,howMany,100,1,"All Students that have valid marks"); 
     displayMarkRange(studentID,examMark,howMany,100,70,"All Distinction students"); 
     displayMarkRange(studentID,examMark,howMany,69,55,"All Merit students"); 
     displayMarkRange(studentID,examMark,howMany,54,40,"All Pass students"); 
     displayMarkRange(studentID,examMark,howMany,39,1,"All Fail students"); 
     displayMarkRange(studentID,examMark,howMany,69,40,"All Pass or Merit students"); 
     displayMarkRange(studentID,examMark,howMany,100,90,"Student that got between 90 and 100"); 
     displayMarkRange(studentID,examMark,howMany,10,1,"Student that got between 10 and 1"); 
     displayMarkRange(studentID,examMark,howMany,80,20,"Student that got between 80 and 20"); 
     displayMarkRange(studentID,examMark,howMany,100,**Averagemark**,"Students that got more than the average"); 
     displayMarkRange(studentID,examMark,howMany,Averagemark,1,"Students that got less than the average"); 
     displayMarkRange(studentID,examMark,howMany,120,101,"Students whos marks are invalid"); 
    }// end of psvm 
}//end of public class 

當我complie文件:

Updating property file: H:\PIJOOP\ProjectSectionEleven\build\built-jar.properties 
Compiling 1 source file to H:\PIJOOP\ProjectSectionEleven\build\classes 
H:\PIJOOP\ProjectSectionEleven\src\projectsectioneleven\pkgExone.java:42: error: ';' expected 
      double total + mark [index]; 
H:\PIJOOP\ProjectSectionEleven\src\projectsectioneleven\pkgExone.java:42: error: not a statement 
      double total + mark [index]; 
2 errors 
H:\PIJOOP\ProjectSectionEleven\nbproject\build-impl.xml:628: The following error occurred while executing this line: 
H:\PIJOOP\ProjectSectionEleven\nbproject\build-impl.xml:246: Compile failed; see the compiler error output for details. 
BUILD FAILED (total time: 0 seconds) 
+1

當你剛開始的時候,我會推薦一個優秀的Java IDE捕獲錯誤,如這些在你編譯之前。看看[Eclipse](http://www.eclipse.org/)或[Netbeans](http://netbeans.org/)。兩者都將提供解決方案來解決這些問題。 –

回答

0

double total + mark [index]是語法無稽之談。您可能的意思是total += mark[index],因爲您已聲明double total

類似的說法適用於您的第二個錯誤:您將重新聲明calculatedaverage。在這裏,你只需要放下double

我建議,不過,下降的全局變量calculatedaverage和簡單的寫return total/validentires;

0

,因爲它說看看@這條線**double total + mark [index];。不應該是total += mark[Index];

仔細看看例外。

0

以下是語法上不正確的:

 double total + mark [index]; 

我猜測你的意思是說:

 total += mark [index]; 

下一行也有一個問題:

 int validentries= validentries +1; 

雖然在語法上有效,它隱藏了其他validentries而不是更新它。使用:

 validentries= validentries +1; 

最後,你有calculatedaverage宣佈兩次。您可以刪除出現在您的函數頂部聲明:

double calculatedaverage;   
3

這不是

double total + mark [index]; 

也許你打算

total += mark [index]; 

您只需爲聲明一個變量一次有效的代碼一個給定的範圍。

而不是

**double calculatedaverage = total/validentires;** 
    return calculatedaverage; 

我只想

return total/validentires; 

爲了您的利益,這是我怎麼可能寫的方法。注意:size必須是int不是雙倍。

static double average(double... marks) { 
    double total = 0; 
    int count= 0; 

    for(double mark: marks) { 
     if (mark < 1 || mark > 100) continue; 

     total += mark; 
     count++; 
    } 
    return total/count; 
} 

您可以致電此爲所有標記

double average = average(marks); 

或某些標記

double average = average(Arrays.copy(marks, size)); // note size must be an int. 
+0

雙總計+分數[指數]; < - 就此而言,它告訴我它已經被定義爲calaverage(double [],double)「;」預計但我已經有了;在那裏?我與int validentries = validentries + 1有相同的問題,已經在calaverage中定義,可以不用初始化。我刪除了計算的平均部分,以支持發佈的建議 –

+1

@PatrickVonOhsen刪除'int validentries = validentries +1;'前面的'int'。正如Peter所說,當你聲明變量時,你只需要指定一次變量的類型。 – Jesper