Java索引数组帮助。 CodingBat

时间:2015-12-18 00:46:42

标签: java arrays indexing

我想解决的问题是:http://codingbat.com/prob/p128270

给定2个int数组,a和b,任意长度,返回一个包含每个数组的第一个元素的新数组。如果任一数组的长度为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(),但是这个问题指定了一个数组,这个数组很难找到预设的插槽数。

4 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分: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)));
    }
}

答案 2 :(得分:0)

实际上,你可以在不使用循环的情况下解决这个问题,只能使用if-clauses:

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;
}

答案 3 :(得分:0)

    public int[] front11(int[] a, int[] b) {
  int[] arr=new int[0];
  int[] arr1=new int[1];
  int[] arr2=new int[2];

  if(a.length==0 && b.length==0){
  return arr;
}

    if(a.length>0 && b.length>0){
    arr2[0]=a[0];
    arr2[1]=b[0];
    return arr2;

 }

  if(a.length==0){
    arr1[0]=b[0];
    return arr1;
  }
  if(b.length==0){
    arr1[0]=a[0];
    return arr1;
  }




  return arr;
}