Java中随机函数的选择
我想随机选择一个函数。这是以下代码:Java中随机函数的选择,java,Java,我想随机选择一个函数。这是以下代码: public class Thank_you_five implements RandomInterface { public static void Thankyou_five(){...} } public class Thank_you_four implements RandomInterface { public static void Thankyou_four(){...} } public class Thank_you_three
public class Thank_you_five implements RandomInterface
{
public static void Thankyou_five(){...}
}
public class Thank_you_four implements RandomInterface
{
public static void Thankyou_four(){...}
}
public class Thank_you_three implements RandomInterface
{
public static void Thankyou_three(){...}
}
public interface RandomInterface
{
public static void Thankyou_five();
public static void Thankyou_four();
public static void Thankyou_three();
}
所以我的目标是随机选择一个函数,就像python中的we random.choose()和其中的一些函数一样,我想用Java实现同样的效果
请帮忙
谢谢,
Adrija首先,最好在接口中定义一个Abstract方法:
public interface RandomInterface{
void thankYou();
}
然后,您可以创建几个实现:
RandomInterface t1 = () -> System.out.println("thank you 1");
RandomInterface t2 = () -> System.out.println("thank you 2");
RandomInterface t3 = () -> System.out.println("thank you 3");
要获得随机实现,您可以将所有对象添加到数组并生成随机索引:
RandomInterface[] arr = {t1, t2, t3};
int i = new Random().nextInt(arr.length);
arr[i].thankYou();
坦率地说,我更喜欢罗斯兰的建议。但只要你问我,这就是我的想法:
package com.example;
import java.util.Random;
public abstract class RandomFn {
public static RandomFn factory() throws Exception {
int r = new Random().nextInt(3);
switch (r) {
case 0: return new ThankYouOne();
case 1: return new ThankYouTwo();
case 2: return new ThankYouThree();
default : throw new Exception ("ThankYou(" + r +"): unsupported value!");
}
}
public abstract void thankYou();
public static void main(String[] args) {
try {
RandomFn.factory().thankYou();
} catch (Exception e) {
System.out.println(e);
}
}
}
class ThankYouOne extends RandomFn {
public void thankYou() {
System.out.println("Thank you one");
}
}
class ThankYouTwo extends RandomFn {
public void thankYou() {
System.out.println("Thank you two");
}
}
class ThankYouThree extends RandomFn {
public void thankYou() {
System.out.println("Thank you three");
}
}
如果你不喜欢很多课程的想法,那么
public class RandomFn {
public void thankYou () throws Exception {
int r = new Random().nextInt(3);
switch (r) {
case 0:
thankYouOne(); break;
case 1:
thankYouTwo(); break;
case 2:
thankYouThree(); break;
default :
throw new Exception ("ThankYou(" + r +"): unsupported value!");
}
}
private void thankYouOne() { System.out.println("Thank you one"); }
private void thankYouTwo() { System.out.println("Thank you two"); }
private void thankYouThree() { System.out.println("Thank you three"); }
...
接口中的静态方法应该有一个主体,如何使用一个随机生成器,生成一个随机数,如果这个数在一个特定的范围内,则执行一个特定的函数?一些
if
语句应该执行以下操作:生成一个介于0
和2
之间的随机数整数,或者生成您有多少个函数。根据生成的数字和您拥有的函数创建开关。我编辑了问题上面的代码不能也不会编译:当一个类实现一个接口时,它必须实现该接口中的所有方法。正如埃尔文·西拉吉(Ervin Szilagyi)所建议的那样,使用反射是过分的。最好的建议是:有一个方法(可能是静态方法)可以随机调用n个函数中的任意一个。接口可能很有用:但它正好有两种方法:静态的“callRandomFunction()”方法和虚拟的“doSomethingRandom()”方法。如果downvoter能够解释这个答案的错误,我将不胜感激。如果它不能解决问题,我可以编辑或删除它