2014-10-08 3 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

+0

나는 "null"만을 가지고있다 ... – Edie

답변

2

최상의 작업 솔루션은이 작동

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

당신의 GradeResult 클래스에서 다음을 수행하는 것입니다 ..!

출력 :

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

+0

이 호는 꽤 나쁜 습관입니다 ... –

+0

매번 새로운 물체를 만들고 있습니다. 그러면 클래스 인스턴스 변수가 원래 값으로 다시 초기화됩니다 (예 : 'String'의 경우 '', 'int'의 경우 '0'). 일단 정적으로 만들면 새로운 클래스 객체를 인스턴스화하여 재정의되지 않습니다. –

1

매번 새로운 개체를 생성하므로 결과가 다른 개체에 저장됩니다.

이 시도 :

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

편집 : 경우에 당신이 그것을 알고하지 않았다, 인스턴스 변수의 값은 객체 내에서 개최됩니다. 따라서 같은 클래스의 모든 다른 객체는 다른 이름, 이름 2, 이름 3 등을 갖게됩니다. System.out.println (...) 메소드를 호출하는 객체는 초기화되지 않은 인스턴스 변수 (name, name2, name3) 따라서 이들 값을 인쇄하지 않습니다.

+0

Works .. !!! 고마워요. 당신이 StudentObject라는 이름을 바꾸 었다는 것을 깨닫지 못할 때까지 나는 너무 서두 릅니다. ^^ – Edie

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