我正在尝试编写一个程序,该程序从文本文件中读取值并检查在特定值范围内有多少个值。关键是最终使程序将每个范围的值总数打印到控制台。我有一次它可以执行此1值的地方,但随后它将随着每个新的int重置。在目前的情况下,它会反复重复第一个数字。重申一下,我试图让它在对文本文件中的值进行排序(即值在数字范围内的次数)后进行报告。
这是我的代码。
package lab2;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class Lab2 {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("lab2_input.txt");
Scanner scan = new Scanner(file);
int counter1 = 0;
int counter2 = 0;
int counter3 = 0;
int counter4 = 0;
int counter5 = 0;
int counter6 = 0;
int counter7 = 0;
int counter8 = 0;
while(scan.hasNextLine()) {
int number = scan.nextInt();
System.out.println(number);
if (number <= 24){
counter1++;
}
if (25 <= number && number <= 49){
counter2++;
}
if (50 <= number && number <= 74){
counter3++;
}
if (75 <= number && number <= 99){
counter4++;
}
if (100 <= number && number <= 124){
counter5++;
}
if (125 <= number && number <= 149){
counter6++;
}
if (150 <= number && number <= 174){
counter7++;
}
if (175<= number && number >= 200){
counter8++;
}
}
System.out.println(counter1);
System.out.println(counter2);
System.out.println(counter3);
System.out.println(counter4);
System.out.println(counter5);
System.out.println(counter6);
System.out.println(counter7);
System.out.println(counter8);
}
}
答案 0 :(得分:2)
我认为您的意思是检查例如25到49之间的范围,而不是:
if (25 <= number && number <= 49){
counter2++;
}
您应该写:
if (25 >= number && number <= 49){
counter2++;
}
其他检查也一样。
P.S .:我建议将counter
做成一个数组,并根据计算出的索引增加元素,因为范围始终为25:var index = number / 25
。
答案 1 :(得分:1)
看起来很多counter
都是手动保存的;您所需的时间间隔通常以25为间隔,因此我将使用数组。另外,使用try-with-Resources
避免泄漏文件句柄。并将Scanner.hasNextInt()
与Scanner.nextInt()
(而不是Scanner.hasNextLine()
)一起使用。最后,我将围绕计数及其范围添加更多描述性消息。喜欢,
File file = new File("lab2_input.txt");
int[] counters = new int[9];
try (Scanner scan = new Scanner(file)) {
while (scan.hasNextInt()) {
int v = scan.nextInt();
if (v >= 0 && v <= 200) {
counters[v / 25]++;
}
}
} catch (Exception e) {
e.printStackTrace();
}
for (int i = 0; i < counters.length; i++) {
System.out.printf("The range %d to %d had %d values%n", i * 25,
((i + 1) * 25) - 1, counters[i]);
}
答案 2 :(得分:0)
您可以使用else-if
块而不是多个if
块,并摆脱下限验证。如果您要处理大量数字,这也会使性能有所提高。
if (number <= 24){
counter1++;
} else if (number <= 49){
counter2++;
} else if (number <= 74){
counter3++;
} else if (number <= 99){
counter4++;
} else if (number <= 124){
counter5++;
} else if (number <= 149){
counter6++;
} else if (number <= 174){
counter7++;
} else if (number <= 200){
counter8++;
}