我创建了两个类。在第一个类中,我尝试在另一个类中创建一个方法,以返回一个带有命令的值,以在控制台上输出值。但是我收到一个错误,指出存在不兼容的类型。这是我创建的两个类,我想从中创建一个计算器: 第一堂课
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。我想知道我正在做的过程是否称为重载方法?
答案 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 nothing(void
)的函数。但是,您的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。
类名通常以大写字母开头(Calc1
,Calc2
...)。这只是一个惯例。
您的代码中没有重载。您可能希望通过以下方式查看覆盖:overloading vs overwriting。