Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.69/55: Рейтинг темы: голосов - 55, средняя оценка - 4.69
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 35

NoSuchElementException

11.02.2016, 02:07. Показов 10103. Ответов 5

Студворк — интернет-сервис помощи студентам
Здравствуйте. Подскажите пожалуйста, при вводе в поле "Введите страну производства двигателя" выскакивает исключение NoSuchElementException и трассировка:
at java.util.Scanner.throwFor(Scanner.java: 862)
at java.util.Scanner.next(Scanner.java:1485 )
at java.util.Scanner.nextInt(Scanner.java:2 117)
at java.util.Scanner.nextInt(Scanner.java:2 076)
at CarMainClass.MainMenuPack.MainMenu.mainM enuBar(MainMenu.java:33)
at CarMainClass.CarMainClass.main(CarMainCl ass.java:6)
C:\Users\User\AppData\Local\NetBeans\Cac he\8.1\executor-snippets\run.xml:53: Java returned: 1


Вот, собственно, код:

Java
1
2
3
4
5
6
7
package CarMainClass;
import CarMainClass.MainMenuPack.MainMenu;
public class CarMainClass {
    public static void main(String[] args) {
        MainMenu.mainMenuBar();
    }
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package CarMainClass.MainMenuPack;
 
import ArrayListCarsAction.CarListAction;
import CarMainClass.AutoCarInf.Auto;
import CarMainClass.ElectroCarsInf.ElectroCarInf;
import java.util.ArrayList;
import java.util.Scanner;
 
public class MainMenu {
 
    public static void mainMenuBar() {
        Scanner sc = new Scanner(System.in);
        ArrayList<Auto> auto = new ArrayList<>();
        ArrayList<ElectroCarInf> elCar = new ArrayList<>();
        
         
         int var = 0;
        while (var != 9) {
           
            System.out.println("Если вы хотите добавить простое авто \n"
                    + "нажмите 1\n");
            System.out.println("Если вы хотите добавить электрокар \n"
                    + "нажмите 2\n");
              System.out.println("Что бы показать все обычные авто \n"
                    + "нажмите 3\n");
              System.out.println("Что бы показать все электрокары \n"
                    + "нажмите 4\n");
            System.out.println("Если вы хотите выйти из программы \n"
                    + "нажмите 9\n");
            
            
          
             switch (var = sc.nextInt()) {
            case 1: auto.add(CarListAction.GetCarToArray()) ;
            break;
            case 2: elCar.add(CarListAction.GetElectroCarToArray());
            break;
            case 3: CarListAction.showAutoArray(auto);
            break;
            case 4: CarListAction.showElectroCarArray(elCar);
            break;
            default: System.out.println("Досвидания!");
            sc.close();
            break;
            
             }
        }
    }
}


Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package CarMainClass.AutoCarInf;
 
 
public class Auto { // описывается обычное авто
private int ID;
private int cost;
private Engine engine;
 
  
public class Engine{ // двигатель этого авто(начало внутреннего класса)
private int sm3;
private int horsePower;
private String countryManufacturer;
 
public void setVolume(int vol){
    if(vol>0)
    this.sm3 = vol;
    else if(vol<0)
        System.err.println("Объем не может быть отрицательным!");
    else
         System.err.println("Неверный формат строки!");}
public int getVolume(){return this.sm3;}
 
public void setHorsePower (int pow){ 
    if(pow>0)
    this.horsePower = pow;
    else if(pow<0)
        System.err.println("Мощность не может быть отрицательной!");
    else
         System.err.println("Неверный формат строки!");}
public int getHorsePower(){return this.horsePower;}
 
public void SetCountryManufact(String county){
if(county != null)
    this.countryManufacturer = county;
else
    System.err.println("Пустая строка!");}
public String getCountryManufact(){return this.countryManufacturer;}
} // конец внутреннего класса
 
public void setID(int ID){this.ID = ID;}
public int getID(){return this.ID;}
 
public void setCost(int cost){this.cost = cost;}
public int getCost(){return this.cost;}
 
public void setEngInf(Engine eng){
    engine = new Engine();
    engine.SetCountryManufact(eng.getCountryManufact());
    engine.setVolume(eng.getVolume());
    engine.setHorsePower(eng.getHorsePower());
}
 
@Override
public String toString(){
    
StringBuilder sb = new StringBuilder();
sb.append("Car ID:   ").append(ID).append("\n");
sb.append("Car cost: ").append(cost).append("\n");
sb.append("Car engine Inf "+ "\n\n");
sb.append("Engine power: ").append(engine.getHorsePower()).append("\n");
sb.append("Engine value: ").append(engine.getVolume()).append("\n");
sb.append("Engine country manufact: ").
        append(engine.getCountryManufact()).append("\n");
 
return sb.toString();}
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
package CarMainClass.ElectroCarsInf;
 
import CarMainClass.AutoCarInf.Auto;
 
 
public class ElectroCarInf extends Auto{
private ElectroEngine engine;
 
