【问题标题】:Why Exception in thread "main" java.util.NoSuchElementException?为什么线程“main”java.util.NoSuchElementException中出现异常?
【发布时间】:2017-04-20 15:20:57
【问题描述】:
import java.io.*;
import java.util.*;


public class chopMiddle {

    public static void main(String[] args) {
        String sample = "1,2,3,4,5";
        StringTokenizer tokenizer = new StringTokenizer(sample, ",");

        while(tokenizer.hasMoreTokens()) { 
            int convertedToInt = Integer.parseInt(tokenizer.nextToken());

            int [] array = new int [3]; 

            for(int i = 0; i < array.length; i++)
            {
                array[i] = Integer.parseInt(tokenizer.nextToken());
                System.out.println(array[i] + " ");
            }
         }
     } 
 }

我尝试将字符串分解为标记并使用Integer.parseInt 方法将标记转换为int 值。 我想返回一个大小为 3 的数组,其中包含从字符串到调用者的第二个到第四个整数的 int 值。我做错了什么,因为它在我编译时显示以下消息

Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(StringTokenizer.java:349)
at chopMiddle.main(chopMiddle.java:18)

【问题讨论】:

    标签: java exception


    【解决方案1】:

    问题是当它到达第 5 个令牌时,它会读取它,然后创建一个新数组并尝试再读取 3 个。

    读完第 2、3、4 章后,你应该打破这两个循环。

    【讨论】:

      【解决方案2】:
      while(tokenizer.hasMoreTokens()) { 
          int convertedToInt = Integer.parseInt(tokenizer.nextToken());
      
          int [] array = new int [3]; 
      
          for(int i = 0; i < array.length && tokenizer.hasMoreTokens(); i++) //check hasMoreTokens
          {
              array[i] = Integer.parseInt(tokenizer.nextToken());
              System.out.println(array[i] + " ");
          }
      }
      

      每次打电话都需要检查:tokenizer.nextToken()

      【讨论】:

        【解决方案3】:

        如果您检查tokenizerfor 循环本身中是否有更多元素,那么您根本不需要while 循环。

        试试下面的例子:

        public static void main(String[] args) {
                String sample = "1,2,3,4,5";
                StringTokenizer tokenizer = new StringTokenizer(sample, ",");
        
                int[] array = new int[3];
        
                for (int i = 0; i < array.length && tokenizer.hasMoreTokens(); i++) {
                    array[i] = Integer.parseInt(tokenizer.nextToken());
                    System.out.println(array[i] + " ");
                }
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-22
          • 2021-07-13
          • 1970-01-01
          • 2018-03-19
          相关资源
          最近更新 更多