2014-10-07 3 views
0

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

TempProg.java:53: error: cannot find symbol 
    Temperature tempConv = new Temperature(); 
    ^
    symbol: class Temperature 
    location: class TempProg 
TempProg.java:53: error: cannot find symbol 
    Temperature tempConv = new Temperature(); 
          ^
    symbol: class Temperature 
    location: class TempProg 
2 errors 



import java.util.Scanner; 

public class TempProg { 


public double currentTemp; 
public double TempF; 
public double TempK; 
public double newTemp; 


public TempProg(double startCurrentTemp, double startTempF, double startTempK, double startnewTemp) 
{ 
    currentTemp = startCurrentTemp; 
    TempF = startTempF; 
    TempK = startTempK; 
    newTemp = startnewTemp; 
} 

private double Temperature(double currentTemp) 
{ 
    currentTemp = 100; 
    return currentTemp; 
} 

public double convertToF(double TempF, double currentTemp) 
{ 
    TempF = ((9 * currentTemp)/5) + 32; 
    return TempF; 
} 

public double convertToK(double TempK, double currentTemp) 
{ 
    TempK = currentTemp + 273; 
    return TempK; 
} 

public double updateTempC(double currentTemp) 
{ 
    newTemp = currentTemp; 
    return currentTemp; 
} 

public double getTemp() 
{ 
    return currentTemp; 
} 

public static void main(String[] args) 
{ 

Scanner scan = new Scanner(System.in); 
Temperature tempConv = new Temperature(); 

int newTemp; 
boolean entryValid; 

final int MIN_TEMP = -273; 
final int MAX_TEMP = 10000; 

System.out.println("\tTemperature converter"); 

char selection = 'x'; 

while (selection != 'q') { 
    System.out.println("\n\tCurrent temperature in degrees C: " + tempConv.getTemp()); 
    System.out.println("\tType f to display temperature in Fahrenheit"); 
    System.out.println("\tType k to display temperature in Kelvin"); 
    System.out.println("\tType c to set a new temperature"); 
    System.out.println("\tType q to quit"); 

    selection = scan.next().charAt(0); 

    switch(selection) { 
     case 'f': 
      System.out.println("\n\t" +tempConv.getTemp()+ " degrees C = "+tempConv.convertToF() +" degrees F"); 
      break; 

     case 'k': 
      System.out.println("\n\t" +tempConv.getTemp()+ " degrees C = "+tempConv.convertToK() +" degrees K"); 
      break; 

     case 'c': 

      entryValid=false; 

      while (!entryValid) { 
       System.out.print("\n\tPlease enter a new temperature: "); 
       newTemp = scan.nextInt(); 

       if (newTemp < MIN_TEMP || newTemp > MAX_TEMP) { 
        System.out.println("\tPlease enter a valid temperature"); 
       } else { 
        entryValid=true; 
        tempConv.updateTempC(newTemp); 
       } 
      } 

      break; 

     case 'q': 
      break; 

     default: 
      System.out.println("\n\tOption " + selection + " not understood"); 
    } 
} 
} 
} 
+0

возможно, его температурный метод. попробуйте изменить этот (в TempProg) на температуру (в нижнем регистре) –

+0

Пробовал, чтобы не было успеха:/ – user3233837

+0

Если класс температуры не в одном пакете, вам нужно импортировать класс. Попробуй это. PS: ошибка означает, что компилятор не смог найти Температурный класс. –

ответ

0

В строке 53, вы пытаетесь создать новый объект Temperature следующего вызова:

Temperature tempConv = new Temperature(); 

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

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

Тот факт, что вы получаете ошибку cannot find symbol, означает, что компилятор не может найти этот класс, чтобы он не был в одном пакете и он не был импортирован.

Обычно исправление для этого заключается в том, чтобы импортировать класс, если он уже создан, и он находится в каком-то другом классе. Если это код, который вы создаете, вам может понадобиться создать объект Temperature.

Позже в своем коде, у вас есть следующий метод:

private double Temperature(double currentTemp) 
{ 
    currentTemp = 100; 
    return currentTemp; 
} 

Это создает метод, называемый Temperature, но это не создает Temperature объекта. Это может сбить с толку. В Java, чтобы избежать этой путаницы, имена методов всегда должны начинаться с букв lowerCase, и классы всегда должны начинаться с UpperCase.

0

Вы получаете ошибку, потому что пытаетесь создать новый объект, используя имя метода. new ClassName() используется для создания объекта этого класса. новое ключевое слово используется с именем класса не с именем метода. Для вызова метода сначала вам необходимо создать объект этого класса, а затем с помощью этого объекта вы можете вызвать метод. В вашем классе TempProg у вас нет конструктора по умолчанию, вы должны написать один конструктор по умолчанию, если вы хотите создать obj для TempProg, не устанавливая значения для вашей переменной-члена, например currentTemp, .....

В вашем случае вы должен делать так:

TempProg() 
{} 

TempProg tempObj = new TempProg(); //than you can create the obj of TempProg like that 
if you want to use parameterized constructor than you have to do like 

TempProg tempObj = new TempPRog(11.2,222,453,455); //whatever vallue you want to set for those variables 

tempObj.Temperature(1122); // call the Temperature method by passing value. 

Я просто положил некоторую ценность в качестве примера в этом посте.

Смежные вопросы