Boolean всегда возвращает любое значение, которое я назначаю при инициализации, но не проверяет условный оператор - PullRequest
0 голосов
/ 15 октября 2018

Я потратил два часа, пытаясь выяснить, почему логическое выражение всегда возвращает любое значение, назначенное с самого начала, вместо того, чтобы брать значение из правильного условного выражения.В этом случае boolean question из метода questionOneAnswer() возвращает значение true, даже если мой ввод A или C или D, что означает, что оценка добавляется, даже если ответ неверен.Тем не менее, если я присваиваю boolean question значение false в questionOneAnswer() и мой ввод 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;
          }   



        public static  boolean questionOneAnswer()
        {
             boolean question = true;
             String i = input();


             if (i.equalsIgnoreCase("A"))
             {
                 System.out.println("False, you don't get any points!");
                 question = false;
             }

             else if (i.equalsIgnoreCase("B"))
             {
               System.out.println("You answer is correct");

              question = true;
             }

             if (i.equalsIgnoreCase("C"))
             {
              System.out.println("False, you don't get any points!");
                  question = false;
             }

            if (i.equalsIgnoreCase("d"))
            {
                  System.out.println("False, you don't get any points!");
                question = false;
            }



            return question;//Ends method 
         }

          /* *********************************
          This method receives input from user and stors it in String 
             called answer
          */ 
          public static String input()
          {      
               Scanner scanner = new Scanner(System.in); 
               String answer;
               answer = scanner.nextLine();

              return answer; // returns String answer when method is 
             called 

            }



         public static int randomGen()
         {
              Random score = new Random();

              int score1 = score.nextInt(10) +1;



               return score1;   


           }


        }

РЕДАКТИРОВАТЬ: После удаления questioOneAnswer() я наконец-то получил результат.Спасибо всем вам, ребята.Я наконец-то собираюсь идти спать, ха-ха.

1 Ответ

0 голосов
/ 15 октября 2018

Хорошо, хорошо, помимо прочего, у вашего кода есть эта проблема:

enter image description here

Я закомментировал биты, которых у нас еще не было, и этосработало:

public static void main(String[] args) {
    int scr = score();
//      questionOne();
//      questionOneAnswer();
    System.out.println("Your score is " + scr);
    System.exit(0);
}

Не знаю, почему вы вызываете questionOneAnswer ();во второй раз (один раз внутри счета - где вы присваиваете значение временной переменной) и еще раз в главном, где вы даже не присваиваете логическое значение, возвращаемое чему-либо.

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: закомментировал две лишние строки в основном методеи что бы это ни было, что думает случайный человек, похоже, это решило проблему.

...