[英]Possible loss of precision error Java
快速提問,我找到了接近此問題的答案,但沒有任何幫助。 我希望它在代碼的末尾打印出一個百分比,該百分比在小數點后有4個數字,並且當然要使用int作業。 但是使用浮點數給我一個錯誤。
這段代碼:
import java.util.Scanner;
public class HW2johnson_pp4 {
public static void main(String args[]) {
Scanner keyboard = new Scanner(System.in);
System.out.printf("How many numbers will you enter?\n");
float[] numbers = new float[keyboard.nextFloat()];
System.out.printf("Enter " + numbers.length + " integers, one per line:\n");
for (int i = 0; i <= numbers.length - 1; i++) {
numbers[i] = keyboard.nextInt();
}
float sum = 0;
for (int i = 0; i <= numbers.length - 1; i++) {
sum += numbers[i];
}
System.out.printf("The sum is " + sum + "\n");
System.out.printf("The numbers are:\n");
for (int i = 0; i <= numbers.length - 1; i++) {
float perc = (numbers[i] / sum);
float perct = (perc * 100);
System.out.printf(numbers[i] + " which is " + perct + "%% of the sum.\n");
}
}
}
給出錯誤:
HW2johnson_pp4.java:8: possible loss of precision
found : float
required: int
float[] numbers = new float[keyboard.nextFloat()];
您不能創建長度為浮點值的浮點數組。 也就是說,您不能擁有包含2.7個元素的數組。
因此,length參數中的float會被舍入,從而導致精度損失。
您希望在第8行上找到keyboard.nextFloat()
,並在第13行上下面想要keyboard.nextInt()
。
您不能使用浮點值初始化數組。
float[] a = new float[4]
並不是
float[] a = new float[4.0]
因此,問題出在這里:
float[] numbers = new float[keyboard.nextFloat()];
請改用keyboard.nextInt()。
您正在使用keyboard.nextFloat()
(它是一個浮點數)作為數組numbers
的長度。 數組的長度必須為int。
那是因為在第8行中,您正在制作一個新數組,並傳遞一個float作為長度。 由於所有數組都需要整數作為數組長度,因此它將浮點數轉換為整數,並產生錯誤。 您想傳遞一個整數值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.