尝试将外部文件的每一行放在自定义类的数组中

Trying to put each line of an external file inside an array of custom class

提问人:ShoeL4ce 提问时间:10/26/2023 更新时间:10/26/2023 访问量:41

问:

我有一个文本文件,其中包含所有国家和首都的名称,我创建了一个名为 nation 的类,其中包含国家名称和大写字母名称,我尝试获取文本文件的每一行并将其添加到我创建的国家数组中。 我的主要文件是这个

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        final int  SIZE = 205;
        Nation nations [];
        nations = new Nation[SIZE];
        int i = 0;
        for(int j = 0; j < 205 ; j++ ){
            nations[j] = new Nation();
        }
        try {
            File myObj = new File("country.txt");
            Scanner myReader = new Scanner(myObj);
            while (myReader.hasNextLine()) {
                i++;
                nations[i].setcountry(myReader.nextLine());

            }
            myReader.close();
        } catch (FileNotFoundException e) {
            System.out.println("An error occurred.");
            e.printStackTrace();
        }
        System.out.println(nations[1].getCountry());
        System.out.println(nations[3].getCountry());
        System.out.println(nations[5].getCountry());
        System.out.println(nations[100].getCountry());
    }
    }


我的课程很简单,应该不会有任何问题

public class Nation {
    private static String country = "empty";
    private static String capital = "empty";
    public Nation(){
        country = "empty";
        capital = "empty";
    }
    public Nation(String coountry, String caapital){
        country = coountry;
        capital = caapital;
    }

    public void setCapital(String capital){
        this.capital = capital;
    }
    public void setcountry(String country){
        this.country = country;
    }
    public String getCapital(){return this.capital;}
    public String getCountry(){return this.country;}

}

我的文本文件是这样的: Country_name Capital_Name

在我的脑海中,输出应该是“index_country_name index_capital_name”,但每个输出都是 津巴布韦 哈拉雷 津巴布韦 哈拉雷 津巴布韦 哈拉雷 津巴布韦 哈拉雷

哪个是文本文件中的最后一个国家/地区, 我还添加了一堆冗余代码,希望它可以解决这个问题,如果代码特别丑陋,很抱歉

Java 数组 java.util.scanner 实例

评论

0赞 juwil 10/26/2023
请至少显示您的文件的某些行
0赞 Portal 10/26/2023
从顶部开始,您应该切换行,并且您现在没有向 Nations[0] 分配任何东西。更重要的是,如果文件中有 205 行,则将最后一行分配给数组外部的内存i++;nations[i].setcountry(myReader.nextLine());

答:

3赞 juwil 10/26/2023 #1

你的国家和首都不能在班级国家中是静态的,因为这样他们每次都会被班级覆盖。由于任何实例都使用静态变量,就好像它使用实例变量一样,因此所有实例都会看到最后的更改。所以只要去除那里的静电。然后清理剩余的代码。

评论

0赞 ShoeL4ce 10/26/2023
是的,就是这样,非常感谢
0赞 Reilas 10/26/2023 #2

您的 Nation 类正在使用静态变量。

private static String country = "empty";
private static String capital = "empty";

请改用 record 类

record Nation(String coountry, String caapital) { }
List<Nation> nations = new ArrayList<>();
try (Scanner myReader = new Scanner(new File("country.txt"))) {
    String[] s;
    while (myReader.hasNextLine()) {
        s = myReader.nextLine().split(" ");
        nations.add(new Nation(s[0], s[1]));
    }
} catch (FileNotFoundException e) {
    System.out.println("An error occurred.");
    e.printStackTrace();
}
System.out.println(nations.get(1).coountry());
System.out.println(nations.get(3).coountry());
System.out.println(nations.get(5).coountry());
System.out.println(nations.get(100).coountry());