【问题标题】:Java Exception in thread "main" java.util.NoSuchElementException runtime error线程“main”中的 Java 异常 java.util.NoSuchElementException 运行时错误
【发布时间】:2015-04-15 14:39:08
【问题描述】:

我一直在制作一个简单的 java 程序作为学校的家庭作业。当我添加一种从 .txt 文件中检索二维数组的方法时,出现了此错误。该程序在编译时不显示任何错误。我是一名新程序员,所以请彻底检查添加或更改的任何内容。除了手头的问题之外,请随时给我更多提示和建议。

提前致谢

代码如下:

import java.util.*;
import java.io.*;

public class simpleAI2
{

   public static void main (String [] args)
   {
      int count = 0;
      String[][] array = new String [20][4];
      simpleAI2.getArrayData(array);
      String leaveQ;
      int rep = 1;

      do
      {
         int countTwo = 0;
         boolean flag = false;
         Scanner scanName = new Scanner (System.in);
         Scanner scanSport = new Scanner (System.in);
         Scanner leave = new Scanner (System.in);


         System.out.println("My name is A.I.S.C.M.B.T. What is your name?");
         array[count][1] = scanName.nextLine ();
         System.out.println("Hi "+array[count][1]+"! What's your favourite sport?");
         array[count][2] = scanSport.nextLine ();
         String sport = array[count][2];

         for(int x = 1;x<rep;x++)
         {
            if(!array[countTwo][2].equals(null) && array[countTwo][2].equals(array[count][2]))
               {
               flag = true;
               x = 28;
               }

            else
               {
               flag = false;
               }

            countTwo ++;
         }


         countTwo --;

         if(flag == true)
            {
            System.out.println("I know "+array[countTwo][2]+". It is "+array[countTwo][3]+". My friend "+array[countTwo][1]+" knows it");
            }

         if(flag == false)
            {
            System.out.println("I don't know "+array[count][2]+". I only know robot boxing. Robots hit each other until one malfunctions. What is this alien sport you speak of?");
            array[count][3] = scanSport.nextLine ();
            }

         System.out.println("Go again? Type no to leave me :(");
         leaveQ = leave.nextLine ();

         rep ++;

         count ++;

         if(leaveQ.equals("no"));
            {
            simpleAI2.Save(array);
            }

      }while (!leaveQ.equals("no"));

   }



   public static void Save(String [][] array){

      try {
         PrintWriter writer = new PrintWriter(new File("arrayData.txt"));

         for(int x=0; x<array.length; x++){
            for(int y=0; y<array[x].length; y++){
               writer.write(String.valueOf(array[x][y]));
            }
            writer.println(); 
         }

         writer.flush();  
         writer.close();        



      } 
      catch (FileNotFoundException e) 
         {      
         e.printStackTrace();
         }


   }

   public static void getArrayData(String [][] array){

      try {
         Scanner scan2 = new Scanner(new File("arrayData.txt"));

         for(int i=0; i<array.length;  i++){
            for(int j=0; j<array[i].length; j++)
            {
               array[i][j]=scan2.next(); 


            }
         }


      } 

      catch (FileNotFoundException e)
         { 
         e.printStackTrace(); 
         }    

   }
}

【问题讨论】:

  • 你是通过命令行还是IDE运行它?
  • @erhun 我用jGrasp所以IDE
  • 我们可以看到堆栈跟踪吗?
  • @KacyRaye 恐怕我不知道那是什么:/我对 java 和一般编程很陌生

标签: java function methods runtime-error main


【解决方案1】:

如果你调用Scanner函数next(),当没有什么要读的时候,它会抛出一个NoSuchElementException
将您的代码更改为以下内容:

public static void getArrayData(String [][] array)
{
    try 
    {
        Scanner scan2 = new Scanner(new File("arrayData.txt"));

        for(int i=0; i<array.length;  i++)
        {
            for(int j=0; j<array[i].length; j++)
            {
                if ( ! scan2.hasNext() )  //if there's nothing left to read
                    return;               //exit the function

                array[i][j]=scan2.next(); 
            }
        }
    } 
    catch (FileNotFoundException e)
    { 
        e.printStackTrace(); 
    }    

}

【讨论】:

  • 谢谢。现在没有错误了。该程序本身现在不起作用。如果程序“学习”足球,退出然后重新启动它应该仍然知道它。但它没有
  • @userX 我不会解决你所有的错误,但我可以给你提示。似乎您的整个数组可能不会被文件中的输入填满。也就是说,字符串数组以null 作为其默认值开始,因此您应该检查您在save() 函数中保存到文件的元素是否没有写入空值(除非您想要这种行为)。单步执行您的程序并使用打印语句进行调试。如果输出看起来很完美,那么您可能会误解外部库中的函数是如何工作的。在线阅读他们在 java API 中的描述。
  • 当我打开文本文件时,它显示很多 null。我假设这意味着它正在写入空值。为什么这不是我想要的,我怎样才能让它不写空值?
  • 方法确实开始了。我不确定“尝试”是否有效
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-22
  • 2016-01-09
  • 1970-01-01
相关资源
最近更新 更多