我正在创建一个基于文本的游戏,我有一个为主角制作的课程,因此您可以设置角色名称等。我想弄清楚的是,有什么方法可以将一个mutator(character.setname(input))作为参数传递给另一个方法。当我尝试这样做时,我告诉我不能使用void类型作为方法的参数。当我写出用户输入他们的名字的代码,以及其他一切都是重复的错误检查,所以我想创建我自己的方法,我可以调用,这将错误检查我。如果输入的名称不正确,可以使用setname方法重置名称,但我不能在错误检查方法中直接使用setname,因为它将使用相同的方法检查其他数据输入
这有什么办法吗?
以下是所要求的代码:我的确可能会使问题过于复杂,我对java很新,所以我还在学习。
以下代码是我用来检查用户是否正确输入内容的代码,它接受一个包含用户可以输入的所有可能正确答案的数组,我试图以一种方式设计它我可以使用它进行错误检查,而不仅仅是"是"或"不"语句,getVariable是访问器方法,而setVariable是我试图开始工作的那个,我也试图传递mutator,所以我可以重置错误
public void confirmEntry(String question, String[] options, String getVariable, setVariable) throws InterruptedException
{
boolean correctEntry = false;
System.out.print("Is this correct? ");
for(int i = 0; i < options.length - 1; i++)
{
System.out.print(options[i] + ", ");
}
System.out.print("or ");
System.out.print(options[options.length - 1] + ": ");
input = in.nextLine();
for(int i = 0; i < options.length; i++)
{
if(input.equals(options[i]))
{
correctEntry = true;
System.out.println(correctEntry);
}
}
System.out.println(correctEntry);
while(correctEntry == false)
{
Thread.sleep(2000);
System.out.print("You must enter ");
for(int i = 0; i < options.length - 1; i++)
{
System.out.print("\"" + options[i] + "\", ");
}
System.out.print("or ");
System.out.print("\"" + options[options.length - 1] + "\" to continue: ");
Thread.sleep(2000);
System.out.println();
System.out.println("You chose " + getVariable);
Thread.sleep(2000);
System.out.print("Is this correct? ");
for(int i = 0; i < options.length - 1; i++)
{
System.out.print(options[i] + ", ");
}
System.out.print(" or ");
System.out.print(options[options.length - 1] + ": ");
input = in.nextLine();
for(int i = 0; i < options.length; i++)
{
if(input.equals(options[i]))
{
correctEntry = true;
}
}
}
}
以下代码是您输入有关角色信息的方法中的当前代码。我试图将更多的代码移动到错误检查方法中,这样每次我向用户询问问题,姓名,年龄等时,我只需要调用该方法。
public void characterCreation() throws Exception
{
//create an instance of the class player (your character creation)
Player character = new Player();
//Initial Introduction to the game
System.out.println("Welcome to Stranded!");
Thread.sleep(2000);
System.out.println("Tell us a little about yourself!");
Thread.sleep(2000);
//______________________________________________________________________________________________________________
//SET YOUR CHARACTER'S NAME
String[] yesNo = {"yes", "no"}; //array to feed into confirmEntry method
System.out.print("Enter your character's name: ");
input = in.nextLine(); //asks for input of the name
character.setName(input); //sets name in the player class
System.out.println("You chose " + character.getName()
+ " for your character's name");
Thread.sleep(2000);
confirmEntry("Enter your character's name: ", yesNo, character.getName(), character.setName(input));
while(input.equals("no"))
{
Thread.sleep(2000);
System.out.print("Enter your character's name: "); //prompt to enter name again
input = in.nextLine();
character.setName(input); //sets name in player class
Thread.sleep(2000);
System.out.println("You chose " + character.getName()
+ " for your character's name"); //confirms what user entered for name
Thread.sleep(2000);
confirmEntry("Enter your character's name: ", yesNo, character.getName(), character.setName(input));
}
我试图在SET CHARACTER NAME注释之后将更多代码移动到confirmEntry方法中,但是包含该字符名称的其余代码使用mutator来设置名称。这就是问题所在。我想尝试尽可能多地将代码输入confirmEntry,所以每当我要求用户输入关于他们角色的东西时,我基本上只需要调用该方法。
答案 0 :(得分:0)
如果您使用的是 java 8 ,则可以使用方法参考参数创建方法:
public void functionName(Consumer<String> setter){setter.
accept(string);}
要调用方法,您可以使用:functionName(character::setname);
你可以看到:http://www.informit.com/articles/article.aspx?p=2171751&seqNum=3
答案 1 :(得分:0)
什么是参赛作品?它似乎是用户输入的一些值。
class Entry{
String value;
public Entry(String value){
this.value = value;
}
public boolean confirm(String input){
return value.equals(input);
}
}
如何存储所有条目。
Map<String, Entry> entries = new HashMap<>();
String message = "Enter your character's name: ";
System.out.println(message);
String input = in.nextLine();
entries.put(message, new Entry(input));
现在想要确认。
public void confirmEntries(){
for(String message: entries.keySet()){
System.out.println(message);
System.out.println(entries.get(message) + "yes/no?");
//get some input and update the value. etc.
}
}
另一种方法是创建一个Runnables。
List<Runnable> entryRunnables = new ArrayList<>();
然后,您可以随时添加操作。
Runnable r = ()->{
System.out.println("Enter your players name, yes/no");
String input = in.readLine();
//check input and do stuff.
}
entryRunnables.add(r);
现在检查条目。 (流方法)
entryRunnables.forEach(Runnable::run);
或者
for(Runnable r: entryRunnables){
r.run();
}