这是我要从中读取数据的文本文件
|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
对于使用嵌套循环遍历每个数据还是使用数组列表存储每个数据然后使用if语句输出它,我感到困惑。请帮忙。
答案 0 :(得分:0)
对于使用嵌套循环遍历每个数据还是使用数组列表存储每个数据然后使用if语句输出它,我感到困惑。请帮忙。
您可以像处理此问题一样要求您通过2D数组搜索特定值来查找X和Y坐标。
如果行数和列数是任意的,则可以使用ArrayList的ArrayList存储矩阵(数据)。但是,由于您的“坐标”是“等级”和“年份”而不是运行数字,因此您还需要存储等级和年份的值(为了便于检索):
ArrayList<String> yearList = new ArrayList<>();
ArrayList<String> rankList = new ArrayList<>();
//populate both arraylist from file
然后使用ArrayList的ArrayList(也可以使用array数组)来存储数据矩阵:
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(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));
}