我在2个单独的类中编写一个代码,它将temp作为2个单独的变量并打印出来,然后运行转换方法以获得其他比例的临时值。我一直得到错误非静态变量值不能从我的代码的Temperature.java部分中的静态上下文引用,因为变量在构造函数中是非静态的。整个概念对我来说有点混乱,我喜欢任何关于希望静态和非静态工作的输入,以及如何在没有问题的情况下切换它们。
代码如下:
public class Temperature
{
int value = 50;
String scale = "F";
public Temperature(int value, String scale){
value = value;
scale = scale;
}
public static void value(int value){
int number;
}
public static boolean scale(String scale){
if (scale == "C"){
return true;
}
else if (scale == "F"){
return true;
}
else if (scale == "K"){
return true;
}
else{
return false;
}
}
public static void convertToCelsius(int value, String scale){
if (scale == "F"){
int newValue = (5/9) * (value - 32);
System.out.println("The equivalent tempurature is " + newValue + "C");
}
else if (scale == "K"){
double newValue = value - 273.15;
System.out.println("The equivalent tempurature is " + newValue + "C");
}
else{
}
}
public static void convertToFarenheit(int Value, String scale){
if (scale == "C"){
int newValue = ((9/5) * (value + 32));
System.out.println("The equivalent tempurature is " + newValue + "F");
}
else if (scale == "K"){
int newValue = ((9/5) * (value - 273) + 32);
System.out.println("The equivalent tempurature is " + newValue + "F");
}
else{
}
}
public static void convertToKelvin(int value, String scale){
if (scale == "F"){
int newValue = ((5/9) * (value - 32) + 273);
System.out.println("The equivalent tempurature is " + newValue + "C");
}
if (scale == "C"){
double newValue = (value + 273.15);
System.out.println("The equivalent tempurature is " + newValue + "C");
}
else{
}
}
}
对于main方法,代码在单独的类中,如下所示:
public class UsingTemperature
{
public static void main(String[] args)
{
Temperature t = new Temperature(50, "F");//declaring an object
System.out.println(t);
// Test out conversions:
System.out.println("Test out conversions:");
// F to C
t.convertToCelsius();
System.out.println(t);
// C to F
t.convertToFahrenheit();
System.out.println(t);
// F to K
t.convertToKelvin();
System.out.println(t);
// K to F
t.convertToFahrenheit();
System.out.println(t);
// F to K:
t.convertToKelvin();
System.out.println(t);
// K to C
t.convertToCelsius();
System.out.println(t);
// C to K
t.convertToKelvin();
System.out.println(t);
}
}
答案 0 :(得分:0)
t
是一个对象,但您的所有convertToScale
方法都是静态的。使用Temperature.convertToScale(t.value, t.scale)
另外,
t.convertToCelsius();
System.out.println(t);
可能不会按照您的预期去做。你的convertToScale
方法都不是mutators(它们只是打印东西),所以调用t.convertToCelsius()
只打印出转换的内容,然后System.out.println(t)
将打印默认的object.toString()(给你@ 0012378或其他东西)
另外,我刚刚注意到你拥有的所有(5/9)
和(9/5)
,由于整数除法的工作方式,这几乎肯定会打破给定的数学。明确声明其中一个为5.0或5d的双重
答案 1 :(得分:0)
在方法中使用静态修改器时,这些方法将独立于为类创建的任何实例而存在。 所以在你的班级温度你的静态方法:
此外,我认为你只想将Temperature作为一个实用工具,所以构造函数没有任何意义,因为构造函数只用于创建实例
当您需要使用来自Temperature:Temperature.name_method(params)
的方法时