读取文本文件,然后从数据集中列出年份和排名



这是我要从中读取数据的文本文件:

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

相关内容

最新更新