我一直在尝试选择你的冒险类型的程序,但我遇到了一个问题。我让整个事情在do while循环中运行,并且每个选项都是数组中的元素是一个元素。我也有if语句,虽然可以根据用户已经完成的内容改变一些元素。以下是我的代码的示例:
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner input;
input=new Scanner(System.in);
boolean run;
boolean theBoo = false;
run = true;
int choice;
choice = 0;
do {
String[] theArray;
theArray = new String[2];
theArray[0] = "Hello";
if(theBoo){
theArray[1] = "Goodbye";
}
else{
theArray[1] = "Hi";
theBoo = true;
}
System.out.println(theArray[choice]);
choice = input.nextInt();
} while(run);
}
}
出于某种原因,如果你输入1,它打印出“Goodbye”,即使它应该打印“Hi”,因为theBoo是假的。我的问题是:为什么while循环改变我的变量的值,我该如何阻止它这样做呢?谢谢!
编辑:顺便说一句,我是新来的,所以如果我做错了,我会道歉。
Edit2:首先,感谢大家的快速解答。我做了你推荐的改变,但它仍然做同样的事情。我将代码更新为更改的内容。
答案 0 :(得分:2)
将您的代码更新为
if(theBoo){
theArray[1] = "Goodbye";
}
else{
theArray[1] = "Hi";
theBoo = true;
}
答案 1 :(得分:1)
使用==
而非=
来测试是否相等。事实上,对于布尔人来说,你不需要任何明确的平等标志。你可以拥有:
if(theBoo)
//something
else
//something else
注意你没有两个if
。这不仅没有必要,而且在测试(theBoo==true)
然后if(theBoo==false)
(同样地,您可以完全省略==true
或==false
部分方面没有逻辑意义)。如果第一个条件为真,则第二个条件为真(因为它与第一个条件相反),所以你真的想要else
或else if
。
与底部的while条件的==
相同。你可以拥有:
while(run)
另一条评论 - 您通常无需在声明的单独行上定义变量。你可以拥有:
boolean theBoo = false;
而不是:
boolean theBoo;
theBoo = false;
第一种方式,在一条线上更短更清洁。
答案 2 :(得分:1)
您使用one =符号,您将theBoo的值设置为true,而不测试其值
使用==进行测试
固定代码
import java.util.Scanner;
public class MainClass {
public static void main(String[] args) {
Scanner input;
input=new Scanner(System.in);
boolean run;
boolean theBoo;
theBoo = false;
run = true;
int choice;
choice = 0;
do{
String[] theArray;
theArray = new String[2];
theArray[0] = "Hello";
if(theBoo == true){
theArray[1] = "Goodbye";
}
if(theBoo == false){
theArray[1] = "Hi";
theBoo = true;
}
System.out.println(theArray[choice]);
choice = input.nextInt();
}while(run == true);
}
}
答案 3 :(得分:0)
这是Java中的一种情况,静态类型不会阻止愚蠢的错误。
表达式 x = v
始终是赋值,结果与v
表达式的结果类型相同。不幸的是,在这种情况下,它意味着boolean
- 类型的结果在与条件一起使用时不会抛出类型错误。
boolean a = true;
// a -> true
boolean b = a = false; // boolean b = (a = false);
// a -> false
// b -> false