简体   繁体   中英

How to implement array processing with read file data?

I'm trying to figure out how to read data from a file, using an array. The data in the file is listed like this:

Clarkson 80000
Seacrest 100000
Dunkleman 75000
...

I want to store that information using an array. Currently I have something like this to read the data and use it:

            String name1 = in1.next();
            int vote1 = in1.nextInt();


            //System.out.println(name1 +" " + vote1);

            String name2 = in1.next();
            int vote2 = in1.nextInt();

            //System.out.println(name2 +" " + vote2);

            String name3 = in1.next();
            int vote3 = in1.nextInt();
              ...
              //for all names

Problem is, the way I'm doing it means I can never manipulate the file data for more contestants or whatnot. While I can use this way and handle all the math within different methods and get the expected output...its really inefficient I think.

Output expected:

American Idol Fake Results for 2099
Idol Name        Votes Received    % of Total Votes
__________________________________________________      
Clarkson            80,000            14.4%
Seacrest            100,000           18.0%
Dunkleman           75,000            13.5%
Cowell              110,000           19.7%
Abdul               125,000           22.4%
Jackson             67,000            12.0%

Total Votes         557,000

The winner is Abdul!

I figure reading input file data into arrays is likely easy using java.io.BufferedReader is there a way not to use that? I looked at this: Java: How to read a text file but I'm stuck thinking this is a different implementation.

I want to try to process all the information through understandable arrays and maybe at least 2-3 methods (in addition to the main method that reads and stores all data for runtime). But say I want to use that data and find percentages and stuff (like the output). Figure out the winner...and maybe even alphabetize the results!

I want to try something and learn how the code works to get a feel of the concept at hand. ;c

You have several options:

  1. create a Class to represent your File data, then have an array of those Objects

  2. maintain two arrays in parallel, one of the names and the other of the votes

  3. Use a Map , where the name of the person is the key and the number of votes is the value

    a) gives you direct access like an array

    b) you don't need to create a class

Option 1:

public class Idol 
{
   private String name;
   private int    votes; 

   public Idol(String name, int votes) 
   {
       // ...
   }

}

int index = 0;
Idol[] idols = new Idol[SIZE];

// read from file
String name1 = in1.next();
int vote1 = in1.nextInt();

//create Idol
Idol i = new Idol(name1, vote1);

// insert into array, increment index
idols[index++] = i;

Option 2:

int index = 0;
String[] names = new String[SIZE];
int[] votes    = new int[SIZE];

// read from file
String name1 = in1.next();
int vote1 = in1.nextInt();


// insert into arrays
names[index] = name1;
votes[index++] = vote1;

Option 3:

// create Map
Map<String, Integer> idolMap = new HashMap<>();

// read from file
String name1 = in1.next();
int vote1 = in1.nextInt();

// insert into Map
idolMap.put(name1, vote1);

Now you can go back any manipulate the data to your hearts content.

int i=0  
 while (in.hasNextLine())

   {  

      name = in.nextLine();
      vote = in.nextInt();


      //Do whatever here: print, save name and vote, etc..
      //f.e: create an array and save info there. Assuming both name and vote are 
      //string, create a 2d String array.
     array[i][0]=name;
     array[i][1]=vote;

     //if you want to individually store name and votes, create two arrays.
     nameArray[i] = name;
     voteArray[i] = vote;
     i++;

   }

This will loop until he automatically finds you don't have any more lines to read. Inside the loop, you can do anything you want (Print name and votes, etc..). In this case, you save all the values into the array[][].

array[][] will be this:

array[0][0]= Clarkson 

array[0][1]= 80,000  

array[1][0]= Seacrest

array[1][1]= 100,000 

...and so on.

Also, I can see that you have to do some maths. So, if you save it as a String, you should convert it to double this way:

double votesInDouble= Double.parseDouble(array[linePosition][1]);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM