方法内部的Java无法将double转换为字符串

方法内部的Java无法将double转换为字符串,java,string,methods,double,Java,String,Methods,Double,我对Java非常陌生,如果这是一个简单的错误,我很抱歉。我有一个java类,它有一个double,必须使用一个方法将其作为字符串返回。我得到不同的结果 我已经尝试在get方法中合并一个字符串转换器。我尝试使用一种额外的方法,专门用于转换处理。 我试过Double.parsedouble,valueOf,toString。通常,这些函数在主类中工作,但我的赋值指定它必须在方法中 //其他几个方法,默认构造函数省略 public class GuitarFubar { private dou

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

   }
}
实际结果 错误:无法将双精度转换为字符串或 打印值应为12.2时为0.0更改方法

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

从main中调用它,如:

System.out.println(bString.sillyString(213.3d));
Java类包含一个静态方法,该方法将执行您所寻找的操作

Double.toStringdoubleValue 根据您希望GuitarFubar类具有的功能,您可以通过两种不同的方式解决问题:

公共类{ 公共静态无效字符串[]args{ //选择1 GuitarFubar输出2=新的GuitarFubar; 输出2.设置吉他长度12.2; 字符串mkShft2=output2.getGuitarLengthassString; System.out.printlnmkShft2; //选择2 GuitarFubar bString=新的GuitarFubar; bString.setGuitarLength12.2;//示例代码从不设置guitarLength的值,这就是为什么其中一个输出为“0.0” System.out.printlndough.toString.getGuitarLength; //选择3 GuitarFubar GuitarFubar=new GuitarFubar12.2;//在构造新实例时实际使用吉他长度 System.out.printlnDouble.toString UItarfubar.getGuitarLength; } 公共级吉他吧{ 私人双吉他长度; //如果要实例化类,请确保有一个无参数构造函数 公共吉他酒吧{ } 公共吉他双吉他长度{ this.guitarLength=吉他长度; } //确保你有一个合适的“getter” 公共双吉它长度{ 返回这个.guitarLength; } //确保你有一个合适的“setter” 公共无效设置吉他长度双吉他长度{ this.guitarLength=吉他长度; } //如果您希望在GuitarFubar类中使用此功能,可以选择sillyString方法 //尽管不是必需的,因为getGuitarLength的调用方可以处理字符串转换 公共字符串GetGuitarLengthassString{ 返回Double.toStringthis.guitarLength; } } }
这是你困惑的根源:

public double getGuitarLen(double guitarLength){
    return guitarLength;
}
那不是一个好办法。它也不是二传手。这是一个分流器,它只返回它所得到的,而不将值存储在任何地方

GuitarFubar output2 = new GuitarFubar();
这将无法编译,因为构造函数需要参数。即使你给它一支吉他,杰特伦也不会退回,因为它仍然是一支分流器。如果您将getGuitarLen更改为

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

double guitarLength;
作为吉塔富巴州的一部分

做出这些改变,它应该会起作用

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

"" + doubleToString;

将被转换为字符串。不管你是否在一个方法中。如果doubleToString已经声明并给定了一个值,则这并不重要。无论采用哪种方法,方法、构造函数或初始值设定项都可以使其正常工作。

尽量保持简单:

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

public class GuitarFubar {
    private double length;

    // next code snippets go here!
}
设置初始长度的两个选项:构造函数和方法设置器:

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);
}
但问题并没有解决——长度需要设置,默认值为零。在调用main方法时

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

必须像新的GuitarFubar12.2一样创建

您的代码将无法按编写的方式编译。请创建一个演示您的问题的最小程序。请说明这是什么问题;编写实际结果“错误:无法将double转换为字符串”或打印值为0.0(本应为12.2)是很奇怪的,就好像同一代码有时执行其中一个,有时执行另一个。当然,我不想全部抛出,但这里是完整的。我非常感谢您的帮助。虽然调用String.valueOfguitarLength可能更好,但实际转换+吉他长度确实有效。你的问题在别处。你的代码缺少一个无参数构造函数,也没有设置吉他长度的setter。getter方法只是鹦鹉学舌地返回传入的吉他长度;
但是GuitarFubar bString=新的GuitarFubar;使用未显示的无参数构造函数创建GuitarFubar。但根据实际打印的内容,它很可能看起来像public GuitarFubar{}或public GuitarFubar{guitarLength=0.0;},因此它的guitarLength值为0.0。我不知道是什么让你认为它应该打印其他结果,如12.2。没有必要将双精度框变成双精度框
GuitarFubar guitar = new GuitarFubar();
guitar.setLength(12.2);
System.out.println(guitar.getLengthAsString());
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);
    }
}