【问题标题】:creating a custom class! Java创建一个自定义类!爪哇
【发布时间】:2016-07-21 20:09:53
【问题描述】:

我是 Java 新手,正在处理一项任务。我应该创建自己的类“Cylinder”并从中调用方法,以便能够打印出半径和高度,然后对其进行更改并再次打印出来。我让它打印圆柱体 1 和圆柱体 1.setRadius/setHeight 的设定值..我的问题是我必须让它打印像圆柱半径:和高度:......但是当它打印时我得到的只是 3.04.0或任何设置...我花了很长时间试图弄清楚这一点,请任何帮助表示感谢!

public class Funtimes{

  public static void main(String[] args){
    Cylinder cylinder1= new Cylinder(1,2);
    System.out.println(cylinder1);

    cylinder1.setRadius(3);
    cylinder1.setHeight(4);
    System.out.println(cylinder1);
  }}

class Cylinder
{
  private double radius, height, area, volume;

  public Cylinder(double height, double radius){
    this.radius = radius;
    this.height=height;
  }

  public double getRadius() {
    return radius;
  }

  public double getHeight() {
    return height;
  }

  public double getArea() {
    double area = (2 * Math.PI * radius * height) + (2 * Math.PI * Math.pow(radius, 2));
    return area;
  }

  public void setRadius(double r) {
    radius = r;
  }

  public void setHeight(double h) {
    height = h;
  }

  public double calcVolume() {
    double volume = Math.PI * Math.pow(radius, 2) * height;
    return volume;
  }

  public String toString (){
    StringBuilder StBuild = new StringBuilder();
    StBuild.append(radius).append(height);
    return StBuild.toString();        
  }

  public static void main(String[] args) {
    Cylinder cylinder1 = new Cylinder(5, 5);
    System.out.println(cylinder1);
  }

}

【问题讨论】:

  • 它到底打印了什么,你希望它打印什么?
  • 好吧,除了将半径和高度附加到字符串生成器之外,还要附加要打印的文本:append("radius : ")。还请了解 Java 命名约定,并尊重它们。变量以小写字母开头。而且体积和面积不应该被声明为字段。
  • 不要在标题中添加已解决,而是接受答案
  • toString method的可能重复

标签: java class tostring setvalue


【解决方案1】:

使用StBuild.append("Radius:").append(radius).append("Height:").append(height)

【讨论】:

    【解决方案2】:

    修改你的toString()

    public String toString () {
        return String.format("Radius: %s Height: %s", radius, height);       
    }
    

    【讨论】:

      【解决方案3】:

      如下编辑你的 toString 方法:

      public String toString (){
          StringBuilder stBuild = new StringBuilder();
          stBuild.append("Cylinder Radius:");
          stBuild.append(radius);
          stBuild.append(" and Height:");
          stBuild.append(height);
          return StBuild.toString();        
      }
      

      【讨论】:

        【解决方案4】:

        你可以把toString方法改成这样的

           public String toString(){
              return "Cylinder Radius" + this.radius + " Height" + this.height;
           }
        

        在您的情况下,您将半径和高度值一起附加到一个字符串中,这就是您得到响应的原因。

        【讨论】:

          【解决方案5】:
          StBuild.append("Radius: ").append(radius);
          StBuild.append("Height: ").append(height);
          

          【讨论】:

            【解决方案6】:

            您可以使用String.format(String, Object...) 生成格式化的String 一行1 喜欢

            @Override
            public String toString() {
                return String.format("Cylinder Radius: %.2f Height: %0.2f", radius, height);
            }
            

            你可以用你的StringBuilder 方法做类似的事情(但它有点难以阅读,IMO 所以我不会让它成为一个单一的衬里)。类似的,

            @Override
            public String toString() {
                StringBuilder StBuild = new StringBuilder();
                StBuild.append("Cylinder Radius: ").append(radius)
                        .append(" Height: ").append(height);
                return StBuild.toString();
            }
            

            1我建议您始终使用 Override 注释,当您的方法打算覆盖超类中的某些内容(但不会)时,它可以为您节省数小时的挫败感。

            【讨论】: