方法和数组的问题

Issues with a method and array

我目前正在学习 java 课程的介绍,但我一直被一个问题困住了。我自己解决了整个问题,但答案不被我们使用的家庭作业系统接受,并且给我一个编译错误。我希望有人能指出我的错误。这是我的问题:

编写一个名为 listCountriesOfOrigin 的静态方法,将其添加到 Bowl class 中,该方法传递一个 Bowl 对象数组,并在控制台的原产国列中打印到控制台数组中的每个 Bowl 对象。

碗 class 如下所示。

public class Bowl {
    private double weight;
    private boolean empty;
    private String origin; // country of manufacture

    public Bowl(double w, boolean e, String origin) {
        weight = w;
        empty = e;
        this.origin = origin;
    }

    public double getWeight() {
        return weight;
    }

    public boolean getEmpty() {
        return empty;
    }

    public String getOrigin() {
        return origin;
    }

    public void setEmpty(boolean emptyStatus) {
        empty = emptyStatus;
    }

    public String toString() {
        return ("from " + origin + " weight: " + weight);
    }
}

这是我的解决方案:

在 for 循环中使用静态 header/return 语句

public static String listCountriesOfOrigin (Bowl[] bowls) {
  for(int i = 0; i < bowls.length; i++) {
    String origin = bowls[i].getOrigin();
    return origin;
  }
}

带有 SOPln 语句的无效方法:

public void String listCountriesOfOrigin (Bowl[] bowls) {
      for(int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        System.out.println(origin);
      }
}

两者都给我编译错误,任何帮助对我来说意义重大,将不胜感激!

谢谢!

在您的第一个语句中,您只能 return 函数中的一个值。因此它将 运行 通过循环一次且仅 运行 一次。它应该可以工作,但有点困惑为什么它会给出编译器错误。

第二个:你不能 return void 和一个字符串,你必须 select 一个。

你的第一个方法不是return结果

public static String listCountriesOfOrigin (Bowl[] bowls) {
    for(int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        return origin;
    }
    // No return here
}

问题是,编译器不能保证 for-loop 中的 return 语句会被执行...此外,它真的没有意义...

您的第二次尝试已正确声明...

//public void String listCountriesOfOrigin (Bowl[] bowls) {
public static void listCountriesOfOrigin (Bowl[] bowls) {
    for(int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        System.out.println(origin);
    }
}

根据要求,这些方法中没有任何必要return,但我就是这样读的

错误是由于代码中的 return 语句造成的。这是更正后的代码。

public class Bowl {
private double weight;
private boolean empty;
private String origin=null; // country of manufacture

public Bowl(double w, boolean e, String origin) {
    weight = w;
    empty = e;
    this.origin = origin;
}

public double getWeight() {
    return weight;
}

public boolean getEmpty() {
    return empty;
}

public String getOrigin() {
    return origin;
}

public void setEmpty(boolean emptyStatus) {
    empty = emptyStatus;
}

public String toString() {
    return ("from " + origin + " weight: " + weight);
}

public static String listCountriesOfOrigin(Bowl[] bowls) {
    for (int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        return origin;
    }
    return null;
}

public static void main(String[] args) {
    Bowl bowl = new Bowl(1.1, true, "USA");
    System.out.println(bowl.getOrigin());

}

}

解决方案 1:return 语句在 for 循环内,可能无法访问。 解决方案 2:return 类型应该为空,因为它没有 returning 任何东西。

你能试试这个吗?

public static List<String> listCountriesOfOrigin(Bowl[] bowls) {
    List<String> originList = new ArrayList();
    for (int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        originList.add(origin);
    }
    return originList;
}

让我们一次解决这个问题的一部分。首先,问题是创建一个名为 listCountriesOfOrigin 的静态方法。也可以确定,如果要在Bowl外使用class,则该方法应该public。接下来我们了解到该方法接受一个参数,即一组 Bowl 对象。最后我们了解该方法必须做什么,打印 Bowl 对象来源的一列。仅此而已。

现在让我们看看您的方法完成了什么。

public static String listCountriesOfOrigin (Bowl[] bowls) {
    for(int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        return origin;        
   }
   //returns nothing here.  If for doesn't execute then no return.
}  

查看第一行的第一个方法是 public,静态的,正确命名,并接受一个 Bowl 对象数组,但是,它 return 是一个 String 对象。这是错误的,原因有二:第一,项目描述中没有提到 returning 任何内容;第二,在问题的上下文中没有任何意义。它 return 是一个连接的字符串还是一个?第一个还是最后一个?由于这两个原因,该方法应该 return 什么都没有,或者无效。接下来循环遍历数组,设置和原点变量等于数组中的第 i 个碗对象,然后 returning 它。您的想法是对的,但请记住,该方法不应该 return 而是打印出来。此代码块只是 return 第一个碗的起源。

//returns String but void
public void String listCountriesOfOrigin (Bowl[] bowls) {
    for(int i = 0; i < bowls.length; i++) {
        String origin = bowls[i].getOrigin();
        System.out.println(origin);
    }
    //No return
}

第二种方法方法是 public,void,命名正确并接受 Bowl 对象数组作为参数,但与第一个示例一样,它尝试 return 一个字符串。由于上述原因,这是错误的,另外一个原因是一个方法不能既 return 一个字符串又是无效的。方法中的代码循环遍历每个 Bowl 对象,并在换行符上打印其来源,这是问题所要求的。这个唯一的错误是它不应该将 String 列为 return 类型。解决这个问题,你应该会好起来的。