В программе считывается массив чисел. Должны выводиться числа, кратные 3.
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int length = getLengthOfArray();
double [] arrayOfNumbers = getElementsOfArray(length);
searchElementsOfArray(arrayOfNumbers);
}
private static int getLengthOfArray() {
int length;
Scanner sc = new Scanner(System.in);
System.out.print("Please, enter a length of array: ");
do {
while (!sc.hasNextInt()) {
System.out.println("Invalid value entered. Please, try again:");
sc.next();
}
length = sc.nextInt();
if (length <= 0) {
System.out.println("You must enter a positive number. Please, try again:");
}
} while (length <= 0);
sc.close();
return length;
}
private static double [] getElementsOfArray(int length) {
double [] arrayOfNumbers = new double [length];
Scanner sc = new Scanner(System.in);
System.out.println("Please, enter an element of array: ");
for (int i = 0; i < length; i++) {
while (!sc.hasNextDouble()) {
System.out.println("Invalid value entered. Please, try again:");
sc.next();
}
arrayOfNumbers [i] = sc.nextDouble();
}
return arrayOfNumbers;
}
private static void searchElementsOfArray(double [] arrayOfNumbers) {
for (double arrayOfNumber : arrayOfNumbers) {
if (arrayOfNumber % 3 == 0) {
System.out.print(arrayOfNumber);
}
}
}
}
Результат запуска программы:
Please, enter a length of array: 3
Please, enter an element of array:
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextDouble(Scanner.java:2564)
at task3.Main.getElementsOfArray(Main.java:40)
at task3.Main.main(Main.java:9)
Process finished with exit code 1
Почему возникает эта ошибка?
Проблема возникает из-за того, что ты закрываешь входной поток (на чтение), а потом пытаешься читать из него. Если не закрывать scanner
, работает нормально. Проверил тут. Как понимаю, закрывая Scanner sc
, ты одновременно закрываешь System.in
, и из него больше нельзя считать.
Это подтверждается на сайте Oracle по Scanner:
When a Scanner is closed, it will close its input source if the source implements the Closeable interface.
Полное решение (добавил пробел между числами):
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int length = getLengthOfArray();
double [] arrayOfNumbers = getElementsOfArray(length);
searchElementsOfArray(arrayOfNumbers);
}
private static int getLengthOfArray() {
int length;
Scanner sc = new Scanner(System.in);
System.out.print("Please, enter a length of array: ");
do {
while (!sc.hasNextInt()) {
System.out.println("Invalid value entered. Please, try again:");
sc.next();
}
length = sc.nextInt();
if (length <= 0) {
System.out.println("You must enter a positive number. Please, try again:");
}
} while (length <= 0);
return length;
}
private static double [] getElementsOfArray(int length) {
double[] arrayOfNumbers = new double[length];
Scanner sc = new Scanner(System.in);
System.out.println("Please, enter an element of array: ");
for (int i = 0; i < length; i++) {
while (!sc.hasNextDouble()) {
System.out.println("Invalid value entered. Please, try again:");
sc.next();
}
arrayOfNumbers[i] = sc.nextDouble();
}
return arrayOfNumbers;
}
private static void searchElementsOfArray(double [] arrayOfNumbers) {
for (double arrayOfNumber : arrayOfNumbers) {
if (arrayOfNumber % 3 == 0) {
System.out.print(arrayOfNumber);
System.out.print(' ');
}
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Как получить дату с слушателяsetOnDayChangeListener виджета CalendarView и сохранить в Postclass
Помогите пож-та Нужно в поле выбрать значение и чтоб в дрполе подставились его варианты, пример http://prntscr
Имеется контроллер, в котором все методы, кроме одного, доступны только администратору
Друзья, добрый день! Взываю к помощи с многопоточностью в JavaСтоит задача реализовать простейший конвейер, на котором стоят всего два работника...