繁体   English   中英

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

[英]How to invoke method in another class and return value from it in java?

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

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。 我想知道我正在做的过程是否称为重载方法?

System.out.println返回void 你的“calculate”方法返回int

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

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

PS:你似乎没有在那里重载任何方法。

在你下面的课程中

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来帮助您更好地调试编译错误和运行时错误。

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

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

所以你的calculate方法在返回类型为int时不返回任何空格。

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

只有这不起作用

System.out.println(num);

return num;

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

以下是一些评论:

  • 在这种情况下,编译器消息非常清楚。 正如Mena所指出的, System.Out.Println()是一个不返回任何内容的函数( void )。 但是你的calculate函数应该返回一个int

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

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

可能成为:

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

  • 没有default情况的switch语句很糟糕。 在这种情况下,直接从交换机返回一个值是可以接受的,但是构造switch语句的“正常”方式使用break 请参阅oracle教程

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

  • 您的代码中没有重载。 您可能希望看一下覆盖方式: 重载与覆盖

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM