我需要一个程序来交替排序整数数组,但它给了我一个 StackOverflow 错误
I needed a program to sort an integer Array alternating, but it gives me a StackOverflow Error
我需要对一个整数数组进行交替排序,但不允许我使用任何包。我在这段代码上坐了很长时间,当它在纸上运行时,我大学使用的测试程序用 Whosebug 评论我的代码。
这是有问题的代码。我只是希望一些有经验的开发人员告诉我出了什么问题。我是 Java.
的新手
public class Functionality {
public static int[] alternateSorting(int[] a) {
int v[] = new int[a.length];
int z = a.length;
if (z == 0) {
System.out.println("Error, empty Array");
return a;
}else {
for ( int i = 0; i < a.length; i++) {
v[i] = a[i];
}
boolean swapped;
do {
swapped = false;
for (int i = 1; i < v.length; i++) {
if (v[i-1] > v[i]) {
int swap = v[i];
v[i] = v[i-1];
v[i-1] = swap;
swapped = true;
}
}
}while (swapped);
for (int f = 0; f < a.length - 1; f++) {
for (int c = f + 1; c < a.length; c++)
if (v[c] == v[f]) {
z = z - 1;
}
}
int b[] = new int[z];
int k = v[0];
int g = v[v.length - 1];
int l = v.length;
int m = 1;
for (int i = 0; i < v.length; i++) {
if ( (i*2)%4 == 0) {
if (v[i] == v[i+1]) {
b[i] = k;
k = v[i+m+1];
m--;
} else if (v[i] != v[i+1]) {
b[i] = k;
k = v[i+m];
m--;
}else{
b[i] = k;
}
}else {
if (v[l - 1] == v[l - 2]) {
b[i] = g;
g = v[l - 3];
l--;
} else if (v[l - 1] != v[l - 2]) {
b[i] = g;
g = v[l - 2];
l--;
} else {
b[i] = g;
}
}
}return b ;
}
}
数组a必须整理到位。 b 是返回的数组,v 是 "working" 数组。
感谢您的时间和关注。如果这对您造成困扰,我很抱歉。我是新手,所以批评是可以的!
你好,T.
public class Functionality {
public static void main(String args[]) {
int[] ind = {1, 10, 2, 6, 11, 5};
int res[] = alternateSorting(ind);
for(int i=0; i< res.length; i++) {
System.out.println(res[i]);
}
}
public static int[] alternateSorting(int[] a) {
int v[] = new int[a.length];
int z = a.length;
if (z == 0) {
System.out.println("Error, empty Array");
return a;
} else {
for ( int i = 0; i < a.length; i++) {
v[i] = a[i];
}
boolean swapped;
do {
swapped = false;
for (int i = 1; i < v.length; i++) {
if (v[i-1] > v[i]) {
int swap = v[i];
v[i] = v[i-1];
v[i-1] = swap;
swapped = true;
}
}
} while (swapped);
for (int f = 0; f < a.length; f++) {
for (int c = f + 1; c < a.length; c++)
if (v[c] == v[f]) {
z = z - 1;
}
}
int b[] = new int[z];
int k = v[0];
int g = v[v.length - 1];
int l = v.length;
int m = 1;
for (int i = 0; i < v.length; i++) {
if ( (i*2)%4 == 0) {
if (v[i] == v[i+1]) {
b[i] = k;
k = v[i+m+1];
m--;
} else if (v[i] != v[i+1]) {
b[i] = k;
k = v[i+m];
m--;
} else {
b[i] = k;
}
} else {
if (v[l - 1] == v[l - 2]) {
b[i] = g;
g = v[l - 3];
l--;
} else if (v[l - 1] != v[l - 2]) {
b[i] = g;
g = v[l - 2];
l--;
} else {
b[i] = g;
}
}
}
return b ;
}
}
}
对此进行改进以满足您的需求。这将输出:
1
11
2
10
5
6
我需要对一个整数数组进行交替排序,但不允许我使用任何包。我在这段代码上坐了很长时间,当它在纸上运行时,我大学使用的测试程序用 Whosebug 评论我的代码。
这是有问题的代码。我只是希望一些有经验的开发人员告诉我出了什么问题。我是 Java.
的新手public class Functionality {
public static int[] alternateSorting(int[] a) {
int v[] = new int[a.length];
int z = a.length;
if (z == 0) {
System.out.println("Error, empty Array");
return a;
}else {
for ( int i = 0; i < a.length; i++) {
v[i] = a[i];
}
boolean swapped;
do {
swapped = false;
for (int i = 1; i < v.length; i++) {
if (v[i-1] > v[i]) {
int swap = v[i];
v[i] = v[i-1];
v[i-1] = swap;
swapped = true;
}
}
}while (swapped);
for (int f = 0; f < a.length - 1; f++) {
for (int c = f + 1; c < a.length; c++)
if (v[c] == v[f]) {
z = z - 1;
}
}
int b[] = new int[z];
int k = v[0];
int g = v[v.length - 1];
int l = v.length;
int m = 1;
for (int i = 0; i < v.length; i++) {
if ( (i*2)%4 == 0) {
if (v[i] == v[i+1]) {
b[i] = k;
k = v[i+m+1];
m--;
} else if (v[i] != v[i+1]) {
b[i] = k;
k = v[i+m];
m--;
}else{
b[i] = k;
}
}else {
if (v[l - 1] == v[l - 2]) {
b[i] = g;
g = v[l - 3];
l--;
} else if (v[l - 1] != v[l - 2]) {
b[i] = g;
g = v[l - 2];
l--;
} else {
b[i] = g;
}
}
}return b ;
}
}
数组a必须整理到位。 b 是返回的数组,v 是 "working" 数组。
感谢您的时间和关注。如果这对您造成困扰,我很抱歉。我是新手,所以批评是可以的!
你好,T.
public class Functionality {
public static void main(String args[]) {
int[] ind = {1, 10, 2, 6, 11, 5};
int res[] = alternateSorting(ind);
for(int i=0; i< res.length; i++) {
System.out.println(res[i]);
}
}
public static int[] alternateSorting(int[] a) {
int v[] = new int[a.length];
int z = a.length;
if (z == 0) {
System.out.println("Error, empty Array");
return a;
} else {
for ( int i = 0; i < a.length; i++) {
v[i] = a[i];
}
boolean swapped;
do {
swapped = false;
for (int i = 1; i < v.length; i++) {
if (v[i-1] > v[i]) {
int swap = v[i];
v[i] = v[i-1];
v[i-1] = swap;
swapped = true;
}
}
} while (swapped);
for (int f = 0; f < a.length; f++) {
for (int c = f + 1; c < a.length; c++)
if (v[c] == v[f]) {
z = z - 1;
}
}
int b[] = new int[z];
int k = v[0];
int g = v[v.length - 1];
int l = v.length;
int m = 1;
for (int i = 0; i < v.length; i++) {
if ( (i*2)%4 == 0) {
if (v[i] == v[i+1]) {
b[i] = k;
k = v[i+m+1];
m--;
} else if (v[i] != v[i+1]) {
b[i] = k;
k = v[i+m];
m--;
} else {
b[i] = k;
}
} else {
if (v[l - 1] == v[l - 2]) {
b[i] = g;
g = v[l - 3];
l--;
} else if (v[l - 1] != v[l - 2]) {
b[i] = g;
g = v[l - 2];
l--;
} else {
b[i] = g;
}
}
}
return b ;
}
}
}
对此进行改进以满足您的需求。这将输出:
1
11
2
10
5
6