快速提问,我发现答案接近于此,但没有任何帮助我。我希望它在小数点后面有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()];
答案 0 :(得分:7)
您无法创建 length 是浮点值的浮点数组。也就是说,你不能拥有2.7个元素的数组。
因此,length参数中的float会变圆,导致精度损失。
您希望第8行有keyboard.nextInt()
,第13行有keyboard.nextFloat()
。
答案 1 :(得分:2)
您无法使用浮点值初始化数组。
float[] a = new float[4]
而不是
float[] a = new float[4.0]
所以,问题在于:
float[] numbers = new float[keyboard.nextFloat()];
改为使用keyboard.nextInt()。
答案 2 :(得分:1)
您正在使用keyboard.nextFloat()
(浮点数)作为数组numbers
的长度。数组的长度必须是int。
答案 3 :(得分:1)
这是因为在第8行你正在创建一个新数组,并传递一个浮点作为长度。由于所有数组都需要一个整数作为数组长度,因此它会将float转换为整数,并给出错误。您想传入一个整数值。