【问题标题】:How do I append int in a int array(java)?如何在 int 数组(java)中附加 int?
【发布时间】:2021-02-01 18:53:53
【问题描述】:

我正在从事一种来自codingbat的编码实践

array coding practice

第一个没有问题,

public int[] maxEnd3(int[] nums) {
  int max = Math.max(nums[0], nums[2]);
  int[] result = {max, max, max};
  return result;
}

但是,第二个有编译问题,我不知道为什么。请看一下我的代码。谢谢!

public int[] maxEnd3(int[] nums) {  
   int first = nums[0];
   int last = nums[2];
   int[] result = new int[2];
   if (first >= last) {
      result = {first, first, first};
   } else {
      result = {last, last, last};
   }
   return result;
}

编译问题: 缺少 '}' 或非法的表达式开头

【问题讨论】:

  • 那么编译的代码和不编译的代码有什么区别呢?此外,您有一个总是返回值的 if/else 语句,那么return nums 将如何执行?另外,你怎么知道 nums 数组将包含 3 个值?您应该进行编辑以检查数组的大小,以免索引超出范围。不要假设您的数据是正确的。
  • 对不起,我编辑了我的第二个代码。当您检查链接时,数组的长度设置为 3。第一个代码和第二个代码之间的区别在于第一个代码,我创建一个数组并在一行中附加值。但是,在第二个代码中,我创建了一个数组并在两个不同的行中附加值。(int[] result = new int[2];result = {first, first, first}; or result = {last, last, last} ;)
  • 在第一种情况下,数组的声明是在单个语句中完成的。在第二种情况下,您尝试在两个语句中执行此操作,但类型信息不可用。

标签: java arrays integer append


【解决方案1】:
int[] result = {max, max, max};

上面的编译是因为编译知道类型。

return {first, first, first};

上面没有编译,因为编译器不知道类型。

应该是:

return new int[] {first, first, first};

或者,如果你想将它分配给你仍然需要使用的变量:

result = new[int] {first, first, first};

【讨论】:

  • 非常感谢您的回答。我终于解决了编译问题。但是为什么我们需要指定返回数组的类型。我想知道,因为当我返回 boolean、String 或 int 时,我只能返回 true;返回“A”,返回 0;
  • 我不是编译器专家,但编译器不够聪明,无法知道类型应该是什么。通常 {} 用于代码块,所以我猜它无法识别您实际上想要创建一个数组。它假定您的代码块中的语句不正确。基元不同于对象。您不需要创建原语的实例。 “A”是一个字符串文字。编译器会为你创建一个字符串对象,因为字符串是如此常用。
  • 非常感谢您抽出宝贵时间提供详细的解释。你是最棒的^^b
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多