我有一个包含所有国家和首都名称的文本文件,我创建了一个名为国家的类,其中包含国家名称和首都名称,我试图获取文本文件的每一行并将其添加到我的国家数组中创建的。 我的主要文件是这个
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”,但每个输出都是 津巴布韦 哈拉雷 津巴布韦 哈拉雷 津巴布韦 哈拉雷 津巴布韦哈拉雷
这是文本文件中的最终国家/地区, 我还添加了一堆冗余代码,希望它可以解决问题,如果代码特别丑陋,那么抱歉
你的国家和首都在国家类中不能是静态的,因为这样它们每次都会被类覆盖。由于任何实例都像使用实例变量一样使用静态变量,因此所有实例都会看到最后的更改。所以只需删除那里的静电即可。然后清理剩余的代码。
您的 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());