在Java中循环更改变量

时间:2014-01-15 22:13:30

标签: java if-statement do-while

我一直在尝试选择你的冒险类型的程序,但我遇到了一个问题。我让整个事情在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:首先,感谢大家的快速解答。我做了你推荐的改变,但它仍然做同样的事情。我将代码更新为更改的内容。

4 个答案:

答案 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部分方面没有逻辑意义)。如果第一个条件为真,则第二个条件为真(因为它与第一个条件相反),所以你真的想要elseelse 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