0

我试图弄清楚如何使用数组从文件中读取数据。文件中的数据如下所示:

Clarkson 80000
Seacrest 100000
Dunkleman 75000
...

我想使用数组存储该信息。目前我有这样的东西来读取数据并使用它:

            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

问题是,我这样做的方式意味着我永远无法为更多参赛者或其他人操纵文件数据。虽然我可以使用这种方式并在不同的方法中处理所有数学并获得预期的输出……但我认为它的效率真​​的很低。

预期输出:

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!

我认为将输入文件数据读入数组可能很容易使用java.io.BufferedReader有没有办法不使用它?我看了这个:Java:如何读取文本文件,但我一直认为这是一个不同的实现。

我想尝试通过可理解的数组处理所有信息,也许至少有 2-3 种方法(除了读取和存储运行时所有数据的主要方法)。但是假设我想使用这些数据并找到百分比和东西(比如输出)。找出获胜者......甚至可能按字母顺序排列结果!

我想尝试一些东西并了解代码是如何工作的,以了解手头的概念。;C

4

2 回答 2

1

你有几个选择:

  1. 创建一个类来表示您的文件数据,然后拥有这些对象的数组

  2. 并行维护两个数组,一个是名字,另一个是投票

  3. 使用 a Map,其中人名是,票数是

    a) 让您像数组一样直接访问

    b) 你不需要创建一个类

选项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;

选项 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;

选项 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);

现在您可以返回任何操作数据到您心中的内容。

于 2013-04-25T22:51:17.883 回答
1
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++;

}

这将循环,直到他自动发现您没有更多要阅读的行。在循环内,您可以做任何您想做的事情(打印姓名和投票等)。在这种情况下,您将所有值保存到array[][].

array[][]将是这样的:

array[0][0]= Clarkson 

array[0][1]= 80,000  

array[1][0]= Seacrest

array[1][1]= 100,000 

...等等。

另外,我可以看到你必须做一些数学。因此,如果将其保存为字符串,则应通过以下方式将其转换为双精度:

double votesInDouble= Double.parseDouble(array[linePosition][1]);
于 2013-04-25T22:47:48.603 回答