理解方法调用

时间:2014-10-07 23:21:00

标签: java class methods

我在网上发现了一些代码来制作我自己的小项目,因为我想在业余时间学习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");
    }
}
}
}

2 个答案:

答案 0 :(得分:0)

在第53行,您正尝试使用以下调用创建新的Temperature对象:

Temperature tempConv = new Temperature();

Java中的new运算符意味着您正在创建new变量之后指定类型的新Object。

为了创建新Object的新实例,您必须将该类与创建新实例的代码放在同一个包中,或者必须导入该类。

您收到cannot find symbol错误的事实意味着编译器无法找到该类,因此它不在同一个包中而且未导入。

通常,对此的修复是导入类(如果已经创建了它并且它在其他类中)。如果这是您要创建的代码,则可能需要创建Temperature对象。

稍后在您的代码中,您有以下方法:

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

这会创建一个名为Temperature的方法,但不会创建Temperature对象。这可能令人困惑。在Java中,为避免这种混淆,方法名称应始终以lowerCase字母开头,而类应始终以UpperCase开头。

答案 1 :(得分:0)

您收到错误是因为您尝试使用方法名称创建新对象。 new ClassName()用于创建该类的对象。 new关键字与类名一起使用,而不是方法名。要首先调用该方法,您必须创建该类的对象,并且在该对象的帮助下,您可以调用该方法。在你的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.

我只是在这篇文章中作为一个例子。