我正在编写一个代码,它将int数组的负元素抑制或推送到数组的底部,而不会改变数组其余部分的顺序。这基本上意味着它不仅仅是数组的排序。到目前为止,我已经得到了这个:
class supparray
{
public static void main(String args[])
{
int array1Index = 0, array2Index = 0;
int array[] = {1, -8, 5, 12, -6, 2, 4};
int length = array.length;
int array1[] = new int[length] ;
int array2[] = new int[length];
for(int i = 0; i<array.length; i++)
{
if(array[i]<0)
{
array1[i] = array[i];
array1Index+=1;
}
else
{
array2[i] = array[i];
array2Index+=1;
}
for(int j = 0; j<array2Index; j++)
{
array1[array1Index+j] = array2[j];
}
}
System.out.println(array1);
}
}
所以,代码编译,但我得到一个非常奇怪的输出。就像,它甚至没有数字。我的输出是: [I @ 104c575 我真的不知道出了什么问题。这是我的逻辑,还是我的JDK真的搞砸了? TIA。
答案 0 :(得分:1)
这里有两个答案。首先是你的代码的答案。您必须正确格式化数组。
System.out.println(Arrays.toString(array1));
第二个答案是解决问题的另一种方法。它更清洁,更有效率,并且在开始操作之前至少检查以确保您的阵列长于1。
import java.util.Arrays;
class supparray
{
public static int array[] = {1, -8, 5, 12, -6, 2, 4};
public static int storage=0;
public static void main(String args[])
{
int length = array.length;
System.out.println (length);
if (length>1)
{
for(int i = 0; i<(length-1); i++)
{
if (array[i]<0)
{
storage=array[i];
for (int j = 0; j<(length-i-1);j++)
{
array[i+j]=array[i+j+1];
}
array[length-1]=storage;
}
}
}
System.out.println(Arrays.toString(array));
}
}