2015-07-06 3 views
0

Ниже у меня есть метод, в котором задан массив целых чисел, называемый num, метод возвращает true, если 1, 2, 3 находятся в массиве в последовательном порядке. Нет проблем с этой программой. Однако условные обозначения в цикле for кажутся немного повторяющимися и утомительными. Есть ли более простой и эффективный способ обойти это? (т. е. какой-то цикл?)Условная эффективность

public boolean array123(int[] nums) { 
    boolean first = false; 
    for (int i = 0; i <nums.length-2; i++) 
    { 
     if (nums[i] == 1) 
     { 
      if (nums[i+1] == 2) 
      { 
       if (nums[i+2] == 3) 
       { 
        first = true; 
       } 
      } 
     } 
    } 
    return first; 
} 
+0

Почему используя для цикла, когда вы даже не собирается во второй итерации , – Sneh

+1

@Sneh снова прочитал вопрос. – Tobb

+6

Я голосую, чтобы закрыть этот вопрос как не относящийся к теме, потому что он просит кодовое представление рабочего кода. Приходит на http://codereview.stackexchange.com –

ответ

3

Вы могли бы упростить это так:

public boolean array123(int[] nums) { 
    for (int i = 0; i <nums.length-2; i++){ 
     if(nums[i] == 1 && nums[i + 1] == 2 && nums[i + 2] == 3) { 
      return true; 
     } 
    } 
    return false; 
} 
+0

Невозможно придумать какой-либо другой способ упростить его. +1 – Tobb

1

Что-то вроде этого, вероятно, сделает то, что вы хотите. В этом конкретном случае, потому что вы не делаете ничего сложного, вы можете вырезать переменную результатов и просто прямо вернуть ответ, который вы хотите. В основном вопрос предпочтения.

public boolean array123(int[] nums) { 
    int check = 1; 
    for(int i = 0; i<nums.length; i++) { 
     if(nums[i] == check || nums[i] == 1) 
     { 
      if(check == 3) 
      { 
       return true; 
      } 
      check = nums[i]+1; 
     } 
     else { 
      check = 1; 
     } 
    } 
    return false; 
} 

EDIT уборщик решение было бы на самом деле что-то вроде этого

public boolean array123(int[] nums) { 
    int check = 1; 
    for(int i = 0; i<nums.length; i++) { 
     if(nums[i] == check) { 
      if(check == 3) { 
       return true; 
      } 
      check++; 
     } else if(check > 1) { 
      check = 1; 
      i--; 
     } 
    } 
    return false; 
} 
+0

или, для более общего решения ... сохраните номера [1,2,3] в своем собственном массиве и используйте «check» в качестве индекса (init to 0 и look for check == 2) –

+0

@Paul David This код, однако не работает, если числовой массив равен {1, 1, 2, 3, 1}. Он будет оценивать значение false, хотя он должен оцениваться как истинный. – AWATHIEU

+0

@AWATHIEU hmm, true. Ну, тогда, он снова станет уродливым, если вы хотите это исправить. Вы можете добавить '|| nums [i] == 1' в условие if, а затем заменить 'check ++' на 'check = nums [i] + 1' или что-то в этом роде. –