以下是我对程序的怀疑:
import java.util.Scanner;
class degrees
{
float faren;
//float cel = (faren-32)*0.55f; doesn work
void conversion()
{
System.out.println("Fahrenheit is "+(faren-32)*0.55f+"Celcius");
//System.out.println("Fahrenheit is "+cel+"Celcius"); doesnt work
}
}
class Problem4
{
public static void main(String args[])
{
degrees deg = new degrees();
System.out.println("Enter the temperature in Fahrenheit");
try(Scanner n1 = new Scanner(System.in))
{
deg.faren = n1.nextFloat();
}
deg.conversion();
}
}
所以我发表评论的两个陈述
float cel = (faren-32)*0.55f;// this one and
System.out.println("Fahrenheit is "+cel+"Celcius");//this one
以上陈述都不起作用。我通过调用对象来分配faren的值,但仍然。谁能解释我为什么?
它只是一个简单的程序,所以请不要纠正错误,如果有的话。我需要弄清楚自己。请帮我解决上述两个声明。
答案 0 :(得分:1)
在faren
获得值之前,您似乎试图将faren
从华氏温度转换为摄氏温度。如果没有给出值,Java会将类变量初始化为0
,因此cel
将被赋予相当于0华氏度的摄氏度。获得-17.6
的原因是(0 - 32) * 0.55f
的结果。
不要使用类变量,而是让conversion
方法以华氏度为参数,在方法中进行数学计算,然后返回摄氏度值。
此外,conversion
并非对目的的描述。您可能希望重命名方法fahrenheitToCelsius
或类似的东西。
为了准确,您应该乘以5.0f/9.0f
而不是0.55f
。
答案 1 :(得分:1)
改为使用:
class degrees
{
float faren = 0;
float cel = 0;
void degrees(float faren)
{
this.faren = faren;
this.cel = (this.faren-32)*5.0f/9.0f;
}
void conversion()
{
//System.out.println("Fahrenheit is "+(this.faren-32)*0.55f+"Celcius");
System.out.println("Fahrenheit is "+this.cel+"Celcius");
}
}
像这样使用:
var deg = new degrees(farheneitValueHere);
deg.conversion();
此float cel = (faren-32)*0.55f;
不起作用,因为在使用表达式定义时(尤其是包含其他属性的表达式),您无法初始化属性。此System.out.println("Fahrenheit is "+cel+"Celcius");
不起作用,因为cel
尚未定义/转换(由第一个原因)。初始化构造函数中的值(如上例所示)