1

私は3つのクラスを持っていますMain

public class Main {
public static void main(String []args){
    UserData myData = new UserData();
    SolveMath myMath = new SolveMath();
    myMath.findLength();
   }
}

UserData(ユーザー入力を取得します):

import java.util.Scanner;
public class UserData {
private double side1;
private double side2;
private double side3;
private double weight;
public UserData(){
    Scanner scan = new Scanner(System.in);

    System.out.println("Enter side one:");
    side1 = scan.nextDouble();
    System.out.println("Enter side two:");
    side2 = scan.nextDouble();
    System.out.println("Enter side three:");
    side3 = scan.nextDouble();
    System.out.println("Enter weight:");
    weight = scan.nextDouble();
}

public double getSide1(){
    return side1;
}
public double getSide2(){
    return side2;
}
public double getSide3(){
    return side3;
}
public double getWeight(){
    return weight;
  }
}

そしてSolveMath(これまでのところ、最大の側面を見つけようとしているだけです):

public class SolveMath {
private double length;
UserData userData;

public void findLength(){
    if(userData.getSide1() > userData.getSide2() && userData.getSide1() > userData.getSide3()){
        length = userData.getSide1();
    }else if(userData.getSide2() > userData.getSide1() && userData.getSide2() > userData.getSide3()){
        length = userData.getSide2();
    }else if(userData.getSide3() > userData.getSide1() && userData.getSide3() > userData.getSide2()){
        length = userData.getSide3();
    }
    System.out.println(length);
}

}

コンパイルすると、次のエラーが発生します(すべての入力が与えられた後にエラーが発生することに注意してください):

Exception in thread "main" java.lang.NullPointerException
at eval.user.data.SolveMath.findLength(SolveMath.java:17)
at drivers.Main.main(Main.java:17)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:120)

Process finished with exit code 1

最大の側面を見つけようとすると、何かが欠けていますか?

4

5 に答える 5

2

クラスでuserData変数を初期化していないので、この行.-SolveMath

if(userData.getSide1() > userData.getSide2() && userData.getSide1() > userData.getSide3())

NullPointerExceptionへの最初のアクセスで をスローしますuserData

クラスのデフォルトコンストラクタを追加できますSolveMath.-

public SolveMath() {
    userData = UserData();
}
于 2013-10-14T15:34:40.387 に答える
0

SolveMath で UserData インスタンスを初期化していません。

1つの方法は、以下のようなコンストラクターを介して渡すことです

public class SolveMath {
    private double length;
    UserData userData;

    public SolveMath(final UserData userData) {
        this.userData = userData;
    }

    public void findLength(){
        if(userData.getSide1() > userData.getSide2() && userData.getSide1() >             userData.getSide3()){
        length = userData.getSide1();
       }else if(userData.getSide2() > userData.getSide1() && userData.getSide2() >    userData.getSide3()){
        length = userData.getSide2();
       }else if(userData.getSide3() > userData.getSide1() && userData.getSide3() > userData.getSide2()){
        length = userData.getSide3();
    }
    System.out.println(length);
    }
}

public class Main {
    public static void main(String []args){
        UserData myData = new UserData();
        SolveMath myMath = new SolveMath(myData);
        myMath.findLength();
    }
}
于 2013-10-14T15:42:00.490 に答える