【问题标题】:Changing array element?改变数组元素?
【发布时间】:2017-03-30 20:20:20
【问题描述】:

我的目标是有一个像这样 int arrMarks[] = {10,-15,25,102,30} 的数组,当元素低于零或高于 100 时,我需要使其等于零。然后这些元素应该在数组的最后一个位置,而另一个位置移出一个位置。那么如何在不使用任何包装或短缺的情况下做到这一点呢?

public void validateMarks(int [] array){
        int [] array1 = new int[5];

        for(int i = 0; i<array.length; i++){
            if(array[i] < 0 || array[i] > 100){
                int f= array1.length-1;

                array1[f] = array[i];
                array1[f] = 0;
                f--;
            }

            else if(array[i] > 0 || array[i] < 100){

                array1[i] = array[i];

            }
            System.out.println(array1[i]);
        }
    }

【问题讨论】:

    标签: java arrays methods element computer-science


    【解决方案1】:
    public void validateMarks(int[] array){
        int[] array1 = new int[array.length];
        int pos = 0;
        for (int i = 0; i < array.length; i++){
            if (array[i] >= 0 && array[i] <= 100)
                array1[pos++] = array[i];
        }
        for (int i = 0; i < array.length; i++){
            System.out.println(array1[i]);
        }
    }
    

    这里的经验教训:

    • 不要对值进行硬编码(5 更改为 array.length
    • 了解范围规则(fpos 需要在 for 循环之外声明)
    • 有时您不需要存储值

    最后一点暗示array1 实际上没有必要。我将这个挑战留给 OP。

    【讨论】:

    • 然后关于结果,因为当我写 System.out.println(array1[i]);这给出了一个错误
    • 另一件事是在第二部分我们分配给索引 1 为什么不为零,因为它是第一个索引。
    • 您误解了pos++ 的作用。它在执行赋值操作后递增pos++pos 将其分配给 1,pos++ 仍将其分配给 0。这实际上只是 java 语法糖果。随意做pos 然后在下一行写pos++;
    • 对不起,我问了很多问题,但它给出了这个输出 10 0 0 0 而不是 10 25 30 0 0
    • 它应该是或不是,因为那样我们找不到解决方案
    【解决方案2】:

    你可以使用swap方法。

    public void swap(int i, int j, int[] arr) {
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
    

    【讨论】:

      【解决方案3】:

      好吧,让我检查一下我是否理解正确。据我了解,您要检查每个数组值是否小于 0 或大于 100。如果是,则应从原始数组中删除该值(替换为 0)并复制到新数组的最后一个位置.所以,如果我明白了,有我的建议:

      public int[] validateMarks(int [] originalArray){
          int[] returnArray = new Int[originalArray.length];
          int i,j;
      
          j=originalArray.length; //returnArray will be visited backwards
      
          for(i=0;i<originalArray.length;i++){ //originalArray will be visited forwards
              if(originalArray[i]<0 || originalArray[i]>100){
                  returnArray[j] = originalArray[i]
                  //Last valid returnArray's position will receive originalArray's value which, is less than 0 or higher than 1000
                  originalArray[i] = 0;
                  //The value which was less then 0 or higher than 100 will be replaed by 0 at the originalArray
                  j--;
                  //returnArray's counter is decreased so it can be visited backwards
              }
          }
      
          return returnArray;
          //The new processed array will be returned by this method. If you prefer, you can set this method as void and work it your way.
      }
      

      希望对您有所帮助。干杯!

      【讨论】:

      • 但在终端中它给出并索引超出范围异常错误
      • 操作,抱歉。将“j=originalArray.length;”行更改为“j=originalArray.length-1;”
      • 如果对你有帮助,请接受我在这个话题上的回答!干杯!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-09
      • 1970-01-01
      • 2017-07-03
      • 2021-08-19
      • 1970-01-01
      相关资源
      最近更新 更多