2015-02-14 5 views
0

Я делаю простую программу Java как домашнее задание для школы. Когда я добавил метод для извлечения 2D-массива из TXT-файла, эта ошибка появилась. При компиляции программа не обнаруживает ошибок. Я новый программист, поэтому, пожалуйста, пройдите через все, что было добавлено или изменено полностью. Пожалуйста, не стесняйтесь давать мне дополнительные советы и рекомендации, кроме вопроса.Java Exception in thread "main" java.util.NoSuchElementException ошибка времени выполнения

Заранее спасибо

Вот код:

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

    } 
} 
+0

вы запустите его с помощью командной строки или IDE? – erhun

+0

@erhun Я использую jGrasp так IDE – userX

+0

Можем ли мы увидеть стек? – Kacy

ответ

1

При вызове функции Scannernext(), когда есть нечего читать, он будет бросать 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(); 
    }  

} 
+0

Спасибо. Теперь ошибок нет. Сама программа не работает. Если программа «учится» по футболу, выходы затем перезапускаются, она все равно должна это знать. Но это не было – userX

+0

@userX Я не буду решать все ваши ошибки, но я могу дать вам советы. Похоже, что весь ваш массив не будет заполнен вводом из файла. Тем не менее, массивы String начинаются с значения «null» в качестве значения по умолчанию, поэтому вы должны проверить, что элемент, сохраненный в файле в функции 'save()', не записывает нулевые значения (если вы не хотите этого поведения). Пройдите через вашу программу и используйте инструкции печати для отладки. Если вывод выглядит идеально, то вы можете не понимать, как работает функция из внешних библиотек. Прочтите их описания в java API онлайн. – Kacy

+0

Когда я открываю текстовый файл, он говорит null много. Я предполагаю, что это означает, что он пишет нулевые значения. Почему это не то, что я хочу, и как я могу заставить его не писать нулевые значения? – userX

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