在此程序中,您将找到一个菜单,其中包含在阵列上执行不同功能的选项。该数组取自名为" data.txt"的文件。该文件包含整数,每行一个。我想创建一个方法将这些整数存储到一个数组中,这样我就可以在需要完成计算时调用该方法。显然,我没有包含整个代码(它太长了)。但是,我希望有人可以帮我解决计算平均值的第一个问题。现在,控制台打印平均值为0,因为除了文件中的1,2,3之外,数组的其余部分都填充了0' s。我想要的平均值是2.欢迎任何建议。我的计划的一部分如下。感谢。
public static void main(String[] args) throws FileNotFoundException {
Scanner sc = new Scanner(System.in);
System.out.println("Welcome to Calculation Program!\n");
startMenus(sc);
}
private static void startMenus(Scanner sc) throws FileNotFoundException {
while (true) {
System.out.println("(Enter option # and press ENTER)\n");
System.out.println("1. Display the average of the list");
System.out.println("2. Display the number of occurences of a given element in the list");
System.out.println("3. Display the prime numbers in a list");
System.out.println("4. Display the information above in table form");
System.out.println("5. Save the information onto a file in table form");
System.out.println("6. Exit");
int option = sc.nextInt();
sc.nextLine();
switch (option) {
case 1:
System.out.println("You've chosen to compute the average.");
infoMenu1(sc);
break;
case 2:
infoMenu2(sc, sc);
break;
case 3:
infoMenu3(sc);
break;
case 4:
infoMenu4(sc);
break;
case 5:
infoMenu5(sc);
break;
case 6:
System.exit(0);
default:
System.out.println("Unrecognized Option!\n");
}
}
}
private static void infoMenu1(Scanner sc) throws FileNotFoundException {
File file = new File("data.txt");
sc = new Scanner(file);
int[] numbers = new int[100];
int i = 0;
while (sc.hasNextInt()) {
numbers[i] = sc.nextInt();
++i;
}
System.out.println("The average of the numbers in the file is: " + avg(numbers));
}
public static int avg(int[] numbers) {
int sum = 0;
for (int i = 0; i < numbers.length; i++) {
sum = (sum + numbers[i]);
}
return (sum / numbers.length);
}
答案 0 :(得分:1)
只需修改您的方法如下:
public static int avg(int[] numbers, int len)
其中len
是存储的实际数字
在你的情况下,你打电话:
System.out.println("The average of the numbers in the file is: " + avg(numbers, i));
在你的平均代码中:
for (int i = 0; i < len; i++) {
sum = (sum + numbers[i]);
}
即。将numbers.length
替换为传入<{p>}的len
做return (sum / len);
答案 1 :(得分:1)
您可以使用动态大小的List
:
import java.util.List;
import java.util.LinkedList;
// . . .
private static void infoMenu1(Scanner sc) throws FileNotFoundException {
File file = new File("data.txt");
sc = new Scanner(file);
List<Integer> numbers = new LinkedList<Integer>();
while (sc.hasNextInt()) {
numbers.add(sc.nextInt());
}
System.out.println("The average of the numbers in the file is: " + avg(numbers));
}
public static int avg(List<Integer> numbers) {
int sum = 0;
for (Integer i : numbers) {
sum += i;
}
return (sum / numbers.size());
}
这增加了允许您读取100多个数字的好处。由于LinkedList
允许您在恒定时间内执行任意数量的add
操作,因此在阅读之前您无需知道有多少个数字(甚至是计数的上限)输入。
正如kkonrad所提到的,您可能会或可能不会想要使用浮点值作为平均值。现在你正在进行整数运算,可以说1
和2
的平均值是1
。如果您想要1.5
,则应考虑使用double
来计算平均值:
public static double avg(List<Integer> numbers) {
double sum = 0;
for (Integer i : numbers) {
sum += i;
}
return (sum / numbers.size());
}
答案 2 :(得分:0)
我认为 sum 应该是 double 而 double 应该是 avg 函数的返回类型< / p>
答案 3 :(得分:0)
请以这种方式更改平均功能
private static void infoMenu1(Scanner sc) throws FileNotFoundException {
.
.
.
System.out.println("The average of the numbers in the file is: " + avg(numbers,i));
}
public static int avg(int[] numbers,int length) {
int sum = 0;
for (int i = 0; i < length; i++) {
sum = (sum + numbers[i]);
}
return (sum / length);
}
虽然调用平均函数传递i (您在infoMenu1中计算data.txt中的条目数),并使用该循环并除以总和。有了这个,你的循环将不会运行100次迭代,并且行代码也会减少。