-1

我不知道为什么我会收到这个错误。我应该怎么做才能修复它?任何帮助都非常感谢。我排除了不影响错误的代码。第 33 行是 String string1 = token.nextToken();

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());
4

3 回答 3

3

你的代币用完了。您应该在标记之前打印出您的字符串,因为它可能不是您认为的那样。换句话说,您现在要做的是一些调试。

  • 注意 1:在使用hasMoreTokens()获取令牌之前,请始终先检查是否存在更多令牌nextToken()
  • 注意 2:我们大多数人都避免使用 StringTokenizer,而是使用 Scanner 或String#split(...).
于 2014-02-21T12:37:38.253 回答
1

看起来你没有user_input你想象的那么多令牌。默认情况下, Scanner#next()读取到下一个空白字符,并且 StringTokenizer 使用较小的空白字符子集作为分隔符,如API中所述。

也许您应该改为阅读用户输入Scanner#nextLine()

于 2014-02-21T12:37:40.973 回答
1

您可以在使用 StringTokenizer 遍历时使用 hasMoreTokens() 方法来检查标记是否实际存在。当且仅当在当前位置之后的字符串中至少有一个标记时,此方法调用才会返回“true”;

StringTokenizer token = new StringTokenizer(user_input);

// checking tokens

while (token.hasMoreTokens()){

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

此外,在您的代码中,您调用 nextToken 3 次,因此将遍历 3 个令牌。因此,如果您的输入字符串少于 3 个令牌,它将失败并出现异常。

看起来您想在调用代码中将其中一个标记转换为整数 = Integer.parseInt(token.nextToken());

你想说“code = Integer.parseInt(string1)”还是“code = Integer.parseInt(string2)”?

因为当您在 integer.parseInt 中说 token.nextToken 时,它会再次寻找下一个令牌,即在这种情况下的第三个令牌。希望这会有所帮助。

于 2014-02-21T12:56:35.647 回答