Java: на значение нестатической переменной нельзя ссылаться из-за ошибки статического контекста

1

Я пишу код в двух отдельных классах, которые принимают временную шкалу как две отдельные переменные и распечатывают ее, а затем запускают методы преобразования, чтобы получить темпы в других масштабах. Я продолжаю получать значение нестатической переменной ошибки, на которую нельзя ссылаться из статического контекста в области 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{
    }
  }      
  }

для основного метода код находится в отдельном классе следующим образом:

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

}
Показать ещё 4 комментария
Теги:
static

2 ответа

0
Лучший ответ

Когда вы используете Static Modifier в своих методах, эти методы будут существовать независимо от любых экземпляров, созданных для класса. Итак, в вашем классе Температура ваших статических методов:

  • Перед тем, как создать новый экземпляр температуры
  • Существует только одна копия ваших статических методов, независимо от количества экземпляров температуры, которые у вас есть.

Кроме того, я думаю, что вы хотите только температуру как полезность, поэтому конструктор не имеет смысла, потому что конструктор используется только для создания экземпляров

Когда вам нужно использовать методы из Temperature: Temperature.name_method (params)

  • 0
    Это на самом деле отличный момент. Мне предложили использовать конструктор, но, кажется, без этого многое сильно упростит. Спасибо!
0

t - объект, но все ваши методы convertToScale являются статическими. Используйте Temperature.convertToScale(t.value, t.scale)

Также,

t.convertToCelsius();
System.out.println(t);

вероятно, не делает того, что вы ожидаете от этого. Ни один из ваших методов convertToScale является мутатором (они просто печатают материал), поэтому вызов t.convertToCelsius() выводит только то, что делает преобразование, тогда System.out.println(t) будет печатать объект по умолчанию.toString() (который дает вы @0012378 или что-то)

Кроме того, я просто заметил все (5/9) и (9/5) которые у вас есть, что почти наверняка нарушит математику, как указано, из-за того, как работает целочисленное деление. Явно объявить один из них как двойной с 5.0 или 5d

  • 0
    Это отличная идея для основного, но, к сожалению, не решает проблему в других методах
  • 1
    @ user3889083 Какие еще проблемы? Ваш вопрос только спрашивает о «не может относиться к нестатичным ...»
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню