【问题标题】:CodeHS: How use one class's toString method in another class's toString multiple timesCodeHS:如何在另一个类的 toString 中多次使用一个类的 toString 方法
【发布时间】:2020-10-17 11:38:40
【问题描述】:

本练习要求我们创建一个“RoadTrip”类,该类使用地理位置类创建地理位置的 ArrayList。练习的一部分要求我们在 RoadTrip 类中创建一个 toString 方法,该方法最终会返回如下字符串:

1. San Francisco (37.7833, -122.41671)
2. Los Angeles (34.052235, -118.2436831)
3. Las Vegas (36.114647, -115.1728131)

为 ArrayList 中的每个 GeoLocation 对象创建一个字符串。

但我不能将 return 语句放在 for 循环中。这是我“作弊”以使其模拟我希望它实际执行的操作的示例。

public String toString() 
    {
        int counter = 1;
        for (int i = 0; i < locationList.size() ; i++) 
        {
            System.out.println(counter + ". " + locationList.get(i).toString());
            counter++;
        }
        return "";
    }

如果我只是用return 替换System.out.println() 并删除return "";,我会收到错误:

RoadTrip.java:43: error: unreachable statement
            counter++;
            ^
RoadTrip.java:45: error: missing return statement
    }
    ^
2 errors

我看到了使用 StringBuilder 的其他解决方案,但我假设课程的创建者打算使用我们提供的工具来完成练习。我可以使用另一种方法来限制给定的“工具集”吗?

如果我的技术语言被关闭了,请原谅我,我对编码还是比较陌生。

【问题讨论】:

  • 如果你想避免StringBuilder,你必须在for循环中连接String,这是一种反模式。您确定StringBuilder 不在您的“工具集”中吗?
  • 那么...到目前为止有什么进展吗?
  • 是的,我能够通过连接一个字符串来完成分配。对不起,我忘了通知你!

标签: java for-loop arraylist return tostring


【解决方案1】:

为什么会出现问题-

  1. 控件在第一次循环迭代时遇到 return 语句并返回到调用方法的位置。因此,循环体中的以下行无法访问。

  2. 由于 return 语句在循环中并且受条件执行,编译器会告诉您缺少 return 语句。见以下代码:

public class Program
{
    public static void main(String[] args) {
        System.out.println(method());
    }
    static int method()
    {
        int i= (int)Math.random();
        if(i>0)
            return 1;
    }
}

因为这是你的任务我不会提供工作代码。

最简单的解决方案是定义一个字符串变量,在其中存储一个空字符串 (""),在循环中连接您需要的任何内容,然后将其连接到 return

【讨论】:

  • 感谢您告诉我问题背后的原因。非常感谢您的帮助。
  • "非常感谢您的帮助。"一个赞成票表明这将是非常好的。 :P
  • 很遗憾,在我获得更多声望之前,我的点赞是不可见的。
【解决方案2】:

如果你不能使用StringBuilder,为什么不像这样连接字符串;

public String toString() 
    {
        int counter = 1;
        String str = "";
        for (int i = 0; i < locationList.size() ; i++) 
        {
            str = str + counter + ". " + locationList.get(i).toString();
            str = str + "\n";
            counter++;
        }
        return str;
    }

P.S - 我没有运行代码。

【讨论】:

  • 哇,这真是一个显而易见的解决方案。我不敢相信我也忘记了“\n”。感谢您的帮助。
  • 字符串 str= null; str = str + "100"; System.out.println(str);将打印“null100”
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-18
  • 1970-01-01
  • 1970-01-01
  • 2021-02-24
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多