当我尝试在java中运行该程序时,即使没有错误也无法工作

时间:2015-01-27 02:39:53

标签: java

当我尝试在java中运行这个程序时,即使eclipse中没有错误也无法工作。

import java.util.Scanner;

public class Project1 {

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.print("Enter how many numbers: ");
        int x = input.nextInt();

        double[] numbers = new double[x];
        double[] orderednumbers = new double[x];

        double total = 0;

        for (int i = 0; i < numbers.length; i++) {
            System.out.print("Please enter number " + (i + 1) + ": ");
            numbers[i] = input.nextDouble();
            total += numbers[i];
        }
        double mean = (total / x);
        System.out.println("Mean: " + mean);
        orderednumbers[x] = 0;
        for (int counter = 0; counter < numbers.length; counter++) {

            if (numbers[counter] > orderednumbers[x]) {
                orderednumbers[x] = numbers[counter];
                orderednumbers[x] = orderednumbers[x];
            }

        }
        System.out.println("Maximum: " + orderednumbers[x]);
    }

}

2 个答案:

答案 0 :(得分:1)

这就是所谓的运行时错误。当然,它编译...但是对于这段代码,你需要小心处理数组。你的代码给了我一个ArrayOutOfBoundsException。

答案 1 :(得分:0)

请注意,您在代码的早期将x设置为数组的长度,然后将orderednumbers[x]设置为0.这将为您提供ArrayIndexOutOfBoundsException,因为Java数组索引为零 - 基于(即元素#1具有索引0,并且可以使用orderednumbers[0]访问),数组的长度不是有效索引。

此外,您在排序中交换两个数字的代码不正确;你需要一个临时变量来存储结果。否则,您最终会使数组中的两个位置保持相同的值。

尝试这样做:

int temp = orderednumbers[x];
orderednumbers[x] = numbers[counter];
orderednumbers[x] = temp;

请注意if块结尾处的语句:

orderednumbers[x] = orderednumbers[x];

不会做任何事情。