【问题标题】:How do I index the array to start as 1 rather than 0?如何索引数组以从 1 而不是 0 开始?
【发布时间】:2023-03-30 23:34:01
【问题描述】:

在这种情况下,程序应该将所有数组加在一起。但是,如果我在 sum 方法参数中输入 1,它将从 7 开始计数,但如果我输入 0,它会输出 0。

public class sList {

   public static void main(String[]args) {
       int[] array = {10,7,11,5,13,8}; // How do I make it read the value 10 as 1 in the array?
       sum(array.length,array);
   }

   public static int sum(int n, int[] S) {
       int i;
       int result;

       result = 0;
       for(i=1;i<=n;i++)
           result = result + S[i];

       System.out.println(result);
       return result;
   }    
}

【问题讨论】:

  • for(i=0;i&lt;=n-1;i++) ..
  • 我猜您不仅将 1 更改为 0,而且还更改了其他内容,导致结果为 0。否则将 1 更改为 0 会产生正确的结果(除了您还需要将n 更改为n-1&lt;=&lt;,但这不会导致0,而是IndexOutOfBoundsException)。
  • 最好的选择是删除数组长度形式的参数。
  • for(i=1;i&lt;=S.length;i++){ result = result + S[i-1]; }

标签: java arrays indexing


【解决方案1】:

我不会传递长度,因为:

  • 它是多余的 - array.length 告诉你长度,如果你想知道它
  • 你不需要知道长度,因为有更好的方法来遍历数组

相反,只需使用 foreach loop 遍历传入的整个数组:

public static int sum(int[] array) {
    int result = 0;
    for (int i : array)
        result += i;
    return result;
}

这样做会减少很多代码,从而更容易阅读和理解。

【讨论】:

    【解决方案2】:

    嗯,数组索引以zero开头,我想到的唯一方法就是在获取值的同时递减i的值。

    int[] s = {10,7,11,5,13,8}; 
    
    for(i=1;i<=n;i++){
        result = result + S[i-1];
    }
    

    【讨论】:

      【解决方案3】:

      想想看,0(否则为 1):

      案例 0:(n = 长度 = 6) 0、1、2、3、4、5、6

      案例 1:(n = 6) 1、2、3、4、5、6

      数组中实际填充的位置: 0、1、2、3、4、5

      在任何一种情况下,元素 6 都不在数组中,因此存在错误。万一您“忘记”计算索引为 0 的第一个元素。

      这就是为什么你必须写: 对于 (i = 0; i

      【讨论】:

        【解决方案4】:

        您应该更改 for 循环,而不是更改数组:

        for(i=0;i<n;i++)
        

        但如果你不想这样做,你总是可以将第一个元素设为 0:

        int[] array = {0, 10,7,11,5,13,8};
        

        【讨论】:

        • “但如果你不想这样做,你总是可以的。” ..做一些不必要和浪费的事情。
        • 请把条件改成i&lt;ni&lt;=n-1
        • @RohitJain 这怎么会引发 ArrayIndexOutOfBoundsException?
        • @11684..i &lt;= n 条件会导致访问array[n]。现在你明白了。
        • @Andrew 完全同意。如果您想要总和,请更改 for 循环。为什么数组以 0 开头。
        【解决方案5】:

        只需将 for 循环设置为加 1 值,以便 0 数组值准确反映相对索引!

        for (int i = 0; i < helloArray.length; i++) {
        
                    if (i == max) {
                        System.out.println(helloArray[i]);
                        System.out.println("=");
                        System.out.println(i+1);
                    }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-09-18
          • 2013-12-15
          • 1970-01-01
          • 2021-05-27
          • 2023-01-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多