2014-09-29 2 views
0
class temperature { 
    public double degrees = 0; 
    public boolean isCelcius = false; 

    public double returnDegrees(){ 
     return this.degrees; 
    } 

    public void setTemperature(double temeperatureT, boolean isCelciusT){ 
     this.degrees = temeperatureT; 
     this.isCelcius = isCelciusT; 
    } 

    public void convertToC(){ 
     if (this.isCelcius == false) { 
      this.degrees = (5 * (degrees - 32))/9; 
      this.isCelcius = true; 
     } 
     return; 
    } 

    public void convertToF(){ 
     if (this.isCelcius == true){ 
      this.degrees = ((9 * degrees)/5) + 32; 
      this.isCelcius = false; 
     } 
     return; 
    } 
} 



public static temperature convertStringToTemperature(String tempString){ 
     temperature tempTemp; 
     String split[] = tempString.split(" "); 
     tempTemp.degrees = Double.parseDouble(split[0]) 
     if (split[1] == "F") 
      tempTemp.isCelcius = false; 
     else if(split[1] == "C") 
      tempTemp.isCelcius = true; 
     else{ 
      System.out.println("error determining units"); 
      tempTemp.isCelcius = true; 
     } 

     return tempTemp; 
    } 

Для Код:Как инициализировать переменную, созданную в Java?

>tempTemp.setTemperature(Double.parseDouble(split[0]), true); 

это говорит о том, что переменная tempTemp не может быть инициализирован, хотя это не говорит, это ниже для других видов использования этой переменной. В чем моя проблема?

Спасибо, это мой первый случай создания пользовательского класса в java.

+4

'температура tempTemp = температурой окружающей среды();' – resueman

+2

Обязательный Sidenote - Java именования использовать 'PascalCase' для имен классов. –

+0

Кстати, всегда используйте прописную первую букву при присвоении имени классу. И вы также можете назначить «null», когда вы уверены, что перед использованием поля он инициализируется некоторым оператором, но тогда компилятор счастлив. –

ответ

1

Это потому, что вы создали ссылку на объект без создания самого объекта.

temperature tempTemp = new temperature(); 

Теперь ссылка инициализируется для указания на реальный объект.

1

temperature tempTemp; только создает локальную переменную, но не указывает/не ссылается на какой-либо объект или не получает никакого значения. Перед вызовом метода для объекта вам нужно получить дескриптор (ссылку) для объекта.

temperature tempTemp = new temperature(); 

создает локальную переменную tempTemp и эта переменная относится/указывает на объект температуры и на следующей строке, когда tempString.split(" "); выполняется, метод сплит вызывается на объект, созданный на предыдущей строке.

Обратите внимание, что вы можете даже инициализировать переменную tempTemp с нулевым значением, однако это приведет к исключению NullPointerException в следующей строке.

0

На линии

temperature temptemp; 

вы объявляете переменную temptemp из temperature класса. Однако вы не инициализируете его. Вы инициализировать его, связывая его с объектом, например:

temperature temptemp = new temperature(); 

в коде выше инстанцировании temperature и назначить объект в результате инстанциации к temptemp, который имеет temperature класса. Таким образом, эта строка объявляет вашу переменную и инициализирует ее. Если вы не укажете, что ваш объект, ваше намерение не может быть угадано.

0

Потому что tempTemp не инициализирован внутри convertStringToTemperature способ.

Это встроенная функция, которая имеет язык Java - это гарантирует, что переменная или объекты будут инициализированы до их использования.

В вашем случае tempTemp экземпляр класса temperature является локальным для метода convertStringToTemperature и не инициализирован.

И это верно и для локальных переменных. Попробуйте определить примитивный тип внутри вашего метода без инициализации и выполнить на нем простую математическую операцию. Вы получите то же самое error от компилятора Java.

Кроме того, начинаются Java Название класса/типа с прописной буквой и для чего-либо еще следует за верблюжьим корпусом, как уже указывалось в других ответах.

0
  1. Если ваш метод convertStringToTemperature на одном классе, то вы можете использовать this.setTemperature(), но ваш метод не может быть статичным в этом случае. Поскольку вы не можете использовать «это» в статическом контексте.

  2. Если ваш метод convertStringToTemperature в другом классе вы должны инициализировать объект температуры или вы можете передать объект температуры в параметре, как ниже:

public static temperature convertStringToTemperature(String tempString,temperature tempTemp){

  //temperature tempTemp = new temperature();    
     String split[] = tempString.split(" "); 
     tempTemp.degrees = Double.parseDouble(split[0]); 
     if (split[1] == "F") 
      tempTemp.isCelcius = false; 
     else if(split[1] == "C") 
      tempTemp.isCelcius = true; 
     else{ 
      System.out.println("error determining units"); 
      tempTemp.isCelcius = true; 
     } 

     return tempTemp; 
    } 

1

На линии

temperature tempTemp; 

вы создаете только переменную, но вам все равно нужно ее инициализировать. Для того, чтобы инициализировать его, вам нужно передать его на объект, такой как

temperature tempTemp = new temperature(); 
Смежные вопросы