【问题标题】:Returning a string with toString java使用 toString java 返回一个字符串
【发布时间】:2013-03-29 22:28:19
【问题描述】:

我一直在使用一个可以正确运行和比较的可比较类,但是当我尝试将值打印出来时,它给了我内存地址。我知道这可以通过toString 方法解决,但我不确定如何去做。这是我的代码:

import java.io.*;
import java.util.*;
import java.lang.Object;

public class StreetAddress implements Comparable<StreetAddress>
{
    protected int num;
    protected String stName;

    public StreetAddress(int n, String s){
    num = n;
    stName = s;
    }

    public int getNum(){
        // returns the street number
        return num;
    }

    public String getName(){
        // returns the street name
        return stName;
    }

    public int compareTo(StreetAddress street) throws ClassCastException{
        // exception prevents crash if an address is not compared to
        // another address
        int compareName = this.stName.compareTo(street.stName);
        int compareNum = this.num - street.num;
        if (compareName < 0){
            // first address comes after compared address
            return compareName;
        }

        else if (compareName == 0){ // same address name
            if (compareNum < 0){
                System.out.println(this.num + "" + this.stName + ", " + street.num + "" + street.stName);
                return compareName;
            }
            else{
                System.out.println("");
                return compareName;
            }
        }

        else{
            // first address comes before compared address
            return compareName;
        }

        }

    public static void main(String args[])
    {
    StreetAddress add1 = new StreetAddress(7864, "cartesian road");
    StreetAddress add2 = new StreetAddress(5141, "cartesian road");
    StreetAddress add3 = new StreetAddress(1664, "n kings street");
    StreetAddress add4 = new StreetAddress(9753, "pioneer parkway");
    StreetAddress add5 = new StreetAddress(3643, "starry avenue");
    add1.compareTo(add2);
    add4.compareTo(add1);
    add3.compareTo(add3);
    add2.compareTo(add5);
    }
}

【问题讨论】:

  • // // exception prevents crash 不,它没有。

标签: java string tostring


【解决方案1】:

简单:

@Override
public String toString() {
    return String.format("%d %s", num, stName);
}

@Override 注释不是必需的,但它绝对是一个好习惯。请注意,String.format("%d %s", num, stName) 会生成"[num] [street]" 形式的字符串。如果您想在将来进行更改,我发现String.format 提供了比字符串连接更大的灵活性。

【讨论】:

  • 不应该还包括街道号码,而不仅仅是街道名称吗?
  • @templatetypedef 是的 - 我添加了它
  • @A.R.S.那么“%d %s”究竟是什么意思呢?我以前没见过用过。
  • @AmpageGrietu %d 被 int 参数 (num) 替换,%s 被字符串参数 (stName) 替换。您可以阅读有关格式字符串语法的更多信息here
【解决方案2】:
@Override
public String toString() {
   return "StreetAddress: num= " + num + ", stName=" + stName ;
}

【讨论】:

    猜你喜欢
    • 2013-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 1970-01-01
    相关资源
    最近更新 更多