2015-09-14 3 views
0

Я работаю над упражнением из вводной учебной книги. Упражнение должно написать программу, которая предлагает пользователю ввести два символа и отобразить майор и статус, представленные в символах. Первый символ указывает майор, а второй - числовой символ 1, 2, 3, 4, который указывает, является ли студент новичком, второкурсником, младшим или старшим. Предположим следующие символы используются для обозначения майоров:Оператор if-statement и логические операторы

I: Информация управления

C: Computer Science

A: Учет

Буква символ набирается первой, а количество символов второй. Пока программа работает до тех пор, пока оба символа набраны правильно. Если символы набраны неправильно, то есть T3, программа должна напечатать «Недопустимый вход». Программа печатает «Недопустимый ввод», если символ буквы напечатан правильно, а символ числа ошибочен. Но если символ буквы введен неверно, а символ числа правильный, программа печатает пустое место вместо основного, плюс заголовок. В последнем if-statement я попытался сделать условие, в котором говорится, что если набирается какой-либо другой символ, отличный от «I», «C» или «A», а также числовой символ, который не находится в интервале между 1 и 4, программа должна напечатать «Недопустимый вход». Кто-нибудь может понять, что не так? Пример кода ниже:

import java.util.Scanner; 

public class MajorAndStatus { 

    public static void main(String[] args) { 

     Scanner input = new Scanner(System.in); 

     String major = ""; 
     String title = ""; 

     System.out.println("Enter 2 characters: "); 

     String inputString = input.nextLine(); 

     if (inputString.charAt(0) == 'I') { 
      major = "Information Management"; 
     } 
      else if(inputString.charAt(0) == 'C') { 
       major = "Computer Science"; 
      } 
      else if(inputString.charAt(0) == 'A') { 
       major = "Accounting"; 
      } 


     if (inputString.charAt(1) == '1') { 
      title = "Freshman"; 
     } 
      else if(inputString.charAt(1) == '2') { 
       title = "Sophomore"; 
      } 
      else if(inputString.charAt(1) == '3') { 
       title = "Junior"; 
      } 
      else if(inputString.charAt(1) == '4') { 
       title = "Senior"; 
      } 

     if (((inputString.charAt(0) != 'I' || inputString.charAt(0) != 'C' || inputString.charAt(0) != 'A')) & ((inputString.charAt(1) < '1' || inputString.charAt(1) > '4'))) { 
      System.out.println("Invalid input"); 
     } 
     else { 
      System.out.println(major + " " + title); 
     } 

    } 
} 
+0

Вы, кажется, как правило, читать условия неправильно. Попробуйте прочитать их вслух, чтобы лучше понять вашу проблему (по крайней мере, это то, чему я учу своих учеников). Вы пишете «Если мой первый символ не является« я », а не« C », а не« A »...», но вы на самом деле имеете в виду «Если мой первый персонаж не является ни« I », ни« C », A '...) –

ответ

2

Ваше состояние для печати Invalid Input неверно.

Это должно быть

if (((inputString.charAt(0) != 'I' && inputString.charAt(0) != 'C' && inputString.charAt(0) != 'A')) || ((inputString.charAt(1) < '1' || inputString.charAt(1) > '4'))) 

Однако, я бы устранить, что если заявление.

Вместо этого добавьте else cluase к вашему, чтобы если-то еще, если заявления:

if (inputString.charAt(0) == 'I') { 
     major = "Information Management"; 
    } else if(inputString.charAt(0) == 'C') { 
     major = "Computer Science"; 
    } else if(inputString.charAt(0) == 'A') { 
     major = "Accounting"; 
    } else { 
     System.out.println("Invalid input"); 
    } 

    if (inputString.charAt(1) == '1') { 
     title = "Freshman"; 
    } else if(inputString.charAt(1) == '2') { 
     title = "Sophomore"; 
    } else if(inputString.charAt(1) == '3') { 
     title = "Junior"; 
    } else if(inputString.charAt(1) == '4') { 
     title = "Senior"; 
    } else { 
     System.out.println("Invalid input"); 
    } 

    if (!major.equals("") && !title.equals("")) { 
     System.out.println(major + " " + title); 
    } 

EDIT:

Я вам желаю "Invalid Input", чтобы напечатать только один раз, вы можете проверить значение major и title переменных, чтобы определить, правильно ли вход был введен:

if (inputString.charAt(0) == 'I') { 
     major = "Information Management"; 
    } else if(inputString.charAt(0) == 'C') { 
     major = "Computer Science"; 
    } else if(inputString.charAt(0) == 'A') { 
     major = "Accounting"; 
    } 

    if (inputString.charAt(1) == '1') { 
     title = "Freshman"; 
    } else if(inputString.charAt(1) == '2') { 
     title = "Sophomore"; 
    } else if(inputString.charAt(1) == '3') { 
     title = "Junior"; 
    } else if(inputString.charAt(1) == '4') { 
     title = "Senior"; 
    } 

    if (!major.equals("") && !title.equals("")) { 
     System.out.println(major + " " + title); 
    } else { 
     System.out.println("Invalid input"); 
    } 
+0

Спасибо за ответ! Код не совсем сработал, как и следовало ожидать. Если какие-либо символы недействительны, «Неверный ввод» следует печатать один раз. Когда я протестировал ваш код и набрал то же, что и A6, я получаю вывод «Accouning» в первой строке и «Invalid input on the second». Не то, чтобы это было действительно большое дело, но я просто хотел, чтобы он работал как автор из книги intented. – Esben86

+0

@ Esben86 Я не заметил, что вы инициализируете переменные '' ''. Я предполагал, что они были инициализированы на 'null'. См. edit. – Eran

+0

Спасибо, чувак, это сработало :) – Esben86

1

Вместо проверки на наличие ошибок в нижней части вашей программы, почему бы вам не добавить в else к вашим if заявления, которые будут печататься invalid input.

Что-то вроде этого, возможно:

if (inputString.charAt(0) == 'I') { 
    major = "Information Management"; 
} 
else if(inputString.charAt(0) == 'C') { 
    major = "Computer Science"; 
} 
else if(inputString.charAt(0) == 'A') { 
    major = "Accounting"; 
} 
else { 
    System.out.println("Invalid input"); 
} 

Вы можете добавить в том же else ваших if заявления для второго символа тоже.

+0

Спасибо за ответ! Ваше предложение аналогично приведенному выше, где я ответил: Код не совсем сработал, как следует. Если какие-либо символы недействительны, «Недопустимый ввод «должен быть напечатан один раз. Когда я проверил ваш код и набрал то, что A6, я получаю вывод« Accouning »в первой строке и« Недопустимый вход во второй. Не то, чтобы это действительно было очень важно, но я просто хотел, чтобы он работал, как автор книги. – Esben86

0

Оба aswers не обнаруживают пробл Эмс слишком короткой строкой (IndexOutOfBoundsException)

заменить

String inputString = input.nextLine(); 

    if (inputString.charAt(0) == 'I') { 
    ... } 

с

String inputString = input.nextLine(); 
    if(inputString.length<2) { 
     System.out.println("Type a least 2 charactyes"); 
    } 
    if (inputString.charAt(0) == 'I') { 
    ... }