0

所以我必须制作一个 Java 程序,让用户在其中说出他们想输入多少个值,在一个数组中输入那么多值,然后打印该数组。然后我必须反转数组中的元素(而不是反转打印或创建一个新数组),并再次打印这些值。这是我拥有的以下代码:

package reversearray;

import java.util.*;

public class Swap_main {

    /**
     * Taylor Marino
     */
    public static void main(String[] args) {
        int arraysize = 0, junk, junk2;
        Scanner reader = new Scanner(System.in);
        System.out.println("How many values are you going to enter?");
        arraysize = reader.nextInt();
        int[] array = new int[arraysize];
        System.out.println("You will now be asked to enter your values, one at a time");
        for(int counter = 0; counter < arraysize; counter++){
            System.out.println("Enter next value");
            array[counter] = reader.nextInt();
        }
        System.out.println("The values you entered are: ");
        for(int counter2 = 0; counter2 < arraysize; counter2++)
            System.out.print(array[counter2] + ", ");
        for(int counter3 = 0, counter4 = arraysize; counter3 != counter4; counter3++, counter4--){
            junk = array[counter3];
            junk2 = array[counter4];
            array[counter4] = junk;
            array[counter3] = junk2;
        }
        System.out.println("The values you entered are (in reverse order): ");
        for(int counter5 = 0; counter5 < arraysize; counter5++)
            System.out.print(array[counter5] + ", ");
    }

}

但是我在这个循环中收到一个错误:

        for(int counter3 = 0, counter4 = arraysize; counter3 != counter4; counter3++, counter4--){
            junk = array[counter3];
            junk2 = array[counter4];
            array[counter4] = junk;
            array[counter3] = junk2;
        }

我不明白这里出了什么问题,但它说array[counter4] = junk; 我做错了什么有错误?

4

4 回答 4

3

这会给你一个 ArrayOutOfBoundsException 因为数组的索引是从 0 到 length-1。从 counter4 = arraysize-1 开始。

编辑:另外,你应该改变

counter3 != counter4

counter3 < counter4

因为在奇数长度的数组上,第一个条件永远不会给你真实的。

于 2013-02-01T18:23:07.610 回答
0

尝试

for(int counter3 = 0, counter4 = arraysize -1 ; counter3 < counter4 ; counter3++, counter4--){

有用。异常消失了。

于 2013-02-01T18:29:37.587 回答
0

改变

for(int counter3 = 0, counter4 = arraysize

for(int counter3 = 0, counter4 = arraysize-1

于 2013-02-01T18:23:33.517 回答
0

可以稍微简洁一些,并且只使用一个循环变量

int maxIndex = array.length-1; // Zero based
int midIndex = (maxIndex/2);   // only swap half, otherwise will swap back to original
for(int counter3 = 0; counter3 <= midIndex; counter3++){
    junk = array[counter3];
    array[counter3] = array[maxIndex-counter3];
    array[maxIndex-counter3] = junk;
}
于 2013-02-01T18:49:58.683 回答