【问题标题】:Access other Java classes访问其他 Java 类
【发布时间】:2020-03-30 19:14:58
【问题描述】:

我是一名 Java 初学者,有两个问题让我很困惑,所以我有这些问题。 比如我不明白为什么在Class Suitcase中可以调用方法调用getWeight(),但是在Class Hold中方法调用totalWeight()不行。

在这里工作:

 public int totalWeight() {
        int momentaryWeight = 0;
        for (Item items: this.itemList) {
            momentaryWeight = momentaryWeight + items.getWeight();
        }
        return momentaryWeight;
    }

但不在这里:

 public String toString() {
        int momentaryWeight = 0;
        int index = 0;
        for (int i = index; i < this.suitcaseList.size(); i++) {
            Suitcase suitcaseChosen = this.suitcaseList.get(i);
            int weightOfsuitcaseChosen = suitcaseChosen.totalWeight();
            momentaryWeight += weightOfsuitcaseChosen;
        }

此外,当有一个返回某些内容的方法并使用 if 语句(所以 2 个 return 语句)时,它会在之后询问我另一个 return 语句,如下所示:

public Item printGoods() {
    if (this.itemList.isEmpty() == true) {
        return null;
    } else {
    for (Item itemThis: this.itemList) {
        return itemThis;
    }
    }
    return null;
}

我知道这些问题可能很枯燥,但我想不出一个更好的论坛来理解它。 谢谢。

Hold 类:

public class Hold {
    private int maxWeight;
    private ArrayList<Suitcase> suitcaseList;

    public Hold(int maxWeightGiven) {
        this.maxWeight = maxWeightGiven;
        this.suitcaseList = new ArrayList<>();
    }

    public void addSuitcase(Suitcase suitcase) {
       this.suitcaseList.add(suitcase); 
    }

    public String toString() {
        int momentaryWeight = 0;
        int index = 0;
        for (int i = index; i < this.suitcaseList.size(); i++) {
            Suitcase suitcaseChosen = this.suitcaseList.get(i);
            int weightOfsuitcaseChosen = suitcaseChosen.totalWeight();
            momentaryWeight += weightOfsuitcaseChosen;
        }
        return this.suitcaseList.size() + " suitcases" + " (" + momentaryWeight + " kg)";
    }

手提箱类:

import java.util.ArrayList;

public class Suitcase {
    private int maximumWeight;
    private ArrayList<Item> itemList;

public Suitcase(int maximumWeightGiven) {
    this.maximumWeight = maximumWeightGiven;
    this.itemList = new ArrayList<>();
}

public void addItem(Item item) {
    int momentaryWeight = 0;
    if (momentaryWeight <= this.maximumWeight && momentaryWeight + item.getWeight() <= this.maximumWeight) {
    this.itemList.add(item);    
    }
}


public int totalWeight() {
    int momentaryWeight = 0;
    for (Item items: this.itemList) {
        momentaryWeight = momentaryWeight + items.getWeight();
    }
    return momentaryWeight;
}

Item 类如下所示:

    public class Item {
        private String name;
        private int weight;

        public Item(String nameGiven, int weightGiven) {
            this.name = nameGiven;
            this.weight = weightGiven;
        }

         public String getName() {
             return this.name;
         }

         public int getWeight() {
             return this.weight;
         }

         public String toString() {
             return this.name + "( " + this.weight + " kg)";
         }

    }
}

【问题讨论】:

  • toStringtotalWeight 在哪些类中?
  • 如果你发minimal reproducible example,我相信我能回答你。
  • 编程难,从教程开始:docs.oracle.com/javase/tutorial
  • 关于您的第二个问题:如果您声明返回类型,所有可能的代码路径最终都必须返回该类型的内容。如果itemList 包含零项(所以return itemThis 永远不会被执行),而isEmpty() 返回false 怎么办? (这是错误的,但它*可能是......)
  • 很抱歉,我无法发布整个代码,因为它太长了。我将发布屏幕图像。

标签: java arrays methods netbeans


【解决方案1】:

第一个问题是不完整的代码和细节。

第二个问题:假设if-condition 为假并且您的循环条件也为假(空数组),那么程序将无法到达返回语句,这就是您必须添加额外的返回语句的原因。

您可以在else block 内移动最后一行return

【讨论】:

  • 感谢您的回答。我现在清楚了带有 if 条件的那个。我已经添加了代码供大家学习(代码本身来自在线课程)。
【解决方案2】:

不知道发生了什么,但是当我稍后处理它时,突然错误消息消失了,我能够运行程序。 NetBeans 中是否有用于“刷新”的特殊键?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-19
    • 2016-03-08
    相关资源
    最近更新 更多