为什么我的一个int数组的Int值大于10就变成0了?
Why does my Int value of an int array become 0 when it is higher than 10?
我编写的代码按升序对两个数组的值进行排序,它确实有效,但前提是我在数组中使用小于 10 的值。这实际上听起来像是一个简单的问题,但我已经尝试过任何方法,但我只是不明白为什么它不起作用。
首先我应该向您展示我写的合并功能:
public static int[] merge(int[] leftArray, int[] rightArray){
int[] result = new int[leftArray.length + rightArray.length];
int position = 0;
int left = 0;
int right = 0;
String result_debug;
while(true){
/*
System.out.println("Result: " + result[position]);
System.out.println("Left: " + leftArray[left]);
System.out.println("Right: " + rightArray[right]);
*/
if(leftArray[left] < rightArray[right]){
result[position] = leftArray[left];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
left++;
} else if (leftArray[left] > rightArray[right]) {
result[position] = rightArray[right];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
right++;
} else if (leftArray[left] == rightArray[right]) {
result[position] = leftArray[left];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
left++;
result[position] = rightArray[right];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
right++;
}
if(left == leftArray.length && right < rightArray.length) {
for(int i = position; i < rightArray.length; i++){
result[i] = rightArray[right];
System.out.println(rightArray[right]);
right++;
}
break;
} else if (right == rightArray.length && left < leftArray.length) {
for(int i = position; i < leftArray.length; i++){
result[i] = leftArray[left];
System.out.println(leftArray[left]);
left++;
}
break;
} else if (left == leftArray.length && right == rightArray.length) {
break;
}
//System.out.println("Result: " + result[position]);
//System.out.println("Left: " + leftArray[left]);
//System.out.println("Right: " + rightArray[right]);
}
System.out.println("Result: " + result[result.length - 1]);
return result;
}
每当我使用值低于 10 的数组时,它都可以正常工作,但是当我使用任何更高的值时它就会变为 0。如您所见,我已经尝试了一些调试方法但没有成功。我还编写了一个函数,将一个 int 数组转换为一个 String 以将其打印出来我也可以向您展示该函数:
public static String arrayToString(int[]arr){
String result = "[" + arr[0];
for(int i = 1; i < arr.length; i++){
result = result + ", " + arr[i];
}
result += "]";
return result;
}
我也认为这可能是因为 arraytoString 方法,但正如您在我的合并方法底部看到的那样,我已经检查过并且输出仍然是 0,所以不是因为那个。
我不认为这是一个逻辑问题,因为正如我所说,只要我使用低于 10 的值它就可以工作,而且在我开始编程时,它甚至无法使用更高的值比 8 它后来开始与 9 和 10 一起工作。
我正在使用 Windows 10 Pro。
也许您不必使用自定义函数:
int[] one = new int[]{59, 1, 523, -43, 123, 5};
int[] two = new int[]{3, 901, 73, -4783, 1, 53};
//merging the arrays
int[] merged = new int[one.length + two.length];
System.arraycopy(one, 0, merged, 0, one.length);
System.arraycopy(two, 0, merged, one.length, two.length);
Arrays.sort(merged);
System.out.println(arrayToString(merged));
输出:
[-4783, -43, 1, 1, 3, 5, 53, 59, 73, 123, 523, 901]
问题不在于数组值,而在于值在两个数组中的位置。问题将通过输入
体现出来
int[] a = {1,2,3};
int[] b = {4,5,6};
int[] c = merge(a, b);
你应该学习如何使用调试器。然后你就可以正确调试你的代码了。问题是数组 b 中的第一项大于数组 a 中的所有项。所以你用 a 中的所有项目填充结果并推进 left
(还有 position
)直到 left
等于 leftArray.length
.
在上面的例子中,此时,left
和position
都等于3.
此时您输入以下 if 语句:
if(left == leftArray.length && right < rightArray.length) {
您分配 i
以值 position
开头。使其等于 rightArray.length
,因此您不会复制数组 b.
我不太确定解决它的确切原因是什么,但经过一些试验后,我的代码运行起来,因为它应该只需要将结果数组的最后一个值放在循环之外。工作代码是:
public static int[] merge(int[] leftArray, int[] rightArray){
int[] result = new int[leftArray.length + rightArray.length];
int position = 0;
int left = 0;
int right = 0;
String result_debug;
while(true){
/*
System.out.println("Result: " + result[position]);
System.out.println("Left: " + leftArray[left]);
System.out.println("Right: " + rightArray[right]);
*/
if(leftArray[left] < rightArray[right]){
result[position] = leftArray[left];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
left++;
} else if (leftArray[left] > rightArray[right]) {
result[position] = rightArray[right];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
right++;
} else if (leftArray[left] == rightArray[right]) {
result[position] = leftArray[left];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
left++;
result[position] = rightArray[right];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
right++;
}
if(left == leftArray.length && right < rightArray.length) {
for(int i = position; right < rightArray.length; i++){
result[i] = rightArray[right];
System.out.println(rightArray[right]);
right++;
}
break;
} else if (right == rightArray.length && left < leftArray.length) {
for(int i = position; left < leftArray.length; i++){
result[i] = leftArray[left];
System.out.println(leftArray[left]);
left++;
}
break;
} else if (left == leftArray.length && right == rightArray.length) {
break;
}
//System.out.println("Result: " + result[position]);
//System.out.println("Left: " + leftArray[left]);
//System.out.println("Right: " + rightArray[right]);
}
System.out.println("Result: " + result[result.length - 1]);
if(leftArray[leftArray.length - 1] > rightArray[rightArray.length - 1]){
result[result.length - 1] = leftArray[leftArray.length - 1];
}
if(rightArray[rightArray.length - 1] > leftArray[leftArray.length - 1]){
result[result.length - 1] = rightArray[rightArray.length - 1];
}
return result;
}
我编写的代码按升序对两个数组的值进行排序,它确实有效,但前提是我在数组中使用小于 10 的值。这实际上听起来像是一个简单的问题,但我已经尝试过任何方法,但我只是不明白为什么它不起作用。
首先我应该向您展示我写的合并功能:
public static int[] merge(int[] leftArray, int[] rightArray){
int[] result = new int[leftArray.length + rightArray.length];
int position = 0;
int left = 0;
int right = 0;
String result_debug;
while(true){
/*
System.out.println("Result: " + result[position]);
System.out.println("Left: " + leftArray[left]);
System.out.println("Right: " + rightArray[right]);
*/
if(leftArray[left] < rightArray[right]){
result[position] = leftArray[left];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
left++;
} else if (leftArray[left] > rightArray[right]) {
result[position] = rightArray[right];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
right++;
} else if (leftArray[left] == rightArray[right]) {
result[position] = leftArray[left];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
left++;
result[position] = rightArray[right];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
right++;
}
if(left == leftArray.length && right < rightArray.length) {
for(int i = position; i < rightArray.length; i++){
result[i] = rightArray[right];
System.out.println(rightArray[right]);
right++;
}
break;
} else if (right == rightArray.length && left < leftArray.length) {
for(int i = position; i < leftArray.length; i++){
result[i] = leftArray[left];
System.out.println(leftArray[left]);
left++;
}
break;
} else if (left == leftArray.length && right == rightArray.length) {
break;
}
//System.out.println("Result: " + result[position]);
//System.out.println("Left: " + leftArray[left]);
//System.out.println("Right: " + rightArray[right]);
}
System.out.println("Result: " + result[result.length - 1]);
return result;
}
每当我使用值低于 10 的数组时,它都可以正常工作,但是当我使用任何更高的值时它就会变为 0。如您所见,我已经尝试了一些调试方法但没有成功。我还编写了一个函数,将一个 int 数组转换为一个 String 以将其打印出来我也可以向您展示该函数:
public static String arrayToString(int[]arr){
String result = "[" + arr[0];
for(int i = 1; i < arr.length; i++){
result = result + ", " + arr[i];
}
result += "]";
return result;
}
我也认为这可能是因为 arraytoString 方法,但正如您在我的合并方法底部看到的那样,我已经检查过并且输出仍然是 0,所以不是因为那个。
我不认为这是一个逻辑问题,因为正如我所说,只要我使用低于 10 的值它就可以工作,而且在我开始编程时,它甚至无法使用更高的值比 8 它后来开始与 9 和 10 一起工作。
我正在使用 Windows 10 Pro。
也许您不必使用自定义函数:
int[] one = new int[]{59, 1, 523, -43, 123, 5};
int[] two = new int[]{3, 901, 73, -4783, 1, 53};
//merging the arrays
int[] merged = new int[one.length + two.length];
System.arraycopy(one, 0, merged, 0, one.length);
System.arraycopy(two, 0, merged, one.length, two.length);
Arrays.sort(merged);
System.out.println(arrayToString(merged));
输出: [-4783, -43, 1, 1, 3, 5, 53, 59, 73, 123, 523, 901]
问题不在于数组值,而在于值在两个数组中的位置。问题将通过输入
体现出来 int[] a = {1,2,3};
int[] b = {4,5,6};
int[] c = merge(a, b);
你应该学习如何使用调试器。然后你就可以正确调试你的代码了。问题是数组 b 中的第一项大于数组 a 中的所有项。所以你用 a 中的所有项目填充结果并推进 left
(还有 position
)直到 left
等于 leftArray.length
.
在上面的例子中,此时,left
和position
都等于3.
此时您输入以下 if 语句:
if(left == leftArray.length && right < rightArray.length) {
您分配 i
以值 position
开头。使其等于 rightArray.length
,因此您不会复制数组 b.
我不太确定解决它的确切原因是什么,但经过一些试验后,我的代码运行起来,因为它应该只需要将结果数组的最后一个值放在循环之外。工作代码是:
public static int[] merge(int[] leftArray, int[] rightArray){
int[] result = new int[leftArray.length + rightArray.length];
int position = 0;
int left = 0;
int right = 0;
String result_debug;
while(true){
/*
System.out.println("Result: " + result[position]);
System.out.println("Left: " + leftArray[left]);
System.out.println("Right: " + rightArray[right]);
*/
if(leftArray[left] < rightArray[right]){
result[position] = leftArray[left];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
left++;
} else if (leftArray[left] > rightArray[right]) {
result[position] = rightArray[right];
position = position + 1;
result_debug = arrayToString(result);
System.out.println(result_debug);
right++;
} else if (leftArray[left] == rightArray[right]) {
result[position] = leftArray[left];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
left++;
result[position] = rightArray[right];
result_debug = arrayToString(result);
System.out.println(result_debug);
position = position + 1;
right++;
}
if(left == leftArray.length && right < rightArray.length) {
for(int i = position; right < rightArray.length; i++){
result[i] = rightArray[right];
System.out.println(rightArray[right]);
right++;
}
break;
} else if (right == rightArray.length && left < leftArray.length) {
for(int i = position; left < leftArray.length; i++){
result[i] = leftArray[left];
System.out.println(leftArray[left]);
left++;
}
break;
} else if (left == leftArray.length && right == rightArray.length) {
break;
}
//System.out.println("Result: " + result[position]);
//System.out.println("Left: " + leftArray[left]);
//System.out.println("Right: " + rightArray[right]);
}
System.out.println("Result: " + result[result.length - 1]);
if(leftArray[leftArray.length - 1] > rightArray[rightArray.length - 1]){
result[result.length - 1] = leftArray[leftArray.length - 1];
}
if(rightArray[rightArray.length - 1] > leftArray[leftArray.length - 1]){
result[result.length - 1] = rightArray[rightArray.length - 1];
}
return result;
}