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);
一样创建
我是 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);