2016-09-30 5 views
0

Я пытаюсь, как самоназначенное упражнение, написать простую программу, которая принимает день рождения и определяет день недели, на который выпадает данная дата. Первая часть программы определяет год. Я использую сканер для сбора пользовательского ввода, а затем цикл do-while, чтобы проверить, может ли вход использоваться (должен быть номер, должен иметь четыре цифры), который повторяется, если вход не соответствует критериям. Я пытаюсь войти в 1998 год, который, очевидно, является числом и четырьмя цифрами, и он повторяет цикл, как будто мой ввод недействителен. Я предполагаю, что есть проблема где-то в моем цикле do-while, но я не смог определить, что это такое. Вот этот код.Вход, собранный моим сканером, обрабатывается неправильно

public static boolean isInteger(String input) 
{ 
    try 
    { 
     Integer.parseInt(input); 
     return true; 
    } 
    catch(Exception e) 
    { 
     return false; 
    } 
} 
public static void main(String[] args) 
{ 
    String year = ""; 
    String yearcorrect = ""; 
    int ylength = year.length(); 
    boolean yearIsYear = true; 
    Scanner scan = new Scanner(System.in); 

    do 
    { 
     System.out.println("Please enter the year of your birth."); 
     year = scan.nextLine(); 
     boolean yearIsNum = isInteger(year); 

     if (yearIsNum = false || ylength != 3) 
     { 
      System.out.println("Input is not a valid year."); 
      yearIsYear = false; 
     } 
     else 
     { 
      System.out.println("You entered the year " + year + ". Is this correct?"); 
      yearIsYear = true; 
      yearcorrect = System.console().readLine(); 
     } 
    } 
    while (yearcorrect != "yes" && yearIsYear != true); 
+1

'yearIsNum = false' означает, что ваш' if' никогда не пройдет. – ChiefTwoPencils

ответ

0

Первая ошибка:

if (yearIsNum = false || ylength != 3) 

должно быть

if (yearIsNum = false || ylength != 4) 

Вторая ошибка:

Как отметил @ChiefTwoPencils, yearIsNum = false присвоит false - yearIsNum, и состояние никогда не пройдет. Обычно java защищает нас от таких ошибок для всех типов, за исключением ... booleans. Чтобы избежать таких ошибок в будущем (и чтобы ваш код стал более читаемым), вы можете просто использовать !yearIsNum вместо yearIsNum == false или изменить порядок значений -> сначала поместите константу: false == yearIsNum ->, если вы пропустите =, тогда компилятор даст вам сообщение об ошибке. Лично я предпочитаю !yearIsNum, так как он короче и читабельнее.

Третья ошибка

Вы неправильно сравнения строк. Вы должны использовать str1.equals(str2). Использование == для объектов (и строк - это объекты) сравнивает их ссылки, а не их значения.

Например "a" == new String("a") будет равен false

+1

Также существует проблема с тем, что они не проверяют логическое значение, а скорее * присваивают * это ложное значение, которое отрицает остальное. – ChiefTwoPencils

+0

Да, вы правы. –

+0

Спасибо! Я изменил те моменты, которые вы и ChiefTwoPencils упомянули, и все еще не сработали, но когда я переместил «int ylength = year.length();» внутри дела, пока он работал. – curlycue104

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

  • Нет связанных вопросов^_^