找到一个最接近java平均值的int值?

问题描述:

  1. 这样做的目的是找到最近没有。出输入编号S的编号S
  2. 出于某种原因的总和的平均它未输出正确的答案附近的决赛圈。
  3. 下这里的代码是罚款找到一个最接近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 
    
  4. 这里是我有问题,但是,由于某种原因,它不保存正确的变量

    for(int i = 0; i<size; i++){ 
        double dist = Math.abs(array[i]-avg); 
        if(dist < record){ 
        answer = array[i];  
        } 
        } 
    
    System.out.println(answer); 
        } 
        } 
    
+0

这是正确的代码? ^^因为'load'不会单独编译,你错过了一些字符,并解释说,这不是给人很好的答案,提供样品的输入和给出代码 – azro

+0

的输出下面是一些[免费调试咨询】(HTTPS: //ericlippert.com/2014/03/05/how-to-debug-small-programs/) –

+0

只是editted它在那里,忘了缩进代码的一部分 –

我认为你也应更新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); 
    } 
    }