2014-10-08 30 views
0

我有問題需要發送變量值。爲什麼當我輸入一個值時,我的變量不能接收到值?我不知道該怎麼辦...爲什麼我的變量無法接收值(接口)

import java.io.*; 
public class StudentApp { 
public static void main (String [] args) throws IOException { 

    student studentObject = new GradeResult(); 
    studentObject.getName(); 
    student studentObject2 = new GradeResult(); 
    studentObject2.getIdNum(); 
    student studentObject3 = new GradeResult(); 
    studentObject3.getMark(); 
    student studentObject4 = new GradeResult(); 
    studentObject4.setName(); 
    student studentObject5 = new GradeResult(); 
    studentObject5.setIdNum(); 
    student studentObject6 = new GradeResult(); 
    studentObject6.setMark(); 
    student studentObject7 = new GradeResult(); 
    studentObject7.showGrade(); 
    student studentObject8 = new GradeResult(); 
    studentObject8.showResult(); 
} 

interface StudentInterface{ 
    void getName() throws IOException; 
    void getIdNum()throws IOException; 
    void setName(); 
    void setIdNum(); 
    void getMark()throws IOException; 
    void setMark(); 
} 

interface student extends StudentInterface{ 
    void showResult(); 
    void showGrade(); 
} 

class GradeResult implements student { 
    String name ,name2 ,name3; 
    int a ,mark; 

    public void getName() throws IOException { 
     InputStreamReader inStream = new InputStreamReader(System.in); 
     BufferedReader stdin = new BufferedReader(inStream); 
     System.out.print("Please Input Your Name :"); 
     name = stdin.readLine(); 

    } 

    public void getIdNum()throws IOException { 
     BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in)); 
     System.out.print("Please Input Your ID Number :"); 
     name2 = stdin.readLine(); 
     a = Integer.parseInt(name2); 
    } 

    public void setName() { 
     System.out.print("Your Name :"+name); 
    } 

    public void setIdNum() {  
     System.out.print("\nYour ID Number :"+name2); 
    } 

    public void getMark()throws IOException { 
     BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in)); 
     System.out.print("Please Input Your Mark :"); 
     name3 = stdin.readLine(); 
     mark = Integer.parseInt(name3); 
    } 

    public void setMark() { 
     System.out.print("\nYour Mark :"+mark); 
    } 

    public void showResult() { 
     if ((mark>=40)&&(mark<=100)) { 
      System.out.print("\nYou Are PASS"); 
     } else { 
      System.out.print("\nYou Are FAIL"); 
     } 
    } 

    public void showGrade() { 
     if((mark>=80)&&(mark<=100)) { 
      System.out.print("\nYour Grade Is A"); 
     } else if ((mark>=65)&&(mark<=80)) { 
      System.out.print("\nYour Grade Is B"); 
     } else if ((mark>=50)&&(mark<=65)) { 
      System.out.print("\nYour Grade Is C"); 
     } else if ((mark>=40)&&(mark<=50)) { 
      System.out.print("\nYour Grade Is D"); 
     } else { 
      System.out.print("\nYour Grade Is E"); 
     } 
    } 
} 

我不確定哪一個是我的錯。我是否需要使用對象引用來接收值,或者只需在main方法上調用。

+0

你會得到什麼輸出? – ryekayo 2014-10-08 17:29:25

+0

我只有「null」... – Edie 2014-10-08 17:36:06

回答

2

最好的工作,解決方案是在你的GradeResult

private static String name, name2, name3; 
private static int a, mark; 

下面這將工作..!

輸出:

Please Input Your Name :Mohammad 
Please Input Your ID Number :10001 
Please Input Your Mark :85 
Your Name :Mohammad 
Your ID Number :10001 
Your Mark :85 
Your Grade Is A 
You Are PASS 
+0

謝謝先生。但是,你能否向我解釋哪一個是我的錯誤? – Edie 2014-10-08 17:41:59

+0

Imho這是一個相當不好的做法... – 2014-10-08 17:44:05

+0

您每次都在創建一個新對象。這將導致類實例變量被重新初始化爲它們的原始值(即「」爲「字符串」,「0」爲「int」)。一旦你使它們成爲靜態的,它們不會被實例化新的類對象覆蓋。 – 2014-10-08 17:46:26

1

您每次都在創建新的對象,因此您的結果會被放入不同的對象中。

試試這個:

student studentObject = new GradeResult(); 
studentObject.getName(); 
studentObject.setName(); 

編輯:如果你不知道它,實例變量的值對象內舉行。因此,所有不同的對象(屬於同一個類)將具有不同的名稱,名稱2,名稱3等。您從中調用System.out.println(...)方法的對象具有未初始化的實例變量(名稱,名稱2,名稱3 ),因此不會爲這些打印任何值。

+0

工程.. !!!謝謝先生...我太急了,直到我沒有意識到你是StudentObject的更改名稱。 ^^ – Edie 2014-10-08 17:50:45

0

創建用於從同一對象該對象和訪問值對象設定值。在你的情況下,你正在設置一些對象的價值和訪問來自其他對象的數據,這就是爲什麼你在某些領域獲得null

public static void main (String [] args) throws IOException{ 

    student studentObject = new GradeResult(); 
    studentObject.getName(); 
    studentObject.getIdNum(); 
    studentObject.getMark(); 
    studentObject.setName(); 
    studentObject.setIdNum(); 
    studentObject.showGrade(); 

    studentObject.showResult(); 
} 
+0

我明白了......謝謝先生......我會以你的回答作爲我的參考..(Y) – Edie 2014-10-08 17:46:28

相關問題