2015-12-18 4 views
2

Вопрос, который я пытаюсь решить это: http://codingbat.com/prob/p128270Справка по массиву индексирования Java. CodingBat

Учитывая 2 ИНТ массивы, а и б, любой длины, возвращает новый массив с первым элементом каждого массива. Если любой массив равен length 0, игнорируйте этот массив.

front11({1, 2, 3}, {7, 9, 8}) → {1, 7} 
front11({1}, {2}) → {1, 2} 
front11({1, 7}, {}) → {1} 

Мой код до сих пор:

public int[] front11(int[] a, int[] b) { 
    int answerindexs = 2; 

    if(a.length == 0 || b.length == 0) 
     answerindexs = 1; 

    if(a.length == 0 && b.length == 0) 
     answerindexs = 0; 

    int[] answer = new int[answerindexs]; 

    for (int x = 0; x <= 1; x++){ 
     if(a.length > 0 && x == 0) 
      answer[0] = a[0]; 
     else if(b.length > 0 && x == 1) 
      answer[1] = b[0]; 
    } 
    return answer; 


} 

Этот вопрос я пытался сделать сам полностью подчеркнув меня, потому что каждая попытка я пытаюсь сделать Java не работает так, как я думал, он сделал. Единственный тест, который я не пропустил;

front11({}, {2, 8}) → {2} 

Потому что я получаю индекс из связанной ошибки, и у меня возникли проблемы с попыткой решить этот конкретный тест. Поскольку я не уверен, как проверить, есть ли у моего массива ответов уже элемент, поскольку answer.length всегда 2, хотя у него нет назначенного элемента в каждом индексе, поскольку он по умолчанию равен нулю.

Любая помощь была оценена, если бы кто-нибудь мог улучшить мои два утверждения if в начале (он работает для небольших чисел, но я знаю, когда он добирается до больших чисел, я не могу написать такой код). Я хотел ответить на этот вопрос, используя ArrayList, поскольку я могу просто .add(), но этот вопрос задает массив, который раздражает, чтобы узнать, сколько слотов необходимо установить.

ответ

1

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

public int[] front11(int[] a, int[] b) { 

    int answerindexs = 0; 
    answerindexs = a.length > 0 ? answerindexs + 1 : answerindexs; 
    answerindexs = b.length > 0 ? answerindexs + 1 : answerindexs; 

    int[] answer = new int[answerindexs]; 
    //Index variable 
    int i = 0; 

    for (int x = 0; x <= 1; x++){ 
     if(a.length > 0 && x == 0) 
      answer[i++] = a[0]; 
     else if(b.length > 0 && x == 1) 
      answer[i] = b[0]; 
    } 
    return answer; 
} 
+0

Красиво сделано, спасибо: D – NewtoJava

+0

Любые советы о том, как установить количество индексов в моем списке или был единственным, что я сделал? – NewtoJava

+0

Обновлен мой ответ с кратчайшим способом определения количества индексов, о которых я мог думать. – user3068350

0
import java.util.Arrays; 

public class TestBed { 

    public static int[] process(int[] a, int[] b) { 
     int[][] arrays = new int[2][]; 

     arrays[0] = a; 
     arrays[1] = b; 

     int count = 0; 
     for (int i = 0; i < arrays.length; i++) { 
      if (arrays[i].length > 0) { 
       count++; 
      } 
     } 

     int curIndex = 0; 
     int[] result = new int[count]; 

     for (int i = 0; i < arrays.length; i++) { 
      if (arrays[i].length > 0) { 
       result[curIndex++] = arrays[i][0]; 
      } 
     } 

     return result; 
    } 

    /** 
    * 
    * @param args 
    */ 
    public static void main(String[] args) { 
     int[] a = {1, 2}; 
     int[] b = {3, 4}; 

     System.out.println(Arrays.toString(process(a, b))); 
    } 
} 
0

Вы действительно можете решить эту проблему без использования петель, только если-статьи:

public int[] front11(int[] a, int[] b) { 
    // If both arrays are empty, we return the empty(!) array a and are done 
    if(a.length == 0 && b.length == 0){ 
    return a; 
    } 
    // If array a is empty, we create a new array with the first value of array b 
    if(a.length == 0){ 
    int[] result = {b[0]}; 
    return result; 
    } 
    // The same for array b 
    if(b.length == 0){ 
    int[] result = {a[0]}; 
    return result; 
    } 
    // At this point we know, that both arrays are not length 0, 
    // so we create a new array and put the first value from a and the first from b in it 
    int[] result = {a[0], b[0]}; 
    return result; 
} 
Смежные вопросы