使用Scanner在java中更改布尔值

时间:2015-04-08 22:35:35

标签: java

这是我在这里的第一篇文章,所以我决定在这里浏览各种帖子,以便尝试了解如何发布问题。

因此,如果我搞砸了请告诉我,以便我可以尽快修改我的帖子。

所以这是我的问题:

我今天开始学习Java,我正在努力了解一切是如何运作的。我将下面的代码设置为判断孩子是好还是坏,并显示相应的重播。

好孩子得到糖果,坏孩子得不到。我希望能够将用户的选择限制为好或坏,并将答案更改为Booleantruefalse以运行正确的if语句。

我看到Math.random这样做的方式,但是当我尝试它时,我遇到了更多问题。

感谢您的时间。

以下是我的代码:

import java.util.Scanner;

public class Main {
    public static void main (String args[]) {
        //take user info 
        Scanner sc = new Scanner(System.in);

        int candy = 12;
        int kids = 4;
        int bad = 1;
        String a = sc.nextLine();
        int answer = candy / kids;
        String answer2 = "No Candy";
        boolean good = false;

        System.out.println(a);
        //closeing the scanner
        sc.close();

        if(bad == 1) {
            System.out.println(answer2);
        } else {
            if(bad == 2)
                good = true;
            System.out.println(answer);
        }
        if(good == true) {
            System.out.println("Good Job");
        } else {
            System.out.println("Try again tomorrow!");
        }
    }
}

4 个答案:

答案 0 :(得分:0)

看到你刚刚开始,我会尽量保持简单。有很多方法可以强迫你的读者说出比下面更好的“好”或“坏”,但它们需要循环(我认为你还没有接触过)。

请考虑以下事项:

boolean good = false;
if (a.equals("good")) { // they said good
    good = true;
} else if (a.equals("bad")) { // they said bad
    good = false;
} else { // they said neither
    System.out.println("You didn't say a correct word!");
}

您首先指定您拥有boolean good(您可以按上述方式提供默认值,或者不提供任何内容)。然后,根据用户的输入,您可以将布尔值设置为适当的值。

必须在if语句之上声明boolean good的原因与变量的范围有关。如果你的书/老师没有解释那是什么,你现在应该查阅。 TL; DR是如果你只是首先在if语句中声明你的变量,那么它会在你离开if语句后立即消失。你可以看到在这种情况下如何完全违背if语句的目的。

答案 1 :(得分:0)

您可以通过将输入封闭在循环中来限制输入。

List<String> accepted = new ArrayList<String>();
accepted.add("good");
accepted.add("bad");

System.out.println("Good or bad?");
String input = sc.nextLine();
while(!accepted.contains(input)) {
   System.out.println("Invalid query '" + input + "'. Try again.");
   input = sc.nextLine();
}

你拥有的代码,我不确切地知道它正在尝试做什么。它看起来并不实用。所以这适合我,我不是100%肯定。

答案 2 :(得分:0)

首先,没有必要在代码结束前结束扫描仪。你可以把它留下来,没有必要关闭它。 (除非你的IDE强迫你,然后是的,你应该,但最后关闭它以防万一。我有Eclipse,所以我的代码仍然运行没有故障。)

另一个评论是,只是为了美学,你应该将某种字符串连接到answer的末尾,以便读者理解变量的含义。

还有一件事。我经常发现将扫描仪命名为更直观的东西比如输入更有帮助。毕竟,这就是它的本质。 (我只是对你的代码做了很多评论,因为你刚开始学习东西,所以你应该尽早养成良好的习惯。)

在这种情况下,您可以使用boolean userInput = Boolean.parseBoolean(answer)将字符串输入转换为布尔值。然后,根据用户使用if语句提供的输入,他们可以控制代码的流程。

如果你不介意的话,我会稍微清理你的代码。

import java.util.Scanner;
public class lol {
    public static void main (String args[]){
    //take user info 
    Scanner sc = new Scanner(System.in);


    int candy = 12;
    int kids = 4;
    int answer = candy / kids;
    String answer2 = "No Candy";

    System.out.println("Are youkids good or bad?");
    System.out.println("[1] Good = true");
    System.out.println("[2] Bad = false");
    String a = sc.nextLine();
    boolean userInput = Boolean.parseBoolean(a);

    if(userInput== false){
        System.out.println(answer2);
        System.out.println("Try again tomorrow!");
    }
    else{
        System.out.println("Good Job");
        System.out.println("You get" +answer+"pieces.");
    }
} 

}

答案 3 :(得分:0)

package test;

import java.util.Scanner;

public class app {

public static void main (String args[]){
    //take user info 
    Scanner sc = new Scanner(System.in);
    String a="?";

    while(!a.equals("good") && !a.equals("bad")){
        System.out.println("Was the kid good or bad ?");
        a = sc.nextLine();
    }

    boolean wasKidGood = a.equals("good");
    String result = (wasKidGood ? "Good kid gets candy" : "No candy for bad kid");
    System.out.println(result);
    sc.close();
    }
}

您好,我写了一些内容,这将有助于您掌握while循环和三元运算符(if循环的替代版本)。您还需要注意允许使用的位置==以及应该使用equals()方法的位置。问候