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