所以最新的是我试图读取这个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
这是我的代码(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");
}
}
}
答案 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
设置完成后,会创建一个新的整数,然后保存到正确的数组中。上面的代码有一些错误,需要稍微清理一下。您应该包含一个检查扫描程序是否有新代码行的规定,并确保它忽略空格并且只包含实际包含文本的行。