    public class ElectroEngine extends Engine{
    private double electroPow;
    
    public void setElectroPow(double pow){
    if(pow>0)
        this.electroPow = pow;
    else if(pow<0)
        System.err.println("Мощность не может быть отрицательной!");
    else
        System.err.println("Неверный формат строки!");}
    public double getElectroPow(){return this.electroPow;}
    
    }
    
    public void setElecEngInf(ElectroEngine elEng){
    engine = new ElectroEngine();
    engine.setElectroPow(elEng.getElectroPow());
    engine.SetCountryManufact(elEng.getCountryManufact());
    engine.setHorsePower(elEng.getHorsePower());}
    
    @Override
    public String toString(){
        StringBuilder sa = new StringBuilder();
        sa.append("Car ID:   ").append(getID()).append("\n");
        sa.append("Car cost: ").append(getCost()).append("\n");
        sa.append("Car engine Inf: "+ "\n");
        sa.append("Engine power: ").append(engine.getHorsePower()).append("\n");
        sa.append("Engine country manufact: ").
            append(engine.getCountryManufact()).append("\n");
        sa.append("Electro Power of Engine: ").append(engine.getElectroPow()).
                append("\n");
 
return sa.toString();}
}
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package ArrayListCarsAction;
import CarMainClass.ElectroCarsInf.ElectroCarInf;
 
import CarMainClass.AutoCarInf.Auto;
import java.util.ArrayList;
import java.util.Scanner;
 public class CarListAction {
     
   public static Auto GetCarToArray(){
       Auto auto = new Auto();
    Auto.Engine eng =  auto.new Engine();
       try (Scanner sc = new Scanner(System.in)) {
           int n;
           String str;
           System.out.println("Добавьте ID машины");
           auto.setID(n = sc.nextInt());
           
           System.out.println("Добавьте стоимость машины");
           auto.setCost(n = sc.nextInt());
           
           System.out.println("Введите объем двигателя");
           eng.setVolume(n = sc.nextInt());
           
           System.out.println("Введите мощность в лошадиных силах");
           eng.setHorsePower(n = sc.nextInt());
           
           System.out.println("Введите страну производства двигателя");
           eng.SetCountryManufact(str = sc.nextLine());
           
           auto.setEngInf(eng);
       }
   return auto;}
 
   
   public static ElectroCarInf GetElectroCarToArray(){
       ElectroCarInf elCar = new ElectroCarInf();
  ElectroCarInf.ElectroEngine elEngine = elCar.new ElectroEngine();
        try (Scanner sc = new Scanner(System.in)) {
       
           String str;
           System.out.println("Добавьте ID машины");
           elCar.setID(Integer.parseInt(str = sc.nextLine()));
           
           System.out.println("Добавьте стоимость машины");
           elCar.setCost(Integer.parseInt(str = sc.nextLine()));
           
           System.out.println("Введите электромощность двигателя");
           elEngine.setElectroPow(Integer.parseInt(str = sc.nextLine()));
           
           System.out.println("Введите мощность в лошадиных силах");
           elEngine.setHorsePower(Integer.parseInt(str = sc.nextLine()));
           
           System.out.println("Введите страну производства двигателя");
           elEngine.SetCountryManufact(str = sc.nextLine());
           
           elCar.setEngInf(elEngine);
       }
       
   return elCar;}
   
   
   public static void showAutoArray(ArrayList<Auto> auto){
       auto.stream().forEach((au) -> {
           System.out.println(au);
       });}
   
