[英]how to define a array's length when we do not know the actural size in Java
问题:来自标准输入的未知数量的测验分数,并打印出测验分数的总数、平均值和带 2 个小数位的总体标准差。
我的代码是:
导入 java.util.Scanner;
公共 class Ex4_2 {
public static void main(String args[]) {
int n = 0;
Scanner input = new Scanner(System.in);
double sum = 0;
int[] scores = new int [n];
for(int i = 0; i<scores.length; i++)
{
scores[i] =input.nextInt();
sum = sum + scores[i];
}
int num = scores.length;
System.out.printf("Total number of quiz scores = %1.2f \n ", num);
System.out.printf("Average = %1.2f \n", sum/num);
double total = 0;
for(int i=0;i<scores.length;i++)
{
total += (scores[i]-(sum/num))*(scores[i]-(sum/num));
}
double SD = Math.sqrt(total/num);
System.out.printf("Standard deviation = %1.2f \n ",SD);
}
}
但是当我输入10 20 30时,却无法计算出正确的output,出现错误。 我无法理解这个错误的含义,也不知道什么是错误。 请帮助我...非常感谢!
以下是 output 和错误。
Total number of quiz scores = Exception in thread "main" java.util.IllegalFormatConversionException: f.= java.lang.Integer at java.base/java.util.Formatter$FormatSpecifier.failConversion(Formatter:java.4426) at java. base/java.util.Formatter$FormatSpecifier.printFloat(Formatter:java.2951) at java.base/java.util.Formatter$FormatSpecifier.print(Formatter:java.2898) at java.base/java.util.Formatter. format(Formatter:java.2673) at java.base/java.io.PrintStream.format(PrintStream:java.1053) at java.base/java.io.PrintStre am.printf(PrintStream:java.949) 在 Ex4_2.main(Ex4_2:java:16)
如果您不知道它将容纳多少项目,则无法计算数组的大小。 所以你需要:
Arrays
class 中的Arrays.copyOf方法复制具有新长度的内容。或更好
您可以使用ArrayList为您完成以上所有(以及更多)工作。
我假设您真正的问题是“我该如何解决我的错误?”。
正如错误消息告诉您的那样,问题出在这一行(第 16 行)。
System.out.printf("Total number of quiz scores = %1.2f \n ", num);
您的错误与数组大小无关。
您正在为浮点值%f
使用格式说明符,其值为 integer 值num
。 将%d
用于 integer。 就这样。
这是你如何做到的。 https://replit.com/@TheCodingBros/Java#main.java首先输入测验候选的编号,然后给每个候选标记。 然后它将显示总和,平均值和标准差。
以上所有答案都是正确的。 请阅读并理解。 此外,
int n = 0;
int[] scores = new int [n];
你的循环总是会失败,因为你用 0 实例化你的分数数组。
如果你想要一个固定的大小,那么例如。 int[] scores = new int [10];
或者根据其他答案,使用 arraylist 进行动态调整。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.