提问人:ShoeL4ce 提问时间:10/26/2023 更新时间:10/26/2023 访问量:41
尝试将外部文件的每一行放在自定义类的数组中
Trying to put each line of an external file inside an array of custom class
问:
我有一个文本文件,其中包含所有国家和首都的名称,我创建了一个名为 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”,但每个输出都是 津巴布韦 哈拉雷 津巴布韦 哈拉雷 津巴布韦 哈拉雷 津巴布韦 哈拉雷
哪个是文本文件中的最后一个国家/地区, 我还添加了一堆冗余代码,希望它可以解决这个问题,如果代码特别丑陋,很抱歉
答:
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());
下一个:如何使用扫描仪跳过输入?
评论
i++;
nations[i].setcountry(myReader.nextLine());