这是我要从中读取数据的文本文件:
|RANK| 1950| 1994| 1998|
| 1| JIN| KIM| JOHN|
| 2| JIM| KIM| RON|
| 3| FRED|CRAIG| JIN|
| 4| JOHN| MARK| DON|
我想打开数据文件并提示用户输入上面的名称,然后程序可以从数据集中列出名称的年份和排名。
这就是到目前为止我使用 Netbeans 所做的:
import java.util.Scanner;
import java.io.FileNotFoundException;
public class JavaTask1 {
public static void main(String[] args) {
//file instance
java.io.File file = new java.io.File("mynames.txt");
try{
Scanner input = new Scanner(file);
//create scanner object
Scanner in = new Scanner(System.in);
System.out.print("Enter name:> ");
String myname = in.nextLine(); //read user input
String[] fullData;
while(input.hasNext()){
//split data
fullData = input.next().split("\|");
ArrayList<String> yearList = new ArrayList<>();
ArrayList<String> rankList = new ArrayList<>();
//populate both arraylist from file
ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
//Populate the matrix of names from file into matrix;
for(int x=0; x<matrix.size(); x++)
for(int y=0; y<matrix.get(x).size(); y++){
String currName = matrix.get(x).get(y);
if(currName.equalsIgnoreCase(myname))
System.out.println("Year (" + yearList.get(y) + ") Ranked " + rankList.get(x));
}
}
}catch(FileNotFoundException e){
System.out.println("Error the file cannot be found");
}
}
}
我希望程序输出如下:
Enter name: > John
Year (1998) Ranked 1
Year (1950) Ranked 4
我对是使用嵌套循环遍历每个数据还是使用arraylist来存储每个数据然后使用if语句输出它感到困惑。请帮忙。
我对是使用嵌套循环遍历每个数据还是使用arraylist来存储每个数据然后使用 if 语句输出它感到困惑。请帮忙。
您可以将此问题视为要求您通过 2D 数组寻找特定值来查找 X 和 Y 坐标。
您可以使用 ArrayList 的 ArrayList 来存储您的矩阵(数据),如果行数和列数是任意的。但是由于您的"坐标"是"排名"和"年份"而不是运行数字,因此您还需要存储排名和年份的值(以便于检索):
ArrayList<String> yearList = new ArrayList<>();
ArrayList<String> rankList = new ArrayList<>();
//populate both arraylist from file
然后使用 ArrayList 的ArrayList(也可以使用数组的数组)来存储数据矩阵:
ArrayList<ArrayList<String>> matrix = new ArrayList<ArrayList<String>>();
//Populate the matrix of names from file into matrix;
然后使用嵌套的 for 循环遍历矩阵:
for(int x=0; x<matrix.size(); x++)
for(int y=0; y<matrix.get(x).size(); y++){
String currName = matrix.get(x).get(y);
if(currName.equalsIgnoreCase(name))
System.out.println("Year (" + yearList.get(y) + ") Ranked " + rankList.get(x));
}
但是,如果您使用的是 ArrayList,则可以使用indexOf()
通过搜索允许您使用一个for 循环的名称来获取索引:
for(int x=0; x<matrix.size(); x++){
int yearIdx = matrix.get(x).indexOf(name);
if(yearIdx >= 0)
System.out.println("Year (" + yearList.get(yearIdx) + ") Ranked " + rankList.get(x));
}