一个java程序,它从1到9输入并从左到右打印所有奇数,然后从右到左打印

时间:2018-02-03 12:08:39

标签: java arrays

  

我只想要一个循环来归档此输出

输入= {1,2,3,4,5,6,7,8,9}输出= {1,3,5,7,9,8,6,4,2}

    public static void printOddEven(int[] arr) {
    int newArray[] = new int[10];

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 != 0) {
            newArray[i] = arr[i];
            System.out.print(newArray[i] + " ");
        }
    }
    for (int i = arr.length - 1; i > 0; i--) {
        if (arr[i] % 2 == 0) {
            newArray[i] = arr[i];
            System.out.print(newArray[i] + " ");
        }

    }
}

5 个答案:

答案 0 :(得分:1)

如果你想使用数组:

int [] result = new int[arr.length];
int counterFront = 0;
int counterBack = arr.length - 1;
for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 != 0) {
            result[counterFront++] = arr[i];
        }

        if (arr[i] % 2 == 0) {
            result[counterBack--] = arr[i];
        }
 }
return result;
编辑:感谢评论,发现它有一个ArrayIndexOutOfBounds。

答案 1 :(得分:1)

int newArray[] = new int[9];
for (int i = 0; i < arr.length; i++) {
    if (arr[i] % 2 != 0) 
        newArray[i/2] = arr[i];
    else 
        newArray[8-(i/2)] =  arr[i];
 }

 System.out.println (java.util.Arrays.toString (newArray));

只需使用右侧的后代索引即可 你为什么一直使用Arrays?是作业吗?请注意,由于newArray太大,因为对于9个元素使用int [10],这是一个典型的Arrays问题。

答案 2 :(得分:1)

我认为这更像是数学问题,而不是编程问题。它是关于知道递增索引和递减索引之间存在简单的算术关系。

int[] arr = {1,2,3,4,5,6,7,8,9};

public static void printOddEven(int[] arr) {
    int[] odds = new int[5];  // arr.length == 9
    int[] even = new int[4];

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 == 0) {
            // This is where the magic happens
            // It is filling the array from the back
            even[even.length - (i / 2) - 1] = arr[i];
        } else {
            odds[(i / 2)] = arr[i];
        }
    }

    System.out.println(java.util.Arrays.toString(odds));
    System.out.println(java.util.Arrays.toString(even));
}

修改

仅针对@CoderinoJavarino,这是一个输出为单个数组的版本。核心逻辑和数学是相同的,所以选择更容易理解。

作为算法解决方案的一部分,使用Arrays.toString() 而不是。它只是为了让你可以看到输出。我同样可以将输出发送到文件或Web套接字。

输出不是打印,输出是数组或数组。它同样可以是List,或者仅用于排序奇数/偶数的特殊类。谁在乎?

在工业编程(即非学术性)中,这就是代码被分割的方式:易于理解,而不是聪明。在商业世界中,没有“欺骗”的概念:没有人担心JSP的内部,将数组渲染到浏览器。

int[] arr = {1,2,3,4,5,6,7,8,9};

public static int[] SORTOddEven(int[] arr) {
    int[] output = new int[arr.length];  // arr.length == 9

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 == 0) {
            // This is where the magic happens
            // It is filling the array from the back
            output[output.length - (i / 2) - 1] = arr[i];
        } else {
            output[(i / 2)] = arr[i];
        }
    }
    return output;
}

System.out.println(java.util.Arrays.toString(SORTOddEven(arr)));

答案 3 :(得分:0)

public static void printOddEven(int[] arr) {
    int newArray[] = new int[9];

    for (int i = 0; i < arr.length; i++) {
        if (arr[i] % 2 != 0)
            newArray[i/2] = arr[i];
        else
            newArray[arr.length - i/2 - 1] = arr[i];                
    }

    System.out.println(java.util.Arrays.toString(newArray));    
}

Live on Ideone.

答案 4 :(得分:0)

这仅适用于123456789打印135798642

public class Sample {

public static void main(String[] args) throws Exception {
     int j=0;
     int p=2;
    int newArray[]= {1,2,3,4,5,6,7,8,9};
    for(int i=0;i<=newArray.length-1;i++)
    {
        if(i<=4)
        {
            System.out.print(newArray[i]+j);
            j++;

        }
        else
        {
            System.err.print(newArray[i]+p);
            p=p-3;
    }
}

}
}