如何在另一个类中调用方法并在java中返回它的值?

时间:2013-06-15 06:54:41

标签: java class methods

我创建了两个类。在第一个类中,我尝试在另一个类中创建一个方法,以返回一个带有命令的值,以在控制台上输出值。但是我收到一个错误,指出存在不兼容的类型。这是我创建的两个类,我想从中创建一个计算器: 第一堂课

class calc1
{
    public static int num1; //first number variable
    public static int num2; //Second number variable
    public static String op; //Operatior variable
    public static void main(String[] args) //
    {
        num1 = Integer.parseInt(args[0]);
        num2 = Integer.parseInt(args[2]);
        op = args[1];
        calc3.calculate(op); //Calling method from the second class with an arugement.
    }
}

这是第二个:

class calc3
{
    public static int calculate(String ops)
    {
        switch(ops) //I believe that ops stores value from op variable in the first class.
        {
        case "+": 
            {
                int num = calc1.num1 + calc1.num2;
                return (System.out.println(num));
            }

        }
    }
}

以下是我从编译器获取的错误消息:

Desktop$ javac calc1.java
./calc3.java:10: error: incompatible types
        return (System.out.println(num));
                                  ^
 required: int
 found:    void
1 error

PS。我想知道我正在做的过程是否称为重载方法?

4 个答案:

答案 0 :(得分:2)

System.out.println返回void。 您的“计算”方法会返回int

如果您想要打印数字并在方法中返回,则应将代码更改为:

System.out.println(num);
return num;

PS:你似乎没有overloading任何方法。

答案 1 :(得分:0)

在以下课程中

class calc3
{
public static int calculate(String ops)
{
switch(ops) //I believe that ops stores value from op variable in the first class.
{
case "+": 
    {
        int num = calc1.num1 + calc1.num2;
        return (System.out.println(num));
    }

}
}
}

当您应该只返回System.out.println(num)

时,您将返回num

calc3.calculate()期望int为返回类型。

随着您的进步并开始进行大量编码,您可能希望使用Eclipse或NetBeans等IDE来帮助您更好地调试编译错误和运行时错误。

答案 2 :(得分:0)

你需要了解java的某些基本概念,如

System.out.println(num);语句只是打印而不返回任何内容。

因此,当其返回类型为int时,您的calculate方法不返回任何空格。

你需要返回一个也应该在条件语句之外的int值(当然你也可以在条件语句中返回)但是为了满足编译器,应该至少有一个外部条件语句,比如viz。

只有这不起作用

System.out.println(num);

return num;

确保你有一个类似返回声明(return num;)的侧开关块。

答案 3 :(得分:0)

以下是一些评论:

  • 在这种情况下,编译器消息非常清楚。正如梅纳指出的那样,System.Out.Println()returns nothingvoid)的函数。但是,您的calculate函数应返回int

  • 你需要返回一个值,正如其他人所指出的那样

    int num = calc1.num1 + calc1.num2;
    return (System.out.println(num));
    

可能会成为:

    return calc1.num1 + calc1.num2;
  • 是的,我确实省略了System.out.println声明。我认为您可以为此目的使用调试器。

  • 没有switch案例的default语句很糟糕。在这种情况下,直接从交换机返回值是可以接受的,但是构造switch语句的“正常”方式使用break。见the oracle tutorial

  • 类名通常以大写字母开头(Calc1Calc2 ...)。这只是一个惯例。

  • 您的代码中没有重载。您可能希望通过以下方式查看覆盖:overloading vs overwriting