我正在为谷歌科学博览会开展一个项目。我正在制作一个带有两个数字(条形码和序列号)的应用程序,并使用各种算法将它们改为两个不同的数字(即像Fisher-Yates shuffle一样)。 我的代码看起来像这样:
enter code here public static void main(String[] args) {
reverseNum b = new reverseNum();
addOne c= new addOne();
plusThree f= new plusThree();
plusNine i = new plusNine();
plusTwo l = new plusTwo();
minusTwo p = new minusTwo();
plusOne r= new plusOne();
plusFour u= new plusFour();
threeTwo x= new threeTwo();
intoTwo ab= new intoTwo();
plusFive bc = new plusFive();
intoSix cd= new intoSix();
twoOne de = new twoOne() ;
plusSeven ef= new plusSeven();
plusEight fg= new plusEight();
minOne gh = new minOne();
intoSeven hi = new intoSeven();
intoEight ij = new intoEight();
intoNine jk = new intoNine();
intOne kl = new intOne();
intoFour lm = new intoFour();
// TODO code application logic here
Scanner user_input = new Scanner( System.in );
String a ;
System.out.println("Enter the Barcode:");
a = user_input.next();
System.out.println("Encrypted Barcode:"+ blah.randomMethod(a));
//Random method from the above given methods should modify this.
String z;
System.out.println("Enter the Serial Number:");
z= user_input.next();
System.out.println("Encrypted Serial Number:" + blah.randomMethod(z) );
//Random method from the above given methods should modify this
}
}
我的主要目标是使用上述方法(算法)修改两个给定的数字。我希望每次用户运行程序时,给定列表中的随机方法修改给定的数字。我还需要把这一切都放到GUI中。请帮忙。
答案 0 :(得分:2)
使用策略模式。让每个算法实现该策略的版本。然后使用工厂使用您想要的任何机制获得随机策略实现。无需将输入组合到单个对象中。
答案 1 :(得分:2)
我同意 jgitter 关于策略和工厂模式。
我发布了一个例子。
public interface Algorithm {
public String execute(String input);
}
public class SomeAlgorithm implements Algorithm {
public String execute(String input) {
///... Algorithm here
}
}
public class AnotherAlgorithm implements Algorithm {
public String execute(String input) {
///... Algorithm here
}
}
public abstract class AlgorithmFactory {
public static Algorithm createRandomAlgorithm() {
//Create a new Random object
Random randomEngine = new Random();
//Retrieve a number from 0 (inclusive) to 2 (exclusive)
int randomNumber = randomEngine.nextInt(2);
//Select which implementation to use according to the random number
switch(randomNumber) {
case 0: return new SomeAlgorithm();
case 1: return new AnotherAlgorithm();
}
//This will most likely never get called, but a return value is mandatory
return null;
}
}
然后,您将检索并执行如下算法:
String encryption = AlgorithmFactory.createRandomAlgorithm().execute(input);
请注意,工厂是抽象的,并且有一个静态的方法,这不是我接近这个的方法,但它会很好地帮助你解决问题。