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

Java, inside a method, cannot convert double to string

我是 Java 的新手,如果这是一个简单的错误,我深表歉意。我有一个 java class ,它被赋予了一个 double 并且必须使用一种方法将它 return 作为一个字符串。我得到不同的结果。

我试过在 get 方法中加入一个字符串转换器。我尝试使用一种额外的方法,专门用于转换处理。 我试过 Double.parsedouble()valueOf()toString()。通常,这些在主要 class 中工作,但我的作业指定它必须在方法中。

//其他几个方法,省略默认构造函数

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

--------主要Class -----

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

   }
}

实际结果 "Error: Cannot convert double to string" 或 打印是 0.0(应该是 12.2))

改变你的方法

public String sillyString(){
    String str0 = "" + guitarLength;
    return str0;
}

至:

public String sillyString(double doubleToString){
    return  "" + doubleToString;
}

然后从 main 中调用它,例如:

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

Java class Double 包含一个静态方法,可以满足您的需求。

Double.toString(doubleValue)

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

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

那不是 getter。它也不是 setter。这是一个分流器,它只是准确地返回它得到的东西,而不把值存储在任何地方。

GuitarFubar output2 = new GuitarFubar();

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

public double getGuitarLen(){
    return this.guitarLength;
}

它仍然无法工作,因为你从未声明过

double guitarLength;

作为 GuitarFubar 状态的一部分。

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

并不是说您真的需要执行任何操作,因为表达式:

"" + doubleToString;

会变成字符串。如果你在一个方法中并不重要。 doubleToString 是否已声明并赋值确实很重要。任何方式,方法、构造函数或初始值设定项,都会使它正常工作。

尽量保持简单:

我们有一个class只有一个字段

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(不得更改),在构造函数中设置它并且不实现setter:

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

一样创建