读取程序的值为0

时间:2014-06-09 14:58:09

标签: java arrays

所以最新的是我试图读取这个PlayerData.txt文件:

Dirk-Nowitzki (Dallas-Mavericks) 24 11 5

Dwayne-Wade (Miami-Heat) 36 8 6

LeBron-James (Miami-Heat) 20 8 10

Shawn-Marion (Dallas-Mavericks) 20 6 6

Chris-Bosh (Miami-Heat) 12 4 5

Jason-Terry (Dallas-Mavericks) 16 3 6

DeShawn-Stevenson (Dallas-Mavericks) 12 3 5

Mario-Chalmers (Miami-Heat) 9 1 4

Peja-Stojakovic (Dallas-Mavericks) 2 1 1

Mike Miller (Miami-Heat) 7 2 3

我正在读三个整数,分别是积分,篮板和助攻 并且我在输出窗口中将它们打印出来,但我得到的所有整数值都是0。 我很确定这是一个非常简单的解决方案,我正在制作初学者的错误,但我只是不知道在哪里.... 谁能告诉我我做错了什么和/或我需要做些什么来解决它?提前谢谢。

这是我的代码(ps我不允许使用bufferreader或arraylist):

import java.util.Scanner;

import java.io.*;

public class CPT {

    public static void main(String[] args) throws IOException{

        Scanner scan = new Scanner (new File("PlayerData.txt"));

        int Points[] = new int[10];

        int Rebounds[] = new int[10];

        int Assists[] = new int[10];


        for (int i=0;i<=10;i++){
            while (scan.hasNextInt()){
                Points[i]=scan.nextInt();
            }
            while (scan.hasNextInt()){
                Rebounds[i]=scan.nextInt();
            }
            while (scan.hasNextInt()){
                Assists[i]=scan.nextInt();
            }
        }
        for (int i=0;i<=9;i++){
            System.out.print(Points[i]+"\t"+Rebounds[i]+"\t"+Assists[i]+"\n");
        }
    }       
}   

4 个答案:

答案 0 :(得分:2)

问题是你正试图进行注意:

scan.hasNextInt()

但是,您的文件包含以下行:

  德克 - 诺维茨基(达拉斯 - 小牛队)24 11 5

您需要先阅读文本,然后解析整数。

答案 1 :(得分:1)

就像AnubianNoob所说,你必须首先丢弃名称和团队然后解析你的数据,而不是使用for循环并可能超出你的输入值,尝试使用while(scan.hasNext());和{{1}相反,如果您决定添加额外的数据,它可以使您的程序更具可扩展性,而且您不必跟踪单个数组的持续时间。

编辑:您的最后一行也说for(int i = 0; i < points.length; i++)而非Mike Miller,因此在解析时可能会导致打嗝

答案 2 :(得分:0)

只是快速浏览一下你的代码,我只看到一些问题,但我认为它们与你的问题没有直接关系。

首先,读取值的FOR循环将循环11次,超过数组的大小。使用i&lt; 10或i&lt; = 9,为了保持一致性,我会使用i&lt; = 9,因为这是你为第二个FOR循环所做的。

其次,我不认为您在阅读数据时想要运行WHILE循环。您的代码只会将所有内容插入Points数组中。您想将这些更改为IF语句。

答案 3 :(得分:0)

就像其他人都指出的那样,第一个循环会出错,因为它会循环11次而不是10次。

为了加载数据,我会采用不同的方法,将每一行读成一个字符串,然后拆分字符串。

for (int i = 0; i < points.length; i++) {
    String line = scan.nextLine();
    String[] split = line.split(" ");

    Points[i] = new Integer(split[2]);
    Rebounds[i] = new Integer(split[3]);
    Assists[i] = new Integer(split[4]);
}

扫描仪基本上会读取每行文本。然后通过“”将该行拆分为数组。例如,第一行文本将被分割为

split [0] = Dirk-Nowitzki

split [1] =(Dallas-Mavericks)

split [2] = 24

split [3] = 11

split [4] = 5

设置完成后,会创建一个新的整数,然后保存到正确的数组中。上面的代码有一些错误,需要稍微清理一下。您应该包含一个检查扫描程序是否有新代码行的规定,并确保它忽略空格并且只包含实际包含文本的行。