这个问题与我4天前制作的问题非常相关here 我需要做的是创建一个垂直直方图,它读取.txt文件中列出的学生成绩(从1到10)的出现次数:
马克2 Elen 3
路加7号 Elen 9
Jhon 5
马克4
Elen 10
路加1 Jhon 1
Jhon 7
Elen 5
马克3
马克7
这是我的代码:
import java.util.Scanner;
import java.io.*;
public class GradeHistogram {
public static void main(String[] args) throws IOException {
Scanner fileScan = new Scanner(new File("RegistroVoti.txt"));
String line;
char currentChar;
int [] array = new int [10];
int max = 0, currentValue;
while (fileScan.hasNext()) {
line = fileScan.nextLine();
for(int j=0; j < line.length(); j++) {
currentChar = line.charAt(j);
if (currentChar == '1')
array[0]++;
else if (currentChar == '2')
array[1]++;
else if (currentChar == '3')
array[2]++;
else if (currentChar == '4')
array[3]++;
else if (currentChar == '5')
array[4]++;
else if (currentChar == '6')
array[5]++;
else if (currentChar == '7')
array[6]++;
else if (currentChar == '8')
array[7]++;
else if (currentChar == '9')
array[8]++;
else if (currentChar == '0')
array[9]++;
}
}
for(int i = 0; i <= 9; i++) {
if (array[i] > max)
max = array[i];
}
currentValue = max;
for(int i = max; i > 0; i--) {
for(int j = 0; j < 10; j++) {
if(array[j] < i)
System.out.print(" ");
else
System.out.print("*");
}
System.out.println();
}
System.out.println("12345678910");
}
}
但是,由于charAt()
方法根据他创建的单个char
打印星号,因此会在数字“1”列中添加“10”的问号。
我实际上通过修改代码尝试了nextInt()
方法,但是当我运行它时,没有显示星号......
我该如何解决这个问题?
感谢任何反馈!
提前谢谢!
答案 0 :(得分:1)
使用正则表达式从行中提取成绩。在该部分上使用Integer.parseInt
来获取数字而不是尝试自己实现解析:
Pattern pattern = Pattern.compile("^.+ (\\d+)$");
while (fileScan.hasNext()) {
line = fileScan.nextLine();
Matcher m = pattern.matcher(line);
if (m.find()) {
array[Integer.parseInt(m.group(1))-1]++;
}
}