繁体   English   中英

当我们不知道 Java 中的实际大小时如何定义数组的长度

[英]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)

如果您不知道它将容纳多少项目,则无法计算数组的大小。 所以你需要:

  • 将其初始化为任意长度,例如 10 并将计数设置为 0。
  • 每次添加一个值时,递增计数并将其与数组的大小进行比较。
  • 如果数组已满,则使用Arrays class 中的Arrays.copyOf方法复制具有新长度的内容。
  • 输入完值后,您可以单独保留数组,也可以使用上述方法将其修剪为项目数。

或更好

您可以使用ArrayList为您完成以上所有(以及更多)工作。

我假设您真正的问题是“我该如何解决我的错误?”。

正如错误消息告诉您的那样,问题出在这一行(第 16 行)。

  System.out.printf("Total number of quiz scores = %1.2f \n ", num);

您的错误与数组大小无关。

您正在为浮点值%f使用格式说明符,其值为 integer 值num %d用于 integer。 就这样。

在这种情况下,您必须尝试使用 List。 数组列表必须适用于您的情况。

请参考:

https://www.javatpoint.com/java-list

这是你如何做到的。 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM