2016-01-29 2 views
-2

Может кто-нибудь сказать мне, что не так с моим кодом. Если пользователь вводит отрицательное целое число, программа должна продолжать указывать пользователю, чтобы он вводил положительный результат, пока он этого не сделает. Я думаю, что это логика внутри цикла do-while, но не уверен.Проблема с циклом do-while, но не может найти его

Something is def wrong.

import java.util.Scanner; 

public class scratch { 

    public static void main(String[] args) { 
    Scanner input = new Scanner(System.in); 

    int firstN = 0; 
    int secondN = 0; 
    boolean isNumber = false; 
    boolean isNumPos = false; 

    System.out.print("Enter a positive integer: "); 

    do { 
     if (input.hasNextInt()) { 
     firstN = input.nextInt(); 
     isNumber = true; 
     } 
     if (firstN > 0) { 
     isNumPos = true; 
     isNumber = true; 
     break; 
     } else { 
     isNumPos = false; 
     isNumber = false; 
     System.out.print("Please enter a positive integer: "); 
     input.next(); 
     continue; 
     } 
    } while (!(isNumber) || !(isNumPos)); 

    System.out.print("Enter another positive integer: "); 
    do { 
     if (input.hasNextInt()) { 
     secondN = input.nextInt(); 
     isNumber = true; 
     } 
     if (secondN > 0) { 
     isNumPos = true; 
     isNumber = true; 
     } else { 
     isNumPos = false; 
     isNumber = false; 
     System.out.print("Please enter a positive integer: "); 
     input.next(); 
     } 

    } while (!(isNumber) || !(isNumPos)); 

    System.out.println("The GCD of " + firstN + " and " + secondN + " is " + gCd(firstN, secondN)); 
    } 

    public static int gCd(int firstN, int secondN) { 
    if (secondN == 0) { 
     return firstN; 
    } else 
     return gCd(secondN, firstN % secondN); 
    } 
} 
+3

'} в то время как (IsNumber && isNumPos!);' ... – Reimeus

+0

Почему бы не использовать только одну переменную управления 'badInput = true' перед циклом, а затем сообщить с' continue' когда это вы видите плохую ситуацию? если не число, «это не число» + 'continue'. Пусть 'while (badInput)' делает все остальное. если число, но отрицательное, «введите положительное число» + 'continue'. Опять же, пусть 'while (badInput)' сделает все остальное. После того как вы закончите неудачные случаи, вы можете установить свой «badInput» в false, и вы выйдете из цикла. –

ответ

1

Попробуйте использовать & & вместо || например:

} while (!isNumber && !isNumPos); 
0

Я немного изменил ваш код. Однако есть более простые способы сделать это.

do { 
    System.out.print("Enter a positive integer: "); 
    firstN = input.nextInt(); 
    isNumber = true; 

    if (firstN > 0) { 
    isNumPos = true; 
    isNumber = true; 
    break; 
    } else { 
    isNumPos = false; 
    isNumber = false; 
    continue; 
    } 
} while (!(isNumber) || !(isNumPos)); 


do { 
    System.out.print("Enter another positive integer: "); 
    secondN = input.nextInt(); 
    isNumber = true; 

    if (secondN > 0) { 
    isNumPos = true; 
    isNumber = true; 
    } else { 
    isNumPos = false; 
    isNumber = false; 
    } 

} while (!(isNumber) || !(isNumPos)); 
1

Мне было интересно, было бы проще? :)

private static Scanner input = new Scanner(System.in); 

public static void main(String[] args) { 

    int numberOne = 0; 
    int numberTwo = 0; 

    boolean flag = true; 

    System.out.println("Enter a positive number: "); 
    numberOne = input.nextInt(); 

    System.out.println("Enter another positive number: "); 
    numberTwo = input.nextInt(); 

    while (flag) { 

     if (numberOne > 0 && numberTwo > 0) { 
      flag = false; 
     } else if (numberOne <= 0) { 
      System.out.println("First number was invalid, please enter a positive number: "); 
      numberOne = input.nextInt(); 
      flag = true; 
     } else if (numberTwo <= 0) { 
      System.out.println("Second number was invalid, please enter a positive number: "); 
      numberTwo = input.nextInt(); 
      flag = true; 
     } 

    } 

    System.out.println("Your numbers were " + numberOne + " and " + numberTwo); 
}