Java Возврат неправильного числа

152
14 марта 2019, 00:50

Строка лишь один раз возвращает отрицательное число. Чего не хватает чтобы возвращала при каждом вводе отрицательно числа в if (ln < 0 );

Scanner len = new Scanner(System.in);
boolean goodln = false;
Scanner in;
int ln = 0;
while (!goodln) {
    try {
        in = new Scanner(System.in);
        ln = in.nextInt();
        goodln = true;
    } catch (Exception e) {
        System.err.println("Вводить можно только целое число!!!");
    }
}
if (ln < 0) {
    System.err.println("Число должно быть положительным!!!");
    in = new Scanner(System.in);
    ln = in.nextInt();
}
Answer 1

Условие находится вне тела цикла и вызывается всего один раз, после того как отработает while. Нужно поместить if в тело цикла while.

Answer 2

Вы должны внести if (ln < 0) в цикл while. Однако вам следует еще менять значение флаги goodln на false в if-лупе . Тогда будет зацикливание.

     if (ln < 0) {
                System.err.println("Число должно быть положительным!!!");
                in = new Scanner(System.in);
                ln = in.nextInt();
                goodln=false;
            }
Answer 3

У вас проверка на положительность происходит вне цикла, для того чтобы код заработал надо поместить if(ln < 0) в цикл while(!goodln).

Я переписал ваш код так чтобы он работал и немного дополнил:

import java.util.InputMismatchException;
import java.util.Scanner;
public class Test {
    public static void main(String[] args) {
        int result = readIntFromSysin();
        System.out.println("\n" + "The number is: " + result);
    }
    private static int readIntFromSysin()
    {
        Scanner in = new Scanner(System.in);
        int number = 0;
        System.out.println("Enter a positive integer:");
        do {
            try {
                number = in.nextInt();
                if(number < 0)
                    System.out.println("Only positive integers are allowed, please try again:");
                else
                    return number;
            } catch (InputMismatchException ime) {
                System.out.println("Only integers are allowed, please ty again:");
                in.next();
            }
        } while(true);
    }
}
Answer 4

судя по коду, вам надо чтобы было введено целое-положительное число. вот вам готовое решение

int number;
do {
    System.out.println("Please enter a positive number!");
    while (!sc.hasNextInt()) {
        System.out.println("That not a number!");
        sc.next(); // this is important!
    }
    number = sc.nextInt();
} while (number <= 0);
System.out.println("Thank you! Got " + number);
READ ALSO
Как получить данные из json при помощи ajax

Как получить данные из json при помощи ajax

Пытаюсь реализовать Ajax Long polling в своем проекте вот скрин структуры:

168
Java работа с Timer (Circle)

Java работа с Timer (Circle)

Начинаю изучать Java

208
Вывод символа unicode в Java в консоли

Вывод символа unicode в Java в консоли

только начала изучать Javaу меня задание вывести в консоли "Hello World! (и здесь юникод->)пингвин и сердце" если с выводом текста хэллоу ворлд все...

221
bootstrap 4 не выравнивается меню

bootstrap 4 не выравнивается меню

Есть меню,но при этом по бокам меню имеются отступыя пытался выровнять блоки по ширине,но отступы в сером цвете никуда не уходят

231