我目前正在参加java课程,我非常关注一个问题。我自己完成了整个工作,但我们使用的家庭作业系统并没有接受答案,并且给我一个编译错误。我希望有人可以解释我的错误。这是我的问题:
编写一个名为listCountriesOfOrigin
的静态方法,将其添加到Bowl类中,该类传递一组Bowl对象,并在一列中打印到控制台中,每个碗对象的原始国家/地区阵列。
碗类如下。
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循环中使用静态头/ return语句
public static String listCountriesOfOrigin (Bowl[] bowls) {
for(int i = 0; i < bowls.length; i++) {
String origin = bowls[i].getOrigin();
return origin;
}
}
带有SOPln语句的void方法:
public void String listCountriesOfOrigin (Bowl[] bowls) {
for(int i = 0; i < bowls.length; i++) {
String origin = bowls[i].getOrigin();
System.out.println(origin);
}
}
两者都给我编译错误,任何帮助都对我意义重大,非常感谢!
谢谢你!答案 0 :(得分:0)
在第一个语句中,您只能从函数返回一个值。因此它将遍历循环一次并且仅运行一次。它应该工作,但有点混淆为什么它会给编译器错误。
第二个:你不能返回void和一个String,你必须选择一个。
答案 1 :(得分:0)
您的第一种方法不会返回结果
public static String listCountriesOfOrigin (Bowl[] bowls) {
for(int i = 0; i < bowls.length; i++) {
String origin = bowls[i].getOrigin();
return origin;
}
// No return here
}
问题是,编译器无法保证return
中的for-loop
语句将被执行......此外,它确实没有意义......
你的第二次尝试被正确宣布......
//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);
}
}
根据要求,没有必要从这些方法中返回任何内容,但这就是我读它们的方式
答案 2 :(得分:0)
错误是由于代码中的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());
}
}
答案 3 :(得分:0)
Solution1:return语句在for循环中,可以无法访问。 解决方案2:返回类型应该为void,因为它没有返回任何内容。
你能试试吗?
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;
}
答案 4 :(得分:0)
让我们一步一步解决这个问题。首先问题是创建一个静态的方法并命名为listCountriesOfOrigin。如果要在碗类之外使用该方法,也可以确定该方法应该公开。接下来我们了解到该方法接受一个参数,一个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,static,正确命名,并接受一个Bowl对象数组,但是,它返回一个String对象。这有两个原因是错误的:一,没有提到在项目描述中返回任何内容和两个,它在问题的上下文中没有意义。是返回串联字符串还是只返回一个字符串?第一个还是最后一个?出于这两个原因,该方法应该不返回任何内容,或者无效。接下来,循环遍历数组,设置和原始变量等于数组中的第i个碗对象并返回它。你有正确的想法,但要记住,该方法不应该返回任何东西,而是打印出来。这段代码块只会返回第一个碗的来源。
//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对象数组作为参数,但与第一个例子一样,它尝试返回一个String。由于上述原因,这是错误的,并且附加的原因是方法不能同时返回字符串并且无效。方法中的代码循环遍历每个Bowl对象,并在换行符上打印其原点,问题要求。唯一不对的是它不应该将String列为返回类型。解决这个问题,你应该做得很好。