2014-05-01 2 views
-3

Итак, я работал над этой программой Java, где компьютер спрашивает пользователя, хочет ли он знать квадрат числа. Если ответ пользователя «Y» или «y», компьютер запрашивает у пользователя номер, который он хочет, он хочет знать квадрат и печатает квадрат числа. Затем компьютер спрашивает пользователя, хочет ли он знать квадрат другого номера. Если ответ «Y» или «y», компьютер берет номер и печатает квадрат. Пользователь снова спрашивает, хочет ли он знать квадрат другого номера. Как это продолжается.Проблема с оценкой ввода пользователем

Я также написал код для случаев, когда ответ пользователя отрицательный или ни положительный, ни отрицательный. Таким образом, я имел в виду случаи, когда ответ пользователя «N» или «n». Эта программа попадает в проблему где-то и не работает от A до Z так, как я ее хочу. Смотрите, когда я запускаю код, компьютер спрашивает меня, хочу ли я знать квадрат числа, и я вхожу в «y». Затем мне задают номер, который я хочу знать. Я ввожу номер, и компьютер печатает его квадрат. Затем меня спрашивают, хочу ли я знать квадрат другого номера. Я вхожу в «y». Затем меня спрашивают номер, который я хочу знать на квадрат, и я ввожу число. Компьютер печатает квадрат номера. Затем программа спрашивает, хочу ли я знать квадрат другого числа и просто заканчивается, тогда как он должен был взять мой ответ. Я работаю почти 16-17 часов, пытаясь найти ошибку, но я не мог. Не могли бы вы, возможно, проверить код и сказать мне, где я ошибся? Благодарю.

Это код:

package looppracticea; 

import java.util.Scanner; 

public class LoopPracticeA { 

    public static void main(String[] args) { 

     Scanner geek = new Scanner(System.in); 
     Scanner geek2 = new Scanner(System.in); 

     long taken_number, taken_number2; 
     String answer, answer2, answer_not_recognized, if_answer_is_no; 
     answer_not_recognized = "You didn't enter any of the recognized answers."; 
     if_answer_is_no = "'Kay. Whatever."; 

     System.out.println("Do you want to know the square of a number? (Y/N)"); 
     answer = geek.nextLine(); 

     if (answer.equals("Y") || answer.equals("y")) { 
      System.out.println("The number you want to know the square of is:"); 
      taken_number = geek.nextLong(); 
      System.out.println("That number squared is " + taken_number * taken_number + "."); 
      System.out.println("Do you want to know the square of another number? (Y/N)"); 
      answer2 = geek2.nextLine(); 

      switch (answer2) { 
       case "N": 
        System.out.println(if_answer_is_no); 
        break; 
       case "n": 
        System.out.println(if_answer_is_no); 
        break; 

       case "Y": 
        while (answer2.equals("Y")) { 
          System.out.println("The number you want to know the square of is:"); 
          taken_number2 = geek2.nextLong(); 
          System.out.println("That number squared is " + taken_number2 * taken_number2 + "."); 
          System.out.println("Do you want to know the square of another number? (Y/N)"); 
          answer2 = geek2.nextLine(); 
        } 
       break; 

       case "y": 
        while (answer2.equals("y")) { 
          System.out.println("The number you want to know the square of is:"); 
          taken_number2 = geek2.nextLong(); 
          System.out.println("That number squared is " + taken_number2 * taken_number2 + "."); 
          System.out.println("Do you want to know the square of another number? (Y/N)"); 
          answer2 = geek2.nextLine(); 
        } 
       break; 

       default: 
        System.out.println(answer_not_recognized); 
        break; 
      } 


     } else if (answer.equals("N") || answer.equals("n")) { 
      System.out.println(if_answer_is_no); 
     } else { 
      System.out.println(); 
      System.out.println(answer_not_recognized); 
     } 

    } 

} 
+1

ли вы не публикуете это точно такой же вопрос несколько минут назад? – PakkuDon

+0

Почему вы задаете один и тот же вопрос повторно? –

+0

Поскольку предыдущее издание было плохо сконструировано. Не могли бы вы любезно ответить на вопрос? – user3590394

ответ

0

Вот фиксированные содержимое вашей основной:

 Scanner geek = new Scanner(System.in); 

     long taken_number; 
     String answer; 
     String answer_not_recognized = "You didn't enter any of the recognized answers."; 
     String if_answer_is_no = "'Kay. Whatever."; 
     boolean firstTime = true; 

     while(true) 
     { 
      if(firstTime) 
       System.out.println("Do you want to know the square of a number? (Y/N)"); 
      else 
       System.out.println("Do you want to know the square of another number? (Y/N)"); 
      answer = geek.nextLine(); 
      if (answer.equalsIgnoreCase("y")) 
      { 
       System.out.println("The number you want to know the square of is:"); 
       taken_number = geek.nextLong(); 
       System.out.println("That number squared is " + taken_number * taken_number + "."); 
       answer = geek.nextLine(); 
      } 
      else if (answer.equalsIgnoreCase("n")) { 
       System.out.println(if_answer_is_no); 
       break; 
      } else { 
       System.out.println(); 
       System.out.println(answer_not_recognized); 
       break; 
      } 
      if(firstTime) 
       firstTime = false; 
     } 

Проблема в том, что вам нужно прочитать строку дважды, чтобы добраться до линии, которую вы хотите.
Первый nextLine будет читать ввести

Также я уменьшил код по:

  • оставив только один Scanner, так что достаточно
  • используется equalsIgnoreCase вместо 2 equals
  • использовали только один answer и taken_number переменный, так как этого было достаточно
  • помещает объявление переменных в отдельные строки, потому что проще поддерживать соглашение.
  • комбинированные оба ввода в одном, с булевым, говоря мне, если это первый раз, поэтому я знаю, какое сообщение выводить.
  • читать nextLine() 2 раза, так как первый из них является ввести
+0

Спасибо! Это очень помогло! – user3590394

+1

Это явно свалка для домашних заданий, и вы взяли код OP, полностью переписали его и сделали для них свою домашнюю работу.Мало того, что это не учит им ничего практического в кодировании, оно побуждает людей размещать больше домашних свалок с ожиданием того, что сообщество SO просто сделает для них свою работу. – JonK

+0

Я объяснил код и где он должен улучшиться. Он указал на свою проблему в исходном коде и объяснил, почему это произошло. Я думаю, что это больше влияет на обучение, чем вообще не отвечает или оставляет его код неповрежденным. – Andrei

Смежные вопросы