我只想要一个循环来归档此输出
输入= {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] + " ");
}
}
}
答案 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));
}
答案 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;
}
}
}
}