抑制数组的负面元素

时间:2014-11-29 02:52:34

标签: arrays elements negative-number

我正在编写一个代码,它将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。

1 个答案:

答案 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));
}
}