簡體   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