Исключение в основном потоке java.util.NoSuchElementException в java.util.Scanner.throwFor(Scanner.java:862)

Я действительно не понимаю, в чем может быть проблема. Это ошибка, которую я получаю:

$javac Palindrome.java $java -Xmx128M -Xms16M Palindrome Enter your word Exception in thread "main" java.util.NoSuchElementException at java.util.Scanner.throwFor(Scanner.java:862) at java.util.Scanner.next(Scanner.java:1485) at java.util.Scanner.nextInt(Scanner.java:2117) at java.util.Scanner.nextInt(Scanner.java:2076) at Palindrome.main(Palindrome.java:28)

Это код:

import java.io.*;
import java.util.Scanner;
import java.util.*;
import java.lang.StringBuffer;
// Java program to illustrate checking of a string
// if its palindrome or not using reverse function
public class Palindrome
{
public static void checkPalindrome(String s)
{
// reverse the given String
    String reverse = new StringBuffer(s).reverse().toString();
// check whether the string is palindrome or not
if (s.equals(reverse))
System.out.println("Yes");
else
System.out.println("No");
}
public static void main (String[] args) throws java.lang.Exception
{
Scanner scanner = new Scanner(System.in);
System.out.println("Enter your word");
String output = scanner.next();
}
}

Я запрашиваю слово, а затем получаю ввод, чтобы проверить, является ли это палиндромом.


person oakanb2    schedule 07.06.2018    source источник
comment
Возможный дубликат java.util.NoSuchElementException - Сканер читает пользовательский ввод   -  person Logan    schedule 07.06.2018
comment
@Logan В каждом сообщении SO, которое я видел с этой проблемой, разрешение удаляет scan.close(), но в моем коде этого нет, поэтому я не понимаю, в чем проблема. Я также использую онлайн-IDE, может ли быть проблема   -  person oakanb2    schedule 07.06.2018
comment
Вы можете вводить данные в эту онлайн-среду IDE?   -  person Logan    schedule 07.06.2018
comment
Я не могу воспроизвести эту ошибку с указанным кодом   -  person GBlodgett    schedule 07.06.2018
comment
Когда вы запустили команду java -Xmx128M -Xms16M Palindrome, ждала ли программа ввода после того, как напечатала Enter your word? Если да, то какое слово вы ввели? Сообщение об ошибке появилось после того, как вы нажали Enter?   -  person Mark Stewart    schedule 07.06.2018
comment
@MarkStewart сообщение об ошибке появилось, как только я нажал «Выполнить». Это онлайн-среда разработки tutorialspoint.com/compile_java_online.php.   -  person oakanb2    schedule 08.06.2018


Ответы (2)


В онлайн-редакторе эта проблема возникает при вводе. Попробуйте написать до получения входных данных:

    if(sc.hasNext())

Код можно записать так:

    public class Palindrome
    {
    public static void checkPalindrome(String s)
    {
    // reverse the given String
        String reverse = new StringBuffer(s).reverse().toString();
    // check whether the string is palindrome or not
    if (s.equals(reverse))
    System.out.println("Yes");
    else
    System.out.println("No");
    }
    public static void main (String[] args) throws java.lang.Exception

    Scanner scanner = new Scanner(System.in);
    System.out.println("Enter your word");

    if(sc.hasNext())

    String output = scanner.next();
    }
    }
person Mutaealim    schedule 14.02.2019

Я не могу оставлять комментарии, так как у меня недостаточно репутации. Но решение в том, что у вас нет источника ввода.

Строка, на которую ссылается ваша трассировка стека:

 private void throwFor() {
    skipped = false;
    //since you are using an online tool, you dont actually have an
    //input unless you click on the stdin tab and provide an input.
    if ( (sourceClosed) && (position == buf.limit()))
        throw new NoSuchElementException();
    else
        throw new InputMismatchException();
}

Просто нажмите на вкладку stdin и введите что-нибудь в нее, прежде чем выполнять свой код в онлайн-идее, и вы больше не должны получать исключение. Но вы должны предоставить какой-то вывод, который отражает ваш результат, если это палиндром :).

person Barry    schedule 07.06.2018
comment
Спасибо!! Я не знаю, почему я не заметил стандартный ввод - person oakanb2; 08.06.2018