我正在编写一个编码项目,我必须让用户输入五个特定的浮点值。然后根据这些值,我必须获得总数,最大值,最小值,然后应用兴趣。我现在被困在从阵列中获取最小值。我已经能够获得最大值但是当我打印最小值时,我得到0.0。有什么想法吗?
import java.util.Scanner;
public class float_assignment {
public static void main(String[] args) {
float[] userNum = new float[5];
float total = 0;
float average = 0;
float maximum = userNum[0];
float minimum = userNum[0];
float interest = 0;
int i = 0;
Scanner scnr= new Scanner(System.in);
for (i = 0; i <= 4; ++i) {
System.out.println("Please enter a number with a single decimal value:");
userNum[i] = scnr.nextFloat();
}
for (i = 0; i < userNum.length; ++i) {
if (userNum[i] > maximum) {
maximum = userNum[i];
}
}
for (i = 0; i < userNum.length; ++i) {
if(userNum[i] < minimum) {
minimum = userNum[i];
}
}
total = userNum[0] + userNum[1] + userNum[2] + userNum [3] + userNum [4];
System.out.println("");
System.out.println("Total value is: " + total);
System.out.println("");
System.out.println("Maximum Vaule is: " + maximum);
System.out.println("");
System.out.println("Minimum Vaule is: " + minimum);
}
}
答案 0 :(得分:2)
问题出在这个
float[] userNum = new float[5];
.. //some other declarations
float minimum = userNum[0];
当你创建一个float类型的数组时,所有的元素都被初始化为0.0(显然你只输入大于0的正数)
请参阅:java: primitive arrays — are they initialized?
要解决此问题,请在从控制台输入数字后初始化minimum
(也可能是maximum
。
for(i = 0; i<=4; ++i) {
System.out.println("Please enter a number with a single decimal value:");
userNum[i]= scnr.nextFloat();
}
minimum = maximum = userNum[0];
//Proceed to find max and min
请注意,您不需要两个循环来查找最小值和最大值,并且可以将它们合并为一个。
for(i = 0; i < userNum.length; ++i ) {
if(userNum[i]> maximum) {
maximum = userNum[i];
}
if(userNum[i] < minimum) {
minimum = userNum[i];
}
}
答案 1 :(得分:2)
问题在于最小值的初始值。它目前设为0。
if(userNum[i] < minimum)
因此永远不会成立(假设为正值)。因此,您需要在开始循环之前将最小值设置为最大值。或者将其设置为float允许的最大值。
答案 2 :(得分:1)
Java 8版本:
OptionalDouble min = IntStream.range(0, userNum.length).mapToDouble(i -> userNum[i]).min();
float minimum= (float) min.getAsDouble();
答案 3 :(得分:0)
这是因为在您的初始化中 - float userNum [] = new float [5];
默认情况下,数组userNum使用全零进行初始化,它看起来像
userNum = [0.0,0.0,0.0,0.0,0.0]
因此最大值和最小值也用0.0
初始化您可能会在输入中输入所有正值,这就是为什么您的最大值显示正确但最小值仍为0.0
为了避免在从用户获取for循环中的数组的第一个值之后初始化最大值和最小值。
在数组assignmet的for循环中添加此if语句
if(i==0)
{
maximum=minimum=userNum[0];
}
答案 4 :(得分:0)
请注意,按照惯例,建议以大写字母开始您的班级名称。 :) 在这里,您应用的逻辑是错误的。要使其正常工作,您需要在现有循环中添加另一个for循环。那么变量&#39;最小值&#39;必须在外部for循环的每次迭代期间更新,最后,将if条件放在inner for循环中。检查下面给出的更新代码:
for(i = 0; i< userNum.length; ++i) {
minimum = userNum[0]; //updating value at each iteration.
for(i = 0; i < userNum.length; ++i) { //newly added loop.
if(userNum[i] < minimum) {
minimum = userNum[i];
}
}
}