Задача Улитка на java. Выдает ошибку NoSuchElementException
Дано следующее условие: улитка поднимается по дереву на a футов в день. Затем каждую ночь улитка сползает вниз на b футов. Высота дерева — h футов.
Напишите программу с подсчетом количества дней, которые потребуются улитке, чтобы добраться до вершины дерева.
Программа читает a, b, h построчно. Входные значения гарантированно являются положительными целыми числами.
Если улитка не может добраться до вершины дерева, должно выводиться сообщение: Impossible.
Немного подправил код.
import java.util.Scanner;
public class Snail{
public static void main(String[] args) {
Scanner af = new Scanner(System.in);
int a = af.nextInt();
Scanner bf = new Scanner(System.in);
int b = bf.nextInt();
Scanner hf = new Scanner(System.in);
int h = hf.nextInt();
if (a >= h) {
System.out.println(1);
} else if (a<=b) {
System.out.println("Impossible");
} else {
int c = a - b;
int r = (h - a) / c;
System.out.println(Math.round(r + 1));
}
}
}
Все работает правильно, но не проходит ни один тест. Выдает ошибку: Test name: test{String, String, String, String}[1] Failure message: java.util.NoSuchElementException
В чем может быть проблема?
Ответы (3 шт):
Нельзя надевать несколько сканнеров на один поток чтения. Реализация сканнера предусматривает чтение данных из потока вперёд - буферизацию. Когда вы создаёте второй сканнер, данные сохранённые в буфере первого сканнера пропускаются.
Одна из реализаций использует килобайтный буфер: BUFFER_SIZE = 1024.
Один поток - один сканнер.
import java.util.Scanner;
public class Snail {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
int b = sc.nextInt();
int h = sc.nextInt();
if (a >= h) {
System.out.println(1);
} else if (a <= b) {
System.out.println("Impossible");
} else {
int counter = 0;
int passed = 0;
while (passed < h) {
counter++;
passed = passed + a;
if (passed >= h) {
break;
} else {
passed = passed - b;
}
}
System.out.println(counter);
}
}
}
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
Integer a = scanner.nextInt();
Integer b = scanner.nextInt();
Integer h = scanner.nextInt();
//Начинаю с одного дня т.к. дальше проверки на возможность улитки залесть и это минимальное количество дней для нее при небольшой высоте
Integer day = 1;
//Высота за день
Integer highForDay = a;
//Проверил условие, при котором за один день улитка достигнет вершины
if (a >= h) {
System.out.println(day);
//Проверил условие достижимости улиткой вершины - не должен быть прирост за день отрицательным или равен нулю при длительности ее подъема 2 и более дней
} else if ((a - b) <= 0 && (a - b) * 2 < h) {
System.out.println("Никогда");
} else {
//Зацикливаюсь для подсчета дней
while (highForDay < h) {
highForDay += (a - b);
day++;
}
System.out.println(day);
}
}
}