2012-03-07 1 views
0

Возможно, я пропустил что-то очень простое, но я новый, и попросить о помощи просто попросить. Это домашняя работа, поэтому вы можете дать подсказки, если хотите, но, пожалуйста, поймите, что я ужасен в java.код, не выполняющийся в операторе switch

Ниже приведен код для адресной книги. Я хочу, чтобы пользователь входил в 1, чтобы просмотреть записи 2, чтобы добавить другую запись в книгу или 3, чтобы выйти. Я получил программу для работы, но она не зациклилась, чтобы спросить пользователя, что делать дальше. Затем я закодировал оператор switch, и когда пользователь выбирает 1, программа не запускает код, связанный с case 1: и он совпадает с случаем 2. Программа выполняет проверку моей записи (я написал валидатор в отдельном классе)

Я что-то пропустил при кодировании?

снова Я новый, поэтому не бить меня.

import java.util.Scanner; 

    public class AddressBookEntryApp 
    { 

public static void main(String[] args) 
{ 

    //create new scanner 
    Scanner ip = new Scanner(System.in); 
    //welcome user to the address book application 
    System.out.println("Welcome to the Address Book Application"); 
    System.out.println(); 
    int choice = 0; 
    boolean quit = false; 
    do 
    { 

     //have the user enter a menu number 
     System.out.println("1 - List entires"); 
     System.out.println("2 - Add entry"); 
     System.out.println("3 - Exit"); 


     System.out.println(); 
     int menuNumber = Validator.getInt(ip, "Enter menu number: ", 1, 3); 
     System.out.println(); 
     switch (choice) 
     { 
     case 1: 

       AddressBookIO GetEntryObject = new AddressBookIO(); 
       GetEntryObject.getEntriesString(); 
       System.out.println(AddressBookIO.getEntriesString()); 
       break; 

     case 2: 


       String name = Validator.getEntry(ip, "Enter name: "); 
       String email = Validator.getEntry(ip, "Enter email address"); 
       String phone = Validator.getEntry(ip, "Enter phone number: "); 
       AddressBookEntry newEntry = new AddressBookEntry(name, email, phone); 
       AddressBookIO.saveEntry(newEntry); 
       break; 


     } 
}while (!quit); 

    } 
    } 

ответ

0

Вы не меняете значение переменной choice. Поэтому он остается «0», как вы инициализировали в начале. Таким образом, ваш код никогда не попадает в утверждения дела. Это проблема . Попробуйте следующее:

choice = Validator.getInt(ip, "Enter menu number: ", 1, 3); 
0

Вы назначаете выбор с 0 (int choice = 0;) и никогда не меняется, поэтому в коммутаторе он не соответствует ни 1, ни 2.

Это должно вероятно быть

switch (menuNumber) 
+0

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

+0

Или вы можете присвоить выбранный номер меню непосредственно варианту «Выбор». Это тоже сработает. Проверьте мой ответ. –

3

choice установлен на 0. Возможно, вы включили menuNumber?

+0

menuNumber от исходного кода до того, как я получил оператор switch.могу ли я удалить это? Я попытался изменить его на выбор, но он дал мне красную линию. Также он сказал, что мне нужно было сделать выбор. ЕСЛИ Я устанавливаю его в 1, он останется на 1? Что я могу сделать по этому поводу? –

+0

Произведите точный код, который вы набрали, который был красным, когда вы изменили номер меню на выбор. – Raveline

+0

@ Raveline Извините, мне потребовалось столько времени, чтобы ответить. Я готовлюсь к работе. Во всяком случае, затмение говорит мне, что это повторяющаяся переменная, когда я меняю номер меню на выбор –

0

Да, вы назначили выходной сигнал валидатора на menuNumber, но вы делаете switch на choice.

0

В случае, если не эта линия

int menuNumber = Validator.getInt(ip, "Enter menu number: ", 1, 3); 

быть преобразованы к следующему:

choice = Validator.getInt(ip, "Enter menu number: ", 1, 3); 
0

Все в порядке, как указано ранее, "выбор" переменная не вход пользователя («menuNumber», я думаю). Это первый вопрос.

Теперь возникает вопрос: почему вы допустили эту ошибку? Потому что ваш код слишком сложный. Вы напишете гораздо лучший код, если будете читать советы от «чистого кода» Мартина Фаулера или других. Два простых совета:

  • Сохраняйте небольшие функции, и будет намного легче идентифицировать ошибки.
  • предпочитает «пока», чем «делать/пока», его гораздо легче читать.

Бюст самое главное, научиться использовать отладчик, с ним вы бы нашли ошибку в кратчайшие сроки.

+0

Спасибо за предложение книги, я проверю это. Я участвую в Java SE6 от Murach, и мой код отражает код в книге. Мне сказали, что моя кодировка здесь не очень красивая, но я обязательно проверю эту книгу. –

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

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