0

我是 Java 新手,我正在尝试获取用户输入,将每行输入存储为变量,然后返回每个值,以便可以将其传递到其他地方。当我尝试编译时,它告诉我它找不到变量幅度。我假设它也不会找到其他人。我猜这是因为我已经在“try”中声明了变量,但不知道如何获取它,以便 return 语句接受它们。代码如下:

 public Earthquake userAddEarthquake()
    {

        Scanner scanner = new Scanner(System.in);
        try{
            // convert the string read from the scanner into Integer type
            System.out.println("Please Enter An Earthquake Magnitude: ");
            Double magnitude = Double.parseDouble(scanner.nextLine());
            System.out.println("Please Enter The Earthquakes Latitude Position: ");
            scanner = new Scanner(System.in);
            Double positionLatitude = Double.parseDouble(scanner.nextLine()); 
            System.out.print("Please Enter The Earthquakes Longitude Position: ");
            scanner = new Scanner(System.in);
            Double positionLongitude = Double.parseDouble(scanner.nextLine()); 
            System.out.print("Please Enter The Year That The Earthquake Occured: ");
            scanner = new Scanner(System.in);
            int year = Integer.parseInt(scanner.nextLine()); 
            System.out.println("Magnitude = " + magnitude);
    }  

    catch(NumberFormatException ne){
            System.out.println("Invalid Input");
        }
        finally{
            scanner.close();

        }

     return new Earthquake(magnitude, positionLatitude, positionLongitude, year);   
}
4

6 回答 6

2

您在 try 块内声明量级。

try {
    Double magnitude
    //magnitude will only be visible inside try block
}

所以你必须在尝试之外声明它:

public Earthquake userAddEarthquake() {

    Scanner scanner = new Scanner(System.in);
    Double magnitude = Double.MIN_VALUE; //with a default value
    try{
        // convert the string read from the scanner into Integer type
        System.out.println("Please Enter An Earthquake Magnitude: ");
        magnitude = Double.parseDouble(scanner.nextLine());
        System.out.println("Please Enter The Earthquakes Latitude Position: ");
        scanner = new Scanner(System.in);
        Double positionLatitude = Double.parseDouble(scanner.nextLine()); 
        System.out.print("Please Enter The Earthquakes Longitude Position: ");
        scanner = new Scanner(System.in);
        Double positionLongitude = Double.parseDouble(scanner.nextLine()); 
        System.out.print("Please Enter The Year That The Earthquake Occured: ");
        scanner = new Scanner(System.in);
        int year = Integer.parseInt(scanner.nextLine()); 
        System.out.println("Magnitude = " + magnitude);
}  

catch(NumberFormatException ne){
        System.out.println("Invalid Input");
    }
    finally{
        scanner.close();

    }

 return new Earthquake(magnitude, positionLatitude, positionLongitude, year);   
}
于 2013-10-31T09:48:30.937 回答
1

在 try 块中创建的变量是local variables. 它们只存在于 try 块内,因此无法从外部访问。如果在 try 块上方声明变量,则可以在 try 块内外访问它。

于 2013-10-31T09:50:28.997 回答
1

您必须在 try-catch 之外定义变量。您想在 try-catch 之外使用的其他变量也是如此。

于 2013-10-31T09:47:49.687 回答
0

只是在全球范围内声明幅度变量我认为问题得到解决

您在 try 块中声明了该变量并尝试在 try 之外访问该变量。这就是它引发错误的原因,因为找不到符号。

于 2013-10-31T09:54:35.983 回答
0

在 try 块之外声明它,即使它是 null ..

Double magnitude = null;
try{
    // ...
    magnitude = Double.parseDouble(scanner.nextLine());
    // ...
}catch{
    // ...
}
return magnitude;
于 2013-10-31T09:50:58.707 回答
0

尝试这个

  Double magnitude=null ;
     Double positionLatitude=null;
     Double positionLongitude=null;
    int year;
    try{
                // convert the string read from the scanner into Integer type
                System.out.println("Please Enter An Earthquake Magnitude: ");
              magnitude  = Double.parseDouble(scanner.nextLine());
                System.out.println("Please Enter The Earthquakes Latitude Position: ");
                scanner = new Scanner(System.in);
              positionLatitude = Double.parseDouble(scanner.nextLine()); 
                System.out.print("Please Enter The Earthquakes Longitude Position: ");
                scanner = new Scanner(System.in);
             positionLongitude = Double.parseDouble(scanner.nextLine()); 
                System.out.print("Please Enter The Year That The Earthquake Occured: ");
                scanner = new Scanner(System.in);
                year = Integer.parseInt(scanner.nextLine()); 
                System.out.println("Magnitude = " + magnitude);
        }  
于 2013-10-31T09:49:47.027 回答