Строка лишь один раз возвращает отрицательное число. Чего не хватает чтобы возвращала при каждом вводе отрицательно числа в 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();
}
Условие находится вне тела цикла и вызывается всего один раз, после того как отработает while. Нужно поместить if в тело цикла while.
Вы должны внести if (ln < 0)
в цикл while
. Однако вам следует еще менять значение флаги goodln
на false
в if
-лупе . Тогда будет зацикливание.
if (ln < 0) {
System.err.println("Число должно быть положительным!!!");
in = new Scanner(System.in);
ln = in.nextInt();
goodln=false;
}
У вас проверка на положительность происходит вне цикла, для того чтобы код заработал надо поместить 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);
}
}
судя по коду, вам надо чтобы было введено целое-положительное число. вот вам готовое решение
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);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Какие существуют виды рекламных бордов и как выбрать подходящий?
Пытаюсь реализовать Ajax Long polling в своем проекте вот скрин структуры:
только начала изучать Javaу меня задание вывести в консоли "Hello World! (и здесь юникод->)пингвин и сердце" если с выводом текста хэллоу ворлд все...
Есть меню,но при этом по бокам меню имеются отступыя пытался выровнять блоки по ширине,но отступы в сером цвете никуда не уходят