【问题标题】:int cannot be converted to int []int 不能转换为 int []
【发布时间】:2023-03-09 13:58:01
【问题描述】:

这里是编程新手,我不断收到错误消息,“不兼容的类型,int 无法转换为 int []”,问题是如果 R1 和 R2 的长度相等,则将它们添加在一起,如果不打印一条消息说'数组必须是相同的长度',如果这很重要,不知道我哪里出错了,任何帮助将不胜感激

 public int[] arrayAdd(int[] R1, int[] R2)
{
    int[] sumArray= new int[R1.length];

    if( R1.length!= R2.length)
    {
        System.out.println("The arrays must be same length");
}
else
{
    for(int i=0; i< R1.length; i++)
    for (int j=0; j<R2.length; j++)

    {

        sumArray= R1[i]+ R2[j]; // Error
    }
}
    return sumArray;
}

【问题讨论】:

  • 你为什么要给sumArray分配一个int?
  • sumArray[i] = R1[i]+ R2[j];.
  • 您的代码没有匹配的大括号,因此无法编译。为什么在检查两个长度是否相等之前分配一个新数组?

标签: java arrays bluej


【解决方案1】:

不知道哪里出错了

您正在尝试将 int 分配给类型为 int[] 的变量。

这是不合法的......而且没有意义。

这个:

   sumArray= R1[i]+ R2[j];

应该是这样的

   sumArray[something_or_other] = R1[i] + R2[j];

...除了你有一堆其他错误,这意味着简单的“点修复”是不正确的。

提示:添加两个数组的元素不需要嵌套循环。

-- 史蒂夫

【讨论】:

    【解决方案2】:
               sumArray[i]= R1[i]+ R2[j]; // updated line
    

    你需要给一个数组元素赋值,但是你做错了。

    【讨论】:

    • 这不是动态分配数组的方式。
    • @Jean-BaptisteYunès 如果您看到上面的代码,我只是从 OP 的代码中编辑了一行。所以,我不关心 OP 是否使用 ArrayList、Array 或他如何处理资源。我只是在纠正他做错的一步。
    • 给出一个本身就是错误代码的答案不是答案。所以请给出正确的行,但不要发布错误的代码!
    • @Jean-BaptisteYunès 我刚刚编辑了我的答案以避免任何误解。谢谢!
    【解决方案3】:

    你的代码在很多方面都被破坏了,至少:

    1. 您声明返回一个数组,但是当输入的大小错误时它的值是多少?以更好的方式管理此类错误(停止、抛出异常、返回错误代码等)。至少不要在这个地方显示任何东西,这不是你必须解决错误的地方,这是你检测到错误的地方,只需将其报告给调用者。
    2. 您(尝试)为返回值创建了空间,但如果不满足返回值的条件,这怎么可能?
    3. 您使用 Java 语法声明了一个数组,int []sumArray 应该是 `int sumArray[0]。
    4. 您不能像这样动态分配数组,要捕获动态分配,您必须使用指针,数组不是指针。但是可以将指针设置为已分配数组的内存地址,例如int *sumArray = new int[10]
    5. sumArray 是一个数组,因此要设置它的元素,请使用 sumArray[index] = ...

    所以这可能会更好:

    public int *arrayAdd(int[] R1, int[] R2) {
        if( R1.length!= R2.length) {
            return nullptr;
        }
        int *sumArray= new int[R1.length];
        for(int i=0; i< R1.length; i++) {    
            sumArray[i] = R1[i]+ R2[i]; 
        }
        return sumArray;
    }
    

    问题编辑后

    如果你想逐个元素地对两个数组求和,那么一个循环就足够了......

    【讨论】:

      【解决方案4】:

      实际上,在该行中 sumArray 是一个整数数组,您仅将其分配为整数,而且您还没有声明变量 j。 试试这个-

      public int[] arrayAdd(int[] R1, int[] R2)
      {
          int[] sumArray= new int[R1.length];
      
          if( R1.length!= R2.length)
          {
              System.out.println("The arrays must be same length");
          }
          else
          {
              for(int i=0; i< R1.length; i++)
      
              {
      
                  sumArray[i]= R1[i]+ R2[i]; // Error
              }
          }
          return sumArray;
      }
      

      【讨论】:

        猜你喜欢
        • 2014-06-04
        • 2018-02-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多