循环通过两个单独的if语句

时间:2015-09-18 18:04:54

标签: java arrays loops

下面的代码是我正在为java项目工作的方法的简化版本。该方法将对项目列表(两个不同的类别)进行排序,在本例中为0,s和1。代码读取数字数组在0或1处停止,然后打印出0或1以及0或1之后的数字串。如果前面的字符串是1或0,则它将停止并切换到另一个if语句。但是它只执行一次每个语句。但是,阵列中还有更多需要通读和组织的内容。我想设置某种循环,以便循环遍历if语句集,直到它读完整个数组。

public class tester 
{

    public static void main(String[] args ) 
    {
        String flags[] = {"0","23","25","34","1","9","12","13","0","67","2","43"};
        String array[] = new String[flags.length];
        String zeros [] = new String[array.length];
        String ones[] = new String[array.length];

        int i,j,k,h;
        int count = 0;
        for (i = 0; i<flags.length; i++)
        {

            if (flags[i].equals("0")) 
            {       
                for (j=0; !flags[j].equals("1") ; j++)
                {
                    count = j+1;
                    array[j] = flags[j];
                    zeros[j] = flags[j];
                }   

            } else
                if (flags[count].equals("1"))
                {
                    j = 0;
                    for(k=count; !flags[k].equals("0");k++)
                    {
                        array[k] = flags[k];
                        j++;
                        ones[j-1] = flags[k];
                    }       
                }

        }

        for(i=0; i<zeros.length; i++)
        {System.out.println(zeros[i]);}

        System.out.println();

        for(i=0; i<ones.length; i++)
        {System.out.println(ones[i]);}
    }
}

现在打印出来的内容:

0
23
25
34
null
null
null
null
null
null
null
null

1
9
12
13
null
null
null
null
null
null
null
null

1 个答案:

答案 0 :(得分:1)

    String flags[] = {"9","0","23","25","34","1","9","12","13","0","67","2","43"};
    String array[] = new String[flags.length];
    String zeros [] = new String[array.length];
    String ones[] = new String[array.length];

    int i;

    boolean addingZeroes = false;
    boolean addingOnes = false;
    int zeroCount = 0;
    int onesCount = 0;

    for (i = 0; i<flags.length; i++) {

        if (flags[i].equals("0")) {
            zeros[zeroCount] = flags[i];
            zeroCount++;
            addingZeroes = true;
            addingOnes = false;
        } else if (flags[i].equals("1")) {
            ones[onesCount] = flags[i];
            onesCount++;
            addingZeroes = false;
            addingOnes = true;
        } else if (addingZeroes) {
            zeros[zeroCount] = flags[i];
            zeroCount++;
        } else if (addingOnes) {
            ones[onesCount] = flags[i];
            onesCount++;
        }

    }

    for(i=0; i<zeroCount; i++) {
        System.out.println(zeros[i]);
    }

    System.out.println();

    for(i=0; i<onesCount; i++) {
        System.out.println(ones[i]);
    }
嘿,夫妻俩错了。基本上,你需要一个小的状态机,你需要知道你是否正在将序列存储在1或0之后。我使用了布尔值(例如,添加了零)。 然后,您需要单独跟踪每个存储阵列的元素数(例如,zeroCount)。 0之后可能有20位数,1之后只有2位数。 最后,最后,您的存储阵列的长度不是您想要的 - 您想要最终存储的值的数量。这就是为什么你得到所有那些“空”。 我注意到的另一件事是你的j值在0块中始终被初始化为0,所以你总是使用start数组的最低值。