【问题标题】:Java Indexing array help. CodingBatJava 索引数组帮助。编码蝙蝠
【发布时间】:2015-12-18 00:46:42
【问题描述】:

我要解决的问题是: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(),但是这个问题指定了一个数组,这很烦人要找出要预设多少个插槽。

【问题讨论】:

    标签: java arrays indexing


    【解决方案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;
    }
    

    【讨论】:

    • 关于如何在我的列表中设置索引数量的任何提示或者我所做的唯一方法是什么?
    • 用我能想到的设置索引数量的最短方法更新了我的答案。
    【解决方案2】:
    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)));
        }
    }
    

    【讨论】:

      【解决方案3】:

      你实际上可以不使用循环来解决这个问题,只需要使用 if 子句:

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

      【讨论】:

        【解决方案4】:
            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;
        }
        

        【讨论】:

        • 请提供一些背景信息,说明为什么这可以解决问题。仅仅丢掉一堆 od 代码很难理解
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-06-19
        • 2014-01-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多