2016-12-12 2 views
0
public static void main(String args[]) { 
    Scanner input = new Scanner(System.in); 

    String regex = "[a-zA-Z ]+$"; 
    String regex1 = "\\d[0-9]|[1-9]"; 
    String regex2 = "^[a-zA-Z0-9 ]+$"; 
    String petName; 

    StringBuilder output = new StringBuilder(); 

    do { 
     System.out.print("\nHow Many Pet do you have? Give from 1-3:"); 
     petName = input.nextLine(); 

     if (petName.isEmpty()) { 
      System.out.println("Number field should not be Empty."); 
     } else if (!petName.matches(regex1)) { 
      System.out.println("Please Enter A Valid Number!"); 
     } 
    } while (!petName.matches(regex1)); 

    do { 
     Integer.parseInt(petName); 
     String[] pets = new String[Integer.parseInt(petName)]; 

     System.out.print("\nList Down All Your Pet Names:\n"); 

     for (int i = 0; i < pets.length; i++) { 
      System.out.print("\nPET" + (i + 1) + ":"); 
      pets[i] = input.nextLine(); 

      if (pets[i].isEmpty()) { 
       System.out.print("String field should not be Empty."); 
      } else if (!pets[i].matches(regex)) { 
       System.out.print("Please input a valid String."); 
      } 
     } 
     output.append("\nThese Are The List Of The Pets You Have:"); 
     for (int i = 0; i < pets.length; i++) { 
      output.append("\nPET:").append(i + 1).append(" ").append(pets); 
     } 
    } while (!petName.matches(regex)); 

    System.out.println(output); 
} 

У меня возникла небольшая проблема с вышеуказанными кодами.Подтверждение ввода пользователя под forloop

Что я хочу, если я ввешу целое число, тогда оно предложит мне это сообщение «Пожалуйста, введите допустимую строку» или если я ничего не набрал в поле, тогда он подскажет мне это другое сообщение «Строковое поле должно не пусто ». Но что произойдет, даже если я наберу строковое значение в поле, тогда он все еще запрашивает сообщение «Пожалуйста, введите действительную строку», и цикл все равно продолжает делать то же самое снова и снова при каждом нажатии кнопки ввода.

+0

Что подразумевается под этим регулярным выражением '' [a-zA-Z] + $ "'? Добавьте пример ввода, используемый здесь. – AxelH

+0

для (int i = 0; i

+0

- это код, который я использую для проверки строк. –

ответ

0

У вас есть проблемы со вторым циклом while. Прежде всего, ваше условие цикла проверяет petName, который не изменяется после выхода из первого цикла while. Во-вторых, цикл for, кажется, неправильно вложен. Поскольку вы хотите, чтобы цикл для действительного ввода каждого имени любимца, вы должны поместить второй цикл while в цикл for, а не наоборот.

Это, вероятно, легче увидеть со следующим измененным кодом. Также обратите внимание, что вызов append(pets) выводит результат toString из массива pets, а не имя отдельного любимца. Для этого вы должны использовать append(pets[i]).

/** 
* @param args the command line arguments 
*/ 
public static void main(String[] args) 
{ 
    Scanner input = new Scanner(System.in); 

    String regex = "[a-zA-Z ]+$"; 
    String regex1 = "\\d[0-9]|[1-9]"; 
    String regex2 = "^[a-zA-Z0-9 ]+$"; 
    String petName; 

    StringBuilder output = new StringBuilder(); 

    do 
    { 
     System.out.print("\nHow Many Pet do you have? Give from 1-3:"); 
     petName = input.nextLine(); 

     if (petName.isEmpty()) 
     { 
      System.out.println("Number field should not be Empty."); 
     } 
     else if (!petName.matches(regex1)) 
     { 
      System.out.println("Please Enter A Valid Number!"); 
     } 

    } while (!petName.matches(regex1)); 

    String[] pets = new String[Integer.parseInt(petName)]; 

    System.out.print("\nList Down All Your Pet Names:\n"); 

    for (int i = 0; i < pets.length; i++) 
    { 
     do 
     { 
      System.out.print("\nPET" + (i + 1) + ":"); 
      pets[i] = input.nextLine(); 

      if (pets[i].isEmpty()) 
      { 
       System.out.print("String field should not be Empty."); 
      } 
      else if (!pets[i].matches(regex)) 
      { 
       System.out.print("Please input a valid String."); 
      } 
     } while (!pets[i].matches(regex)); 
    } 

    output.append("\nThese Are The List Of The Pets You Have:"); 

    for (int i = 0; i < pets.length; i++) 
    { 
     output.append("\nPET:").append(i + 1).append(" ").append(pets[i]); 
    } 

    System.out.println(output); 
} 
+0

Я согласен с частью бесконечного цикла. Может просто показать, что часть кода в вашем ответе;) – AxelH

+0

Yahhh! вот почему я не мог придумать мой желаемый результат, я думал об этом вложенном цикле, но я просто не знаю, как его организовать, я так старался, но я не мог просто получить это правильно, потому что я все еще включаю эту строку String [] pets = new String [Integer.parseInt (petName)]; внутри цикла Do while. Мне очень жаль, вы знаете, каково это для вас, когда вы начинаете :). Но я очень ценю вашу непосредственную помощь и ваш очень добрый подход. Боже, благослови тебя, сэр. –

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