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的字符串,非常酷,我们将对此进行研究。