   public static void showElectroCarArray(ArrayList<ElectroCarInf> elCar){
       elCar.stream().forEach((au) -> {
           System.out.println(au);
       });}
}
В чём у меня ошибка?

И второй вопрос, если есть какие-то замечания по стилю или вообще по коду, буду рад выслушать критику.

Добавлено через 25 минут
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
11.02.2016, 02:07
Ответы с готовыми решениями:

Ошибка NoSuchElementException
package Dangeons; public class Dangeon { public static void main(String args){ MainMeny MM = new MainMeny(); MM.launch(); ...

java.util.NoSuchElementException
import java.util.*; import java.io.*; public class D246 { public static void main(String args) throws IOException{

NoSuchElementException при тесте метода в JUnit
Всем доброго времени суток! Бьюсь над одной проблемкой... Делаю тест метода, в котором данные вводятся пользователем. Вот тест: ...

5
 Аватар для Lumber
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
11.02.2016, 02:15
что за странная конструкция
(str = sc.nextLine())
зачем переменная
String str;
и все присваивания?

это не причина ошибки, просто бессмысленный код.
1
 Аватар для HOBATOP
323 / 310 / 206
Регистрация: 14.09.2015
Сообщений: 827
11.02.2016, 02:20
Rom96, ночь на дворе глубокая. Завтра Вам, по утру, ещё много чего наговорят, а пока, первое что бросилось в глаза, везде подправьте:
Java
1
2
3
4
5
6
//у Вас
System.out.println("Добавьте ID машины");
auto.setID(n = sc.nextInt());
//желательно
System.out.println("Добавьте ID машины");
auto.setID(sc.nextInt());
1
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 35
11.02.2016, 11:03  [ТС]
Спасибо за то, что ткнули, черт знает почему так написал.

Добавлено через 8 часов 34 минуты
Всё же это ошибку не исправило, так что жду предложений и ЦУ
0
 Аватар для Lumber
345 / 141 / 51
Регистрация: 02.12.2015
Сообщений: 333
11.02.2016, 14:17
Лучший ответ Сообщение было отмечено Rom96 как решение

Решение

Ошибка возникает потому что закрытие Scanner sc (он закрывается автоматически т.к. используется try с ресурсами) приводит к закрытию потока System.in. И при попытке следующего чтения из закрытого потока возникает исключение.

Возможно есть смысл сделать отдельный класс со статическими методами для чтения из консоли внутрь которого инкапсулировать один единственный Scanner который открыть один раз в начале программы и не закрывать до завершения.

Или можно Scanner как параметр передавать везде где он используется.
1
0 / 0 / 0
Регистрация: 07.11.2014
Сообщений: 35
11.02.2016, 14:25  [ТС]
Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.02.2016, 14:25
Помогаю со студенческими работами здесь

Бросает ошибку NoSuchElementException: No line found
Exception in thread &quot;main&quot; java.util.NoSuchElementException: No line found at java.util.Scanner.nextLine(Scanner.java:1540) at...

Реализация алгоритма Дэйкстры, java.util.NoSuchElementException: Underflow Exception
Добрый день, подскажите как исправить ошибку java.util.NoSuchElementException: Underflow Exception, программирую алгоритм Дэйкстры...

Exception in thread "main" java.util.NoSuchElementException
Добрый день! Я получаю при выполнении метода следующий эксепшн Exception in thread &quot;main&quot; java.util.NoSuchElementException at...

Считывание данных из файла NoSuchElementException
Нужно из текста скачать данные и записать их в карту. Думаю сделать так: сначала считать в байтовый массив затем преобразовать его в строку...

Ошибка NoSuchElementException, как исправить?
Ребятки помогите СРОЧНО. Выдает ошибку: Exception in thread &quot;main&quot; java.util.NoSuchElementException at...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а привычная функция main(). . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru