Java:最小/最大/平均(4个变量)

时间:2015-09-03 17:38:26

标签: java

任何人都知道如何仅使用4个变量运行此程序?我尝试使用1变量为min和max“lowhigh”,但我很难确定将语句放在何处。

    int numbers[] = new int[5];
    int low = 0; int high = 0; 

    for(int count = 0; count < numbers.length; count++){            

     System.out.print("Please enter a number: ");
        int number=s.nextInt();

        if (count == 0) {
            low = number;
            high=number;
        } else {
            if(number < high) {
                high= number;        
            }
            if(number > low){
                low = number;

            }

        }

        numbers[count] = number;
    }
    double ave = numbers[0]+numbers[1]+numbers[2]+numbers[3]+numbers[4]/5;
    System.out.println("Highest: " +high);
    System.out.println("Lowest: " +low);
    System.out.println("The average of all number is: " +ave); }}

5 个答案:

答案 0 :(得分:3)

在Java 8中使用它的另一种方法。

int numbers[] = new int[5];

        for(int count = 0; count < numbers.length; count++){

            System.out.print("Please enter a number: ");
            int number=s.nextInt();
            numbers[count] = number;
        }

        LongSummaryStatistics statistics = Arrays.stream(numbers).asLongStream().summaryStatistics();
        System.out.println("Highest: " + statistics.getMax());
        System.out.println("Lowest: " + statistics.getMin());
        System.out.println("The average of all number is: " + statistics.getAverage());

答案 1 :(得分:1)

看起来你的逻辑是向后寻找高低。你的平均值也不会起作用,因为操作顺序。需要parens

int numbers[] = new int[5];
int low = Integer.MAX_VALUE; int high = Integer.MIN_VALUE; 

for(int count = 0; count < numbers.length; count++){            

 System.out.print("Please enter a number: ");
    int number=s.nextInt();

    if (count == 0) {
        low = number;
        high=number;
    } else {
        if(number > high) {
            high= number;        
        }
        if(number < low){
            low = number;

        }

    }

    numbers[count] = number;
}
double ave = (numbers[0]+numbers[1]+numbers[2]+numbers[3]+numbers[4])/5;
System.out.println("Highest: " +high);
System.out.println("Lowest: " +low);
System.out.println("The average of all number is: " +ave); }}

答案 2 :(得分:0)

数字[]数组没有意义;所以消除它。

你需要一个循环的控制变量,输入的临时存储,然后是min,max和 sum 的三个运行变量(平均值是由count计算的总和,似乎是固定的5)。

这是5个变量,你完全需要它们。它可以将多个值填充到一个变量中,但我非常怀疑这是你应该做的。

根据要求的实际情况(我认为这是作业),上面提到的五个中的一个并不算作每个要求的变量(很可能是循环控制或临时输入存储)。 / p>

编辑:这里有一个变体,使用在一个变量中编码的多个值,可以使用三个变量(如果算上扫描仪则为四个,为了我的方便,我将其替换为随机):< / p>

public class HighLowAverage {

    public static void main(String[] args) {
        long sum = 0;
        long highLow = 0x8000_0000_7FFF_FFFFL;
        long countNumber = 0;
        for (; (countNumber >> 32) < 5; countNumber += 0x1_0000_0000L) {
            countNumber = (countNumber & 0xFFFF_FFFF_0000_0000L) 
                    | ((int) (Math.random() * 100) & 0xFFFF_FFFFL);
            System.out.println(((countNumber >> 32) + 1) + ". number is: " + (int) countNumber);
            sum += (int) countNumber;
            if ((highLow >> 32) < (int) countNumber)
                highLow = (highLow & 0xFFFF_FFFFL) | (countNumber << 32);
            if (((int) highLow) > (int) countNumber)
                highLow = (highLow & 0xFFFF_FFFF_0000_0000L) | (countNumber & 0xFFFF_FFFFL);
        }
        System.out.println("Average: " + ((double) sum) / (countNumber >> 32));
        System.out.println("Min: " + (int) highLow);
        System.out.println("Max: " + (highLow >> 32));
    }

}

使用的技术是位移和屏蔽,以使用long数据类型的上半部分/下半部分作为可独立访问的值。注意必要的复杂表达式的数量以及表达式中的众多constansts以及几乎无处不在的类型转换。

这是你应该永远不会使用的代码 - 它可以工作,但即使是有经验的程序员也需要过多的思考才能弄清楚它是否正常工作。我的猜测是,一个典型的初级班主任根本无法理解它。

Edit2:抓住上面的内容,可以使用一个变量来完成。怎么样?用数组替换多个变量:

    public static void main(String[] args) {
        long[] vars = new long[5];
        vars[1] = Long.MIN_VALUE;
        vars[2] = Long.MAX_VALUE;
        for (vars[0] = 0; vars[0] < 5; ++vars[0]) {
            vars[4] = (int) (Math.random() * 100);
            System.out.println((vars[0] + 1) + ". number is: " + vars[4]);
            vars[3] += vars[4];
            if (vars[4] > vars[1])
                vars[1] = vars[4];
            if (vars[4] < vars[2])
                vars[2] = vars[4];
        }
        System.out.println("Average: " + ((double) vars[3]) / vars[0]);
        System.out.println("Min: " + vars[1]);
        System.out.println("Max: " + vars[2]);
    }

毋庸置疑,这仍然令人困惑。 vars数组的每个索引用于保存其中一个变量(0 =循环控制,1 = min,2 = max,3 = sum,4 = number)。

您会发现这一切都取决于被视为变量的内容

答案 3 :(得分:0)

如果您所做的只是找到最小值,最大值和平均值,则不必使用数组。

final int COUNT = 5; //this is just to be neat, and not needed as a variable.
int low = Integer.MAX_VALUE;
int high = Integer.MIN_VALUE;
int sum = 0;    

for(int i = 0; i < COUNT; i++){
    int n = s.nextInt();//or whatever

    if(n > high)
        high = n;
    if(n < low)
        low = n;

    sum += n;
}

System.out.println("Max: " + high);
System.out.println("Min: " + low);
System.out.println("Average: " + ((double) sum) / COUNT);

根据您对4个变量的含义,这可能有效,也可能无效。 final int COUNT并非真正需要,而是可以直接输入。

答案 4 :(得分:0)

这个答案很可能超出了问题的范围,但由于要求/限制没有完整列出,它可能仍然是一个有效的答案。

对&#34; 4变量&#34;进行超级严格的解释,即使Scanner变量s也是如此。

使用流,可以使用3个变量完成:

Scanner s;           // variable 1
List<Double> values; // variable 2
String line;         // variable 3

s = new Scanner(System.in);
values = new ArrayList<>();
while (true) {
    System.out.print("Please enter a numbers, or press enter when done: ");
    if ((line = s.nextLine().trim()).isEmpty())
        break;
    values.add(Double.valueOf(line));
}
if (values.isEmpty())
    return;
System.out.println("Minimum: " + Stream.of(values.toArray(new Double[values.size()]))
                                       .mapToDouble(Double::valueOf)
                                       .min().getAsDouble());
System.out.println("Maximum: " + Stream.of(values.toArray(new Double[values.size()]))
                                       .mapToDouble(Double::valueOf)
                                       .max().getAsDouble());
System.out.println("Average: " + Stream.of(values.toArray(new Double[values.size()]))
                                       .mapToDouble(Double::valueOf)
                                       .sum() / values.size());

示例输出

Please enter a numbers, or press enter when done: 10
Please enter a numbers, or press enter when done: 42
Please enter a numbers, or press enter when done: 19
Please enter a numbers, or press enter when done: 88
Please enter a numbers, or press enter when done: 1
Please enter a numbers, or press enter when done: 3774
Please enter a numbers, or press enter when done: 
Minimum: 1.0
Maximum: 3774.0
Average: 655.6666666666666