猿问

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

我对 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))


白猪掌柜的
浏览 148回答 4
4回答

神不在的星期二

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);        }    }}

呼如林

这是你困惑的根源:public double getGuitarLen(double guitarLength){    return guitarLength;}那不是吸气剂。它也不是二传手。这是一个分流器,它只是准确地返回它所得到的值,而不将值存储在任何地方。GuitarFubar output2 = new GuitarFubar();这不会编译,因为你的构造函数需要一个参数。即使你给了它,getGuitarLen也不会归还,因为它仍然是一种分流。如果你更改getGuitarLen为public double getGuitarLen(){    return this.guitarLength;}它仍然不起作用,因为你从未声明过double guitarLength;作为GuitarFubar国家的一部分。进行这些更改,它应该会起作用。并不是说你真的需要这样做,因为表达式:"" + doubleToString;将被转换成字符串。如果你在方法内部并不重要。doubleToString是否已声明并赋予值确实很重要。任何方法、构造函数或初始值设定项都可以实现此目的。

catspeake

尽量保持简单:我们有一个只有一个字段的类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);

烙印99

改变你的方法public String sillyString(){    String str0 = "" + guitarLength;    return str0;}到:public String sillyString(double doubleToString){    return  "" + doubleToString;}并从 main 中调用它,例如:System.out.println(bString.sillyString(213.3d));
随时随地看视频慕课网APP

相关分类

Java
我要回答