为了账号安全,请及时绑定邮箱和手机立即绑定

Boolean 总是返回我在初始化时分配的任何值,但它不检查条件语句

Boolean 总是返回我在初始化时分配的任何值,但它不检查条件语句

白衣染霜花 2021-11-17 16:55:46
我花了两个小时试图找出为什么布尔表达式总是返回从一开始就分配的任何值,而不是从正确的条件语句中获取值。在这种情况下,boolean question从questionOneAnswer()方法返回true,即使我的输入A或C或者D,这意味着分数加到即使答案是错的。但是,如果我分配boolean question给 false inquestionOneAnswer()并且我的输入是B(这是正确答案),则不会执行score()方法中的代码qOneCheck,因此,分数保持为 0。      import java.util.Scanner;           import java.util.Random;      class miniProject      {         public static void main(String[] args)         {             questionOne();              questionOneAnswer();             int scr = score();             System.out.println("Your score is " + scr);             System.exit(0);           }            /* *********************************            This method asks for a question and gives 4 possible answers            */             public static void questionOne()            {               System.out.println("Please, type the letter which you think                contain the right answer!");               System.out.println("  ");               System.out.println("How many oscars did the Titanic movie                got?");               System.out.println("A. 12    B.11    C.3    D.32");               return; // Ends the method             }           public static int score()           {                  boolean qOneCheck = questionOneAnswer();              int currentScore = 0;              int oldScore = 0;              int newScore = 0;              int random = randomGen();             if(qOneCheck == true)          {             currentScore = currentScore + random;             newScore = currentScore;          }          else           {            currentScore = oldScore;          }                 return newScore;          }   编辑:删除后questioOneAnswer()我终于得到了结果。感谢你们所有人。我现在终于要睡觉了哈哈。
查看完整描述

1 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

好的,除此之外,您的代码还有这个问题:

//img1.sycdn.imooc.com//6194c3b8000114a103710106.jpg

我注释掉了我们还没有的部分,它起作用了:


public static void main(String[] args) {

    int scr = score();

//      questionOne();

//      questionOneAnswer();

    System.out.println("Your score is " + scr);

    System.exit(0);

}

我不知道你为什么叫 questionOneAnswer(); 第二次(一次在 score 中 - 您将值分配给临时变量)并再次在 main 中,您甚至没有将返回的布尔值分配给任何东西。


public static int score() {

    boolean qOneCheck = questionOneAnswer();

    int currentScore = 0;

    int oldScore = 0;

    int newScore = 0;

//      int random = randomGen();

    if (qOneCheck == true) {

//          currentScore = currentScore + random;

        currentScore = currentScore + 1;

        newScore = currentScore;

    } else {

        currentScore = oldScore;

        newScore = currentScore;

    }

    return newScore;

}

这其中大部分是垃圾。每次调用 score() 时,新旧都设置为 0。


就像是:


static int runningTotal = 0;


public static int score() {

    if (questionOneAnswer()) runningTotal++;

}

或者用一块石头杀死两只鸟:


public static void main(String[] args) {

    score();

    System.out.println("Your score is " + scr);

    System.exit(0);

}


static int scr = 0;


public static int score() {

    if (questionOneAnswer()) scr++;

}

也是 questionOneAnswer(); 中的默认值;不应该是真的,应该是假的,然后你可以解决我提出的问题(虚假输入将是假的)。但更重要的是,我们也可以将方法归结为:


public static boolean questionOneAnswer() {

    String i = input();

    return i.equalsIgnoreCase("B");

}

我没看输入法。


TLDR:注释掉 main 方法中的两行多余的行以及 randomgen 认为它正在做的任何事情似乎都解决了问题。


查看完整回答
反对 回复 2021-11-17
  • 1 回答
  • 0 关注
  • 141 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信