Чтение из файла и вставка его в массив, Java

#java

#java — язык

Вопрос:

Я получаю ошибку времени выполнения этого кода.

Я считываю данные из файла, помещая их в массив, а затем используя алгоритм сортировки вставки, чтобы отсортировать их и распечатать результат

Что вызывает мою ошибку во время выполнения? Это ошибка времени выполнения: java.util.Исключение InputMismatchException

Файл содержит следующее: 37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 91942213363574161572522430563301811072406154908250 23067588207539346171171980310421047513778063246676 89261670696623633820136378418383684178734361726757 28112879812849979408065481931592621691275889832738 44274228917432520321923589422876796487670272189318

 import java.util.Scanner;
import java.awt.*;
import javax.swing.*;
import java.io.*;

public class InsertionSortExample { 
  private static int [] arr1;
  
  public static void main(String[]args){  
    String fileName = "Data.txt"; //adds file as string
    try{
      Scanner fileScan = new Scanner(new File(fileName));//looks at the file
      while(fileScan.hasNextLine()){//while there is another line in the file
        String inputLine = fileScan.nextLine(); //adds that line to a string
        Scanner scan = new Scanner(inputLine); //looks at each line
        for(int i = 0; i < inputLine.length(); i  ){ //reads through the line
          arr1[i] = scan.nextInt(); //adds each element to an array
        }
      }
    }
    catch(FileNotFoundException e){
      System.out.println("File not found. Check file name and location."); // if theres no dile itll say
      System.exit(1);
    }
   
    insertionSort(arr1);//sorting array using insertion sort    
    for(int member:arr1){    
      System.out.print(member  " ");  //prints out each element of the array
    }
  }    
  
  public static void insertionSort(int array[]) {  
    int n = array.length;  //length of the array
    for (int j = 1; j < n; j  ) {  //for each member of the array
      int key = array[j];  
      int i = j-1;  
      while ( (i > -1) amp;amp; ( array [i] > key ) ) {  
        array [i 1] = array [i];  
        i--;  
      }  
      array[i 1] = key; 
    }
  }
}
  

Комментарии:

1. Я вижу пробел внутри 2-й строки вашего ввода? Это опечатка? или это может быть примерно так.

2. @ChayneP.S. Это опечатка

3. Можете ли вы точно определить, какая строка выдает ошибку?

4. @ChayneP.S. на java.util. Scanner.throwFor(Scanner.java:864)

Ответ №1:

Думаю, я знаю почему.. Для int ограничение числа составляет около 2 миллиардов .. или 10 цифр. Ваши цифры намного больше. Даже длинный не может быть таким большим.. Может быть, вместо этого использовать BigInteger? но вашу функцию сортировки необходимо будет изменить.

Комментарии:

1. В моем файле не было пробелов между значениями, так что исправлена ошибка времени выполнения. Я использовал python для просмотра файла и добавления пробелов между каждым числом в файле.