方法和数组的问题
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 类型。解决这个问题,你应该会好起来的。
我目前正在学习 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 类型。解决这个问题,你应该会好起来的。