从txt文件读取ints java错误

从txt文件读取ints java错误,java,file,int,Java,File,Int,你能告诉我有什么问题吗?我试图从名为“tablica.txt”的文件中读取整数,它看起来像是一个文件:8 3 2 1 4 3 2 package Operacje_na_plikach; import jdk.nashorn.internal.ir.WhileNode; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.util.Ar

你能告诉我有什么问题吗?我试图从名为“tablica.txt”的文件中读取整数,它看起来像是一个文件:8 3 2 1 4 3 2

package Operacje_na_plikach;

import jdk.nashorn.internal.ir.WhileNode;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Scanner;

public class Zad1 {
    /*
    Plik tekstowy ‘tablica.txt’ ma postać: 8 3 2 1 4 3 2 Pobierz liczby z pliku tekstowego do tablicy i wypisz na ekranie sumę elementów tej tablicy.
     */
    public static int[] odczyt(String nazwa) {
        int[] arr = null;
        try {
            FileReader reader = new FileReader(nazwa);
            Scanner sc = new Scanner(reader);
            int d = sc.nextInt();
            int suma = 0;
            arr = new int[d];
            for (int i = 0; i < d; i++) {
                arr[i] = sc.nextInt();
                suma += arr[i];
            }

            sc.close();
            reader.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return arr;
    }

    public static void main(String[] args) {
        int[] arr = odczyt("tablica.txt");
        if (arr != null) {
            System.out.println(Arrays.toString(arr));
        }
    }
}
packageoperacje_na_plikach;
导入jdk.nashorn.internal.ir.WhileNode;
导入java.io.FileNotFoundException;
导入java.io.FileReader;
导入java.io.IOException;
导入java.util.array;
导入java.util.Scanner;
公开课Zad1{
/*
Plik tekstowy'tablica.txt'ma postać:8 3 2 1 4 3 2 Pobierz liczby z pliku tekstowego do tablicy i wypisz na ekranie sumęelementów tej tablicy。
*/
公共静态int[]odczyt(字符串nazwa){
int[]arr=null;
试一试{
FileReader=新的FileReader(nazwa);
扫描仪sc=新扫描仪(读卡器);
int d=sc.nextInt();
int-suma=0;
arr=新整数[d];
对于(int i=0;i
错误:

线程“main”java.util.NoSuchElementException中的异常位于 throwFor(Scanner.java:862)位于 next(Scanner.java:1485)位于 java.util.Scanner.nextInt(Scanner.java:2117)位于 java.util.Scanner.nextInt(Scanner.java:2076)位于 Operacje_na_plikach.Zad1.odczyt(Zad1.java:27)位于 Operacje_na_plikach.Zad1.main(Zad1.java:42)


您的代码正在读取第一个数字,然后使用该值确定还要读取多少个数字

您的输入是
8 3 2 1 4 3 2
,因此您的程序将读取
8
,然后尝试再读取8个数字


因为只有6个以上的数字,所以当您尝试读取第7个数字时,会出现错误。

您的代码使用第一个数字来确定要读取的数字数量

如果不知道需要读取多少个数字,可以使用ArrayList和函数Scanner.hasNextInt()如下所示:

ArrayList<Integer> arr = new ArrayList<Integer>();
while(scan.hasNextInt()) {
    int d = scan.nextInt();
    arr.add(d);
    suma += d;
}
ArrayList arr=new ArrayList();
while(scan.hasNextInt()){
int d=scan.nextInt();
arr.add(d);
suma+=d;
}

ArrayList是一个数组,可以自动扩展以存储数字并进行扫描。hasNextInt()检查是否还有更多的数字需要读取。

如何定义数组的长度在这种情况下,我的意思是,当我更改输入时,它将始终使该数组具有适当的长度