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

问题描述 投票:0回答:2

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

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

}

我的文本文件是这样的: 国家/地区_名称 首都_名称

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

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

java arrays java.util.scanner instance
2个回答
3
投票

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


0
投票

您的 Nation 类正在使用 static 变量。

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

请改用 记录类

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());
© www.soinside.com 2019 - 2024. All rights reserved.