方法和数组的问题

时间:2015-03-26 02:39:57

标签: java arrays methods

我目前正在参加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);
      }
}

两者都给我编译错误,任何帮助都对我意义重大,非常感谢!

谢谢你!

5 个答案:

答案 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列为返回类型。解决这个问题,你应该做得很好。