2014-02-14 69 views
0

後來更改它我試圖讓let1初始化,同時仍然讓它被我設置爲av1的if條件操縱。初始化變量,如果條件

import java.util.Scanner; 

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

     //Variables 
     String Stud1, Stud2, Stud3, Stud4; 
     int num1S1, num2S1, num3S1, num4S1; 
     int num1S2, num2S2, num3S2, num4S2; 
     int num1S3, num2S3, num3S3, num4S3; 
     int num1S4, num2S4, num3S4, num4S4; 
     double av1, av2, av3, av4; 
     char let1,let2,let3,let4; 

     //Input Student One 
     System.out.println("Please enter name of first student:"); 
     Stud1=get.next(); 
     System.out.print("Integer grades from 1st to fourth grade:\n"); 
     num1S1=get.nextInt(); 
     num2S1=get.nextInt(); 
     num3S1=get.nextInt(); 
     num4S1=get.nextInt(); 

     //Computing Average 
     av1= (num1S1+num2S1+num3S1+num4S1)/4.0; 
     av2= (num1S2+num2S2+num3S2+num4S2)/4.0; 
     av3= (num1S3+num2S3+num3S3+num4S3)/4.0; 
     av4= (num1S4+num2S4+num3S4+num4S4)/4.0; 

     //If Statements for letter grade 
     if(av1<=50) 
      let1='F'; 
     if(av1>=60 && av1<=69) 
      let1='D'; 
     if(av1>=70 && av1<=79) 
      let1='C'; 
     if(av1>=80 && av1<=89) 
      let1='B'; 
     if(av1>=90) 
      let1='A'; 
     //Output 

     System.out.printf("Studnet Name Grades Average Letter Grade\n"); 
     System.out.printf("%s %1d %1d %1d %1d %1.2f %c \n",Stud1,num1S1,num2S1,num3S1,num4S1,av1,let1); 
    } 
} 

回答

0

的聲明語句下面這個你可以初始化let1一些任意值,當你聲明它。

char let1 = ' ',let2,let3,let4; 

或者你可以改變你的if結構爲if-else結構。如果這種情況是相互排斥的,那麼這種結構可能會更有意義,這可能是在這種情況下。另外,如果您在else語句中爲let1賦值,您的編譯器應該停止抱怨未初始化的值。

例子:

if(av1<=50) 
    let1='F'; 
else if(av1>=60 && av1<=69) 
    let1='D'; 
/* Your other statements here */ 
else 
    let1 = 'A'; 

你可能要檢查你的情況也是如此。您的代碼目前不處理平均等級介於51和59之間的情況。

+0

讚賞它,謝謝。 –

0

嘗試let1

let1 = ' '; 
+0

它顯示聲明錯誤的原因是因爲let1變量僅在內部出現循環時纔會獲取值。如果未執行if循環,let1將不會被初始化。在循環中開始使用變量之前,最好提供一個默認值,如空字符空間。 – Sandeep