你能在main方法中编写一个方法吗?例如,我找到了这段代码:
public class TestMax {
public static void main(String[] args) {
int i = 5;
int j = 2;
int k = max(i, j);
System.out.println("The maximum between is " + k);
}
public static int max(int num1, int num2) {
int result;
if (num1 > num2)
result = num1;
else
result = num2;
return result;
}
}
方法max可以在main方法中编码吗?
答案 0 :(得分:7)
不,你不能在另一个方法中声明一个方法。
如果仔细查看您提供的代码,只是格式错误,main
方法在声明max
方法之前结束。
答案 1 :(得分:6)
当Java 8出现时,Closure / Lambda功能应该使它能够在main方法中定义max方法。在此之前,您只能在特殊情况下在main方法中定义方法。
碰巧,你的问题确实属于特殊情况。有一个接口(Comparable),它封装了比较两个相同类型的东西的逻辑。因此,代码可以重写如下:
public class TestMax {
public static void main(String[] args) {
int i = 5;
int j = 2;
Comparator<Integer> compare = new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
// Because Integer already implements the method Comparable,
// This could be changed to "return o1.compareTo(o2);"
return o1 - o2;
}
};
// Note that this will autobox your ints to Integers.
int k = compare.compare(i, j) > 0 ? i : j;
System.out.println("The maximum between is " + k);
}
}
这只能起作用,因为比较器接口已存在于标准Java发行版中。通过使用库可以使代码更好。如果我正在编写此代码,我会将Google Guava添加到我的类路径中。然后我可以写下面的内容:
public class TestMax {
public static void main(String[] args) {
int i = 5;
int j = 2;
// The 'natural' ordering means use the compareTo method that is defined on Integer.
int k = Ordering.<Integer>natural().max(i, j);
System.out.println("The maximum between is " + k);
}
}
我怀疑你的问题更多的是关于Java语言的能力,而不是与订购号码(和其他东西)有关的标准做法。所以这可能没有用,但我想我会分享以防万一。
答案 2 :(得分:1)
如果要使用它,请在此方案中将其设置为static
并将其放在类中但不在main方法之外(就像在代码中一样)。然后,您可以在main()
内调用它。
答案 3 :(得分:1)
你在Java中的其他方法中使用cannot directly define methods
(也是主方法)。
You should write the method in the same class as main.
注意:您可以使用其他方法中的方法声明一个类
答案 4 :(得分:1)
如果格式正确,您会注意到max
方法与main
方法在同一个类中,但它不是main
方法。
答案 5 :(得分:1)
是,这可以通过 lembda 表达式实现: 为此你应该至少使用 java 8
import java.util.function.BiFunction;
public class TestMax {
public static void main(String[] args) {
BiFunction<Integer, Integer, Integer> max = (a,b)-> a>b ? a : b;
//now you can call method
int i = 5;
int j = 2;
int k = max.apply(i, j);
System.out.println("The maximum between is " + k);
}
}
BiFunction是一个功能界面 java编译器在内部将lambda表达式代码转换为实现BiFunction接口的 anonymouse类,并覆盖包含代码的apply()方法
内部(编译器考虑)代码是:
BiFunction<Integer, Integer, Integer> max = new BiFunction<Integer, Integer, Integer>(){
public Integer apply(Integer a, Integer b){
return a>b ? a : b; //your code
}
}
答案 6 :(得分:1)
不。不能直接在Java方法中定义方法。除特殊条件外,例如内置类中的预声明方法。 最好的方法是在同一个类中定义方法,当然也要称呼它。