Java:无法从静态上下文错误中引用非静态变量值

时间:2014-07-30 18:53:54

标签: java static

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

}

2 个答案:

答案 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)

的方法时