为了账号安全,请及时绑定邮箱和手机立即绑定

Java,在方法内部,无法将双精度数转换为字符串

Java,在方法内部,无法将双精度数转换为字符串

白猪掌柜的 2023-07-28 16:02:37
我对 Java 很陌生,所以如果这是一个简单的错误,我深表歉意。我有一个 java 类,它被赋予一个 double 值,并且必须使用一个方法将其作为字符串返回。我得到不同的结果。我尝试在 get 方法中合并一个字符串转换器。我尝试使用另一种方法,专门用于转换处理。我试过了Double.parsedouble(),,valueOf()。toString()一般来说,这些在主类中工作,但我的作业指定它必须在方法中。//其他几个方法,默认构造函数省略。public class GuitarFubar {    private double guitarLength;    }    public GuitarFubar(double guitarLength){        this.guitarLength = guitarLength;    }    public double getGuitarLen(double guitarLength){        return guitarLength;    }    // also tried its own method.. it will only return 0.0..    public String sillyString(){        String str0 = "" + guitarLength;        return str0;    }}--------主类-----public class GuitarMClass {    public static void main(String[] args) {        GuitarFubar output2 = new GuitarFubar();        String mkShft2 = ("" + output2.getGuitarLen(12.2));         GuitarFubar bString = new GuitarFubar();        System.out.println(bString.sillyString());   }}实际结果“错误:无法将双精度数转换为字符串”或打印结果为 0.0(本应为 12.2))
查看完整描述

4 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

Java 类Double包含一个静态方法,可以执行您要查找的操作。

Double.toString(doubleValue)

您可以通过几种不同的方式解决您的问题,具体取决于您希望GuitarFubar类具有的功能:

public class GuitarMClass {


    public static void main(String[] args) {


        // OPTION 1

        GuitarFubar output2 = new GuitarFubar();

        output2.setGuitarLength(12.2);

        String mkShft2 = output2.getGuitarLengthAsString();

        System.out.println(mkShft2);


        // OPTION 2

        GuitarFubar bString = new GuitarFubar();

        bString.setGuitarLength(12.2);  //your example code never sets the value of guitarLength, which is why one of your outputs is '0.0'

        System.out.println(Double.toString(bString.getGuitarLength()));


        // OPTION 3

        GuitarFubar guitarFubar = new GuitarFubar(12.2); // actually use the guitar length when constructing a new instance

        System.out.println(Double.toString(guitarFubar.getGuitarLength()));

   }


   public class GuitarFubar {

        private double guitarLength;


        // make sure you have a no-args constructor if that's how you are going to instantiate your class

        public GuitarFubar(){

        }


        public GuitarFubar(double guitarLength){

            this.guitarLength = guitarLength;

        }


        // make sure you have a proper 'getter'

        public double getGuitarLength(){

            return this.guitarLength;

        }


        // make sure you have a proper 'setter'

        public void setGuitarLength(double guitarLength){

            this.guitarLength = guitarLength;

        }


        // alternative to sillyString method if you want this functionality within your GuitarFubar class 

        // (although not required since a caller of getGuitarLength() can handle String conversion)

        public String getGuitarLengthAsString() {

            return Double.toString(this.guitarLength);

        }


    }


}


查看完整回答
反对 回复 2023-07-28
?
呼如林

TA贡献1798条经验 获得超3个赞

这是你困惑的根源:


public double getGuitarLen(double guitarLength){

    return guitarLength;

}

那不是吸气剂。它也不是二传手。这是一个分流器,它只是准确地返回它所得到的值,而不将值存储在任何地方。


GuitarFubar output2 = new GuitarFubar();

这不会编译,因为你的构造函数需要一个参数。即使你给了它,getGuitarLen也不会归还,因为它仍然是一种分流。如果你更改getGuitarLen为


public double getGuitarLen(){

    return this.guitarLength;

}

它仍然不起作用,因为你从未声明过


double guitarLength;

作为GuitarFubar国家的一部分。


进行这些更改,它应该会起作用。


并不是说你真的需要这样做,因为表达式:


"" + doubleToString;

将被转换成字符串。如果你在方法内部并不重要。doubleToString是否已声明并赋予值确实很重要。任何方法、构造函数或初始值设定项都可以实现此目的。


查看完整回答
反对 回复 2023-07-28
?
catspeake

TA贡献1111条经验 获得超0个赞

尽量保持简单:


我们有一个只有一个字段的类


public class GuitarFubar {

    private double length;


    // next code snippets go here!

}

设置(初始)长度的两个选项:构造函数和方法(setter):


public GuitarFubar(double length) {

    this.length = length;

}


public void setLength(double length) {

    this.length = length;

}

以及一种获取长度的方法:


public double getLength() {

    return this.length;

}

最后是获取字符串长度的方法:


public String getLengthAsString() {

    return Double.toString(this.length);

}

但问题没有解决 - 需要设置长度,默认值为零。在调用(主)方法时


GuitarFubar guitar = new GuitarFubar(12.2);

System.out.println(guitar.getLengthAsString());

或者,如果没有实现构造函数,则使用 setter:


GuitarFubar guitar = new GuitarFubar();

guitar.setLength(12.2);

System.out.println(guitar.getLengthAsString());

如果我们希望长度不可变,我们将其声明为final(不得更改),在构造函数中设置它并且不实现设置器:


public class GuitarFubar {

    private final double length;


    public GuitarFubar(double length) {

        this.length = length;

    }


    public double getLength() {

        return this.length;

    }


    public String getLengthAsString() {

        return Double.toString(this.length);

    }

}

必须像这样创建new GuitarFubar(12.2);


查看完整回答
反对 回复 2023-07-28
?
烙印99

TA贡献1829条经验 获得超13个赞

改变你的方法


public String sillyString(){

    String str0 = "" + guitarLength;

    return str0;

}

到:


public String sillyString(double doubleToString){

    return  "" + doubleToString;

}

并从 main 中调用它,例如:


System.out.println(bString.sillyString(213.3d));


查看完整回答
反对 回复 2023-07-28
  • 4 回答
  • 0 关注
  • 147 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信