Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从IF语句的结果声明字符串?_Java_String_If Statement - Fatal编程技术网

Java 如何从IF语句的结果声明字符串?

Java 如何从IF语句的结果声明字符串?,java,string,if-statement,Java,String,If Statement,我一直在玩游戏,测试我学到的一些东西,但出于某种原因,这对我来说不起作用。这只是一个中端应用程序,但我在开发过程中一直运行它,以确保在我完成时不会有上千个问题堆积起来。它应该能够按原样运行 import java.util.Scanner; public class Speed { public void speedAsker(){ Scanner scan = new Scanner(System.in); System.out.println("S

我一直在玩游戏,测试我学到的一些东西,但出于某种原因,这对我来说不起作用。这只是一个中端应用程序,但我在开发过程中一直运行它,以确保在我完成时不会有上千个问题堆积起来。它应该能够按原样运行

import java.util.Scanner;

public class Speed {
    public void speedAsker(){
        Scanner scan = new Scanner(System.in);

        System.out.println("Should we use: 1.KMPH or 2. MPH");
        int s1 = scan.nextInt();
        if(s1==1){
            String j1 = "KMPH";
            System.out.println("We will be using Kilometres for this calculation.");
        }if(s1 ==2){
            String j1 = "MPH";
            System.out.println("We will be using Miles for this calculation.");
        }else{
            System.out.println("That is an invalid input, you must choose between 1 or 2.");
        }
        System.out.println("What speed is your vehicle going in?");
        int d1 = scan.nextInt();
        System.out.println("Your vehicle was going at " + d1 + j1 + ".");
    }
}
这就是我得到的输出。launcher类实际上是在启动这个类,我只是为了练习。我遇到的问题是试图根据答案标记j1,然后在我的输出中使用它

主线程java.lang中出现异常。错误:未解决的编译问题: j1无法解析为变量 Speed.speedAskerSpeed.java:28 在Launcher.mainluncher.java:7


提前感谢。

在for循环外部声明您的字符串,并在内部分配它

例如:

String j1;

if(s1==1){
    j1 = "KMPH";
    System.out.println("We will be using Kilometres for this calculation.");
}if(s1 ==2){
    j1 = "MPH";
    System.out.println("We will be using Miles for this calculation.");
}else{
    j1 = "";
    System.out.println("That is an invalid input, you must choose between 1 or 2.");
}

...

System.out.println("Your vehicle was going at " + d1 + j1 + ".");
请注意,Java要求局部变量在使用之前必须有明确的赋值。上面的声明字符串j1未提供默认值,因此else子句必须提供一个或异常退出

您还可以在声明中提供默认值:

 String j1 = "";

您可以在外部声明它,然后在if/else中定义它

String j1;
if(s1==1){
    j1 = "KMPH";
    System.out.println("We will be using Kilometres for this calculation.");
}if(s1 ==2){
    j1 = "MPH";
    System.out.println("We will be using Miles for this calculation.");
}else{
    j1 = null;
    System.out.println("That is an invalid input, you must choose between 1 or 2.");
}

在else块中,为什么设置j1=?我试图对原始代码进行最小的修改,以回答这个明确的问题。你是对的,在else的情况下该方法应该异常退出。这是我应该明确实现的,我将查找一种设置异常退出的方法。如果函数无法成功完成,你可以抛出异常。如果调用方可以处理异常,则调用方可以捕获它。否则,它将终止线程,在您的情况下,该线程是主线程。在else块中,为什么设置j1=null?没有问题!和@Freiheit,有意义的两个值是null或空字符串。老实说,因为这是一个错误状态,所以最好抛出一个异常。但在这种情况下,我认为null更适合于不整洁的挑选,但如果你使用缩写,老师和雇主会讨厌你。另外,您可以使用枚举来代替MPH的字符串,非常酷,我们将对此进行研究。