2015-09-18 4 views
-1

Код ниже - это упрощенная версия метода, над которым я работаю для проекта java. Метод сортирует список элементов (две разные категории), в этом случае 0, s и 1. Код считывает массив чисел останавливается на 0 или 1, а затем печатает как 0, так и строку и числа, следующие за 0 или 1. Если предыдущая строка равна 1 или нулю, то она останавливается и переключается в другой оператор if. Однако он выполняет только один оператор один раз. Однако в массиве больше, чем нужно читать и организовывать. Я хотел бы создать какой-то цикл, чтобы он проходил цикл через множество операторов 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
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. Я использовал для этого логические значения (например, добавление Zeroes). Затем вам необходимо отдельно отслеживать количество элементов (например, zeroCount) для каждого из массивов хранения. У вас может быть 20 цифр после 0 и всего 2 после 1. Наконец, в конце ваша длина массивов хранения не то, что вы хотите - вы хотите, чтобы количество значений, которое вы закончили, хранили. Вот почему вы получили все эти «нули». Еще одна вещь, которую я заметил, это то, что ваше значение j всегда инициализируется 0 в блоке 0, поэтому вы всегда будете использовать самые низкие значения стартового массива.

+0

не могли бы вы немного объяснить, в чем проблема? – thumbmunkeys

Смежные вопросы