2014-02-21 5 views
-1

Я не знаю, почему я получаю эту ошибку. Что мне делать, чтобы исправить это? Любая помощь действительно ценится. Я исключил код, который не влияет на ошибку. Строка 33 - строка string1 = token.nextToken();Получение исключения NoSuchElement 33

import java.net.*; 
import java.io.*; 
import java.util.*; 
import java.util.Scanner; 

public class Exec { 
public static void main(String[ ] args){ 


     Scanner input = new Scanner(System.in); 

     String user_input = " "; 

     //user gets asked to enter input here... 
        //... 

     //tokenize input into 2 strings and method code 
     user_input = input.next(); 
     StringTokenizer token = new StringTokenizer(user_input); 
     String string0 = token.nextToken(); 
     String string1 = token.nextToken(); 
     code = Integer.parseInt(token.nextToken()); 

ответ

3

У вас закончились жетоны. Вы должны распечатать свою строку перед тем, чтобы ее токенизировать, поскольку это, вероятно, не так, как вы думаете. Другими словами, то, что вы хотите сделать, это некоторая отладка.

  • Примечание 1: всегда сначала проверьте, если токенов больше существует с hasMoreTokens(), прежде чем принимать токен nextToken().
  • Примечание 2: большинство из нас избегает использования StringTokenizer и вместо этого использует либо сканер, либо String#split(...).
1

Похоже, что у вас не так много токенов в user_input, как вы думаете. По умолчанию Scanner#next() читает до следующего символа пробела, а StringTokenizer использует меньший подмножество символов пробелов в качестве разделителя, как указано в API.

Возможно, вам стоит прочитать ввод пользователя с использованием Scanner#nextLine().

1

Вы можете использовать метод hasMoreTokens() при обходе с помощью StringTokenizer, чтобы проверить, что на самом деле присутствуют токены. Этот вызов метода возвращает «true» тогда и только тогда, когда в текущей строке есть хотя бы один токен;

StringTokenizer token = new StringTokenizer(user_input); 

// checking tokens 

while (token.hasMoreTokens()){ 

    System.out.println("Next token : " + token.nextToken()); 
    } 

Кроме того, в вашем коде вы звоните nextToken 3 раза, так что 3 жетоны будут traversed.So, если входная строка имеет менее 3-х токенов оно не будет, за исключением вы получаете.

Похоже, что вы хотите преобразовать один из токенов в целое число в вызов code = Integer.parseInt (token.nextToken());

Вы хотите сказать: "code = Integer.parseInt (string1)" ИЛИ "code = Integer.parseInt (string2)" вместо этого?

Потому что, когда вы говорите token.nextToken в integer.parseInt, он снова будет искать следующий токен, т. Е. Третий токен в этом случае. Надеюсь, это поможет.

+0

Это выглядит очень полезно для меня. 1+ –

Смежные вопросы