找到一个最接近java平均值的int值?
问题描述:
- 这样做的目的是找到最近没有。出输入编号S的编号S
- 出于某种原因的总和的平均它未输出正确的答案附近的决赛圈。
-
下这里的代码是罚款找到一个最接近java平均值的int值?
import java.util.Scanner; import java.util.*; public class ClosesttoAvg{ public static void main(String args[]){ Scanner sc = new Scanner(System.in); System.out.println("input no. elements and then the elements to find closest to avg"); double size = sc.nextInt(), load = 0; double array[] = new double[(int)size]; //sort all the no.s into an array and add them all up into load for(int i = 0; i<size; i++){ array[i] = sc.nextDouble(); load = load + array[i]; } System.out.println(load); double avg = load/size, record = size, answer = 0; //record keeps the smallest distance, answer stores the closest no., //problem is located here
-
这里是我有问题,但是,由于某种原因,它不保存正确的变量
for(int i = 0; i<size; i++){ double dist = Math.abs(array[i]-avg); if(dist < record){ answer = array[i]; } } System.out.println(answer); } }
答
我认为你也应更新record
。现在它总是size
,这就是为什么你answer
可以被覆盖。
在循环if
添加record = dist;
+0
谢谢我没有看到的错误。 –
+0
我认为你应该初始化'一些价值,在它第一次迭代变化首先'dist' record'。要做到这一点,你可以用'布尔flag'或设置'record'到'-1'和循环加上'if'。当然,还有更多不同的方法可以做到。 – Nequeq
答
您检查当前的元素是从平均比以前更近,但如果它是有效地走近了,你不救的距离为最小的一个,使用它接下来,您需要:
for(int i = 0; i<size; i++){
double dist = Math.abs(array[i]-avg);
if(dist < record){
answer = array[i];
record = dist; //<---
}
}
答
等等,您的答案必须最小化! 所以保持答案变量最大。
answer=Double.MAX_VALUE
for(int i = 0; i<size; i++){
double dist = Math.abs(array[i]-avg);
if(dist < record){
answer = array[i];
record=answer;
}
}
System.out.println(answer);
}
}
这是正确的代码? ^^因为'load'不会单独编译,你错过了一些字符,并解释说,这不是给人很好的答案,提供样品的输入和给出代码 – azro
的输出下面是一些[免费调试咨询】(HTTPS: //ericlippert.com/2014/03/05/how-to-debug-small-programs/) –
只是editted它在那里,忘了缩进代码的一部分 –