2015-06-04 6 views
3

Я прочитал кучу нитей при использовании break и continue, и я подозреваю, что проблема не в том, чтобы использовать их, но макет моих петель. В следующем коде я пытаюсь перебирать символы в строке, которая вводится пользователем, чтобы найти любые символы -. Если он обнаружен, это вызовет ошибку для пользователя, что отрицательное число было найдено и вышло. В противном случае, если он не найдет символ -, он должен распечатать все символы в строке.Java Loops - Break? Продолжать?

Я использовал break в конце своего первого цикла, чтобы найти символ -, но он не переходит к следующему циклу. Я тоже пробовал continue, но это не сработало. Петли для меня новы, поэтому я могу ошибаться, все, что я знаю, это мой первый цикл работает нормально и выкинет ошибку, когда найдет - в строке.

strNum1 = JOptionPane.showInputDialog ("Enter Number String"); 
for (int i = 0; i < strNum1.length(); i++) { 
    char c = strNum1.charAt(i); 
    if (c == '-') { 
    System.out.println("Negative Digit Found - Exiting"); 
    break; 
    } 
} 

for (int i = 0; i < strNum1.length(); i++) { 
    char c = strNum1.charAt(i); 
    if (c <= 9) { 
    System.out.println(c); 
    } 
} 
+4

The * first * вещь, котор нужно сделать исправить ваше форматирование. Получите вашу среду IDE, чтобы отложить код соответствующим образом, а затем убедитесь, что ваш вопрос отражает это. –

+0

Вы говорите, что хотите пропустить второй цикл, если он «ломается» из вашего первого цикла? – Gosu

+0

Мое намерение состояло в том, чтобы запустить первый цикл, а затем, если что-то проверит и отрицательный символ не будет найден, запустите второй цикл и напечатайте все символы в строке. –

ответ

3

Оператор break разбивает вас только с первого цикла. Для того, чтобы пропустить запуск второго цикла в случае нахождения - персонажа, вы можете использовать некоторые boolean переменные, чтобы указать, должен ли второй цикл запуска:

strNum1 = JOptionPane.showInputDialog ("Enter Number String"); 
boolean isValid = true; 
for (int i=0; i<strNum1.length(); i++) { 
     char c = strNum1.charAt(i); 
     if (c == '-'){ 
      System.out.println("Negative Digit Found - Exiting"); 
      isValid = false; 
      break; 
     } 
} 
if (isValid) { 
    for (int i=0; i<strNum1.length(); i++) { 
     char c = strNum1.charAt(i); 
     if (c <= '9'){ 
      System.out.println(c); 
     } 
    } 
} 
+0

Мне нравится этот подход. Однако я заметил, что хотя он найдет отрицательный символ и представит сообщение об ошибке, если нет отрицательных символов, он не печатает символы в строке. Даже если я выберу перерыв; он не переходит к проверке на 'isValid' во второй части. –

+0

@JesseCleary Это странно. Вы инициализировали переменную 'isValid' равной true? – Eran

+0

Я сделал, я вставил код точно так же, как вы предлагали. На самом деле, если я прокомментирую первый раздел и просто оставьте 'Boolean isValid = true; ', а затем немедленно перейдите во второй раздел, где он проверяет' if (c <= 9) 'он все еще не печатает символы в строка, которая кажется нечетной. –

2

Если заменить break с return он выйдет весь метод. Похоже, это возможно что вы хотите.

+0

Кроме того, в этом вопросе нет признаков метода, поэтому вы не знаете, что еще в нем. –

+0

Согласовано. Следовательно, «* возможно *» –

0

Используйте оператор возврата вместо перерыва, если вы не хотите для выполнения второго цикла после первого.

0

Все ответы хороши, но если вы хотите повторить запрос, пока вы не получите правильное значение, вам понадобится еще один цикл для этого, используя метки:

negative: while(true) { 
    strNum1 = JOptionPane.showInputDialog ("Enter Number String"); 
    for (int i=0; i<strNum1.length(); i++) { 
     char c = strNum1.charAt(i); 
     if (c == '-'){ 
      System.out.println("Negative Digit Found - Exiting"); 
     continue negative; 
     } 
    break negative; 
    } 
} 
0

Вы, если не сказать, число должен быть целым числом, поэтому я предполагаю, что да. Если да, то вместо того, чтобы использовать петли, лучший способ проверки ввода будет:

int num1; 

try { 
    num1 = Integer.parseInt(strNum1); 
catch (NumberFormatException e) { 
    //not a valid number, complain about it 
} 

if (num1<0) { 
    //negative number not allowed, complain about it 
} 
1

«перерыв;» остановит цикл, из которого он запущен, где «continue»; пропустит текущую «итерацию» в цикле.

for(int x = 0; x < 10; x++) 
{ 
    if (x == 5) 
     break; 
     // other code 
} 
// more other code 

Это приведет к выходу из цикла один раз х == 5, а не делать 6-й по 10-й итерации.

for(int x = 0; x < 10; x++) 
{ 
    if (x == 5) 
     break; 
     // other code 
} 
// more other code 

Это будет делать каждую итерацию, кроме 6-й итерации.

Но если вы хотите пропустить «// другой код», вам нужно будет использовать «return;», если ваш код находится в функции, и он пропустит остальную часть функции, которая в этом случае это «// другой код».

0
for (int i=0; i<strNum1.length(); i++) { 
    char c = strNum1.charAt(i); 
     if (c == '-'){ 
      System.out.println("Negative Digit Found - Exiting"); 
     break; 
     } 
} 

может быть изменен

if(strNum1.charAt(0) != '-'){ 
    for (int i=0; i<strNum1.length(); i++) { 
    char c = strNum1.charAt(i); 
    if (c <= 9){ 
     System.out.println(c); 
    } 
    } 
} 
else { 
//negative number found... 
} 

Таким образом, нет необходимости для цикла и разорвать заявления можно избежать

1

перерыва оставляет петлю, где продолжают прыжки на следующую итерацию.