Прочитайте текстовый файл, затем укажите год и рейтинг из набора данных - PullRequest
0 голосов
/ 11 июля 2019

Это мой текстовый файл, из которого я хочу прочитать данные:

|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.Пожалуйста, помогите.

1 Ответ

0 голосов
/ 11 июля 2019

Я запутался в том, использовать ли вложенные циклы для циклического прохождения всех данных или массив списков для хранения всех данных, а затем выводить их с помощью оператора if.Пожалуйста, помогите.

Вы можете решить эту проблему, например, попросить вас найти координаты X и Y, выполнив поиск определенного значения в двумерном массиве.

Вы можете использовать ArrayList из ArrayListхранить вашу матрицу (данные), если количество строк и столбцов произвольно.Но поскольку вашими «координатами» являются «Ранг» и «Год» вместо порядковых чисел, вам также необходимо сохранить значения рангов и лет (для удобства поиска):

ArrayList<String> yearList = new ArrayList<>();
ArrayList<String> rankList = new ArrayList<>();
//populate both arraylist from file

Затем используйте ArrayListArrayList (также возможно использование массива массива) для хранения матрицы данных:

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() для получения индекса, выполнив поиск по имени, что позволяет использовать one for-loop:

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));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...