尝试从字符串(JAVA)访问变量集
鉴于此:尝试从字符串(JAVA)访问变量集,java,loops,variables,switch-statement,pass-by-reference,Java,Loops,Variables,Switch Statement,Pass By Reference,鉴于此: System.out.println("Make a choice : (1), (2), (3)"); //validation is a scanner already declare elsewhere n = validation.nextLine(); switch (n) { case "1": play(1); break; case "2": play(2); break
System.out.println("Make a choice : (1), (2), (3)");
//validation is a scanner already declare elsewhere
n = validation.nextLine();
switch (n) {
case "1":
play(1);
break;
case "2":
play(2);
break;
case "3":
play(3);
break;
default:
System.out.println("invalid");
/?? means I don't know
public static void play(1??){
System.out.print("Did you win? ( (y)es or (n)o ) ");
choice = validation.nextLine();
// if yes ?? ++win1
// if no ?? ++loose1
// I know how to do those loops, I don't know how to make the variable choice fit the current case (++win2 and ++loose2 ans the case 2: for example)
}
我的问题是,对于每种情况,都有一组特定的变量必须递增(例如
casevar1
,win1
,loose1
,等等),如果选择了case2
,我希望play()
方法中的变量现在自动引用正确的变量(例如casevar2
,win2
,loose2
,等等)。那么如何将该信息传递给play()
方法?您可以这样做
public static void play(String s){
System.out.print("Did you win? ( (y)es or (n)o ) ");
choice = validation.nextLine();
if("1".equals(s)) {
if("y".equals(choice)) {
win1 ++;
} else if ("n".equals(choice)) {
loose1 ++;
}
}
if("2".equals(s)) {
if("y".equals(choice)) {
win2 ++;
} else if ("n".equals(choice)) {
loose2 ++;
}
}
}
我不确定我是否完全理解您的问题。我认为部分问题是如何将参数传递给方法。请遵循代码和注释:
//I used 3 integers just for demonstration purpose
int casevar1, win1, loose1,casevar2, win2, loose2;
public static void main(String[]arghs){
System.out.println("Make a choice : (1), (2), (3)");
//validation is a scanner already declare elsewhere
n = validation.nextLine();
switch (n) {
case "1":
//assign values
casevar1 =7; win1 =9; loose1 =0;
play(casevar1, win1, loose1); //pass appropriate variables to play method
break;
case "2":
//assign values
casevar2 =17; win2 =8; loose2 = 4;
play(casevar2, win2, loose2); //pass appropriate variables to play method
break;
case "3":
//do like case "1" / case "2"
break;
default:
System.out.println("invalid");
}//end of switch
}
//an example of a play method recieving 3 integers.
public static void play(int casevar, int win, int loose){
System.out.print("Did you win? ( (y)es or (n)o ) ");
choice = validation.nextLine();
//follow Aku Nour's answer
}
已编辑:添加示例以回答您的问题。
按照@David Wallace的建议,创建扭曲数据的对象:
public class Test {
public static void main(String[]arghs){
public static void main(String[]arghs){
System.out.println("Make a choice : (1), (2), (3)");
//validation is a scanner already declare elsewhere
n = validation.nextLine();
switch (n) {
case "1":
//set an object initialized to casevar =7, win =9, loose = 0
play(new DataObject(7,9, 0));
break;
case "2":
play(new DataObject(17,8, 4));
break;
case "3":
//do like case "1" / case "2"
break;
default:
System.out.println("invalid");
}//end of switch
}
//an example of a play method recieving 3 integers.
public static void play(){
System.out.print("Did you win? ( (y)es or (n)o ) ");
choice = validation.nextLine();
//follow Aku Nour's answer
}
}
//play method receiving data object
public static void play(DataObject data){
System.out.print("Did you win? ( (y)es or (n)o ) ");
choice = validation.nextLine();
//
casevar++;
}
//as David Wallace proposed
//an object containing the 3 parameters you mentioned
class DataObject {
private int casevar; private int win; private int loose;
DataObject(int casevar, int win, int loose){
this.casevar = casevar;
this.win = win;
this.loose = loose;
}
public int getCasevar() {
return casevar;
}
public void setCasevar(int casevar) {
this.casevar = casevar;
}
public int getWin() {
return win;
}
public void setWin(int win) {
this.win = win;
}
public int getLoose() {
return loose;
}
public void setLoose(int loose) {
this.loose = loose;
}
}
}
如果回答不清楚或不够清楚,请不要犹豫。好的,在你们的启发下,我已经回答了我的问题。我是这样做的: 大体上是这样的
case "1":
play(1, nbEasy, easyPos, easyNeg);
break;
case "2":
play(2, nbInter, interPos, interNeg);
break;
case "3":
//same thing with hard
在play()方法中,类似于:
public static void play(int niv, int nbGames, int nbPos, int nbNeg){
++nbGames;
System.out.print("Completed? ( (y)yes or (n)o ) ");
choice = validation.nextLine();
if (choice.equals("y")){
++nbPos;
}
else if (choice.equals("n"))
++nbNeg;
switch (niv){
case 1:
nbEasy=nbGames; easyPos=nbPos; easyNeg=nbNeg;
case 2:
nbInter=nbGames; interPos=nbPos; interNeg=nbNeg;
case 3:
//same thing with hard
}
}
这对我来说非常完美,因为我可以在play()方法的第一部分中添加很多行,处理通过main中的开关传递的内容,最后,我将影响正确变量的新值
我想感谢大家,我是编程新手,也是这个社区的新手,但因为我尝试了很多地方,那个地方看起来是最好的。你们反应灵敏、礼貌、热情,我会阅读所有规则以更好地适应这个地方,准备更多我的问题,当我有能力的时候,我会帮助其他人。这个地方太棒了,我爱你们。也许可以将参数封装到他们自己的类中,并将该类的一些对象放入数组中?最简单的方法是,由于您正在传递1,2,3 in-play方法,您可以简单地检查接收到的参数,并基于此使用一组适当的变量。这不是最好的修饰方法,但这会很有用大卫·华莱士:有什么链接可以帮我吗?我根本不是专家,不知道如何创建和操作类、数组以及……我是编程新手。我知道我必须知道如何做这些事情,我在visual basic方面只有一点经验,也就是说,我什么都不知道……:(您建议什么作为资源?Oracle发布的Java教程非常好。您的第一个示例中的内容更接近于我想要做的……但是,例如,如果我想在play函数中使用它,我可以执行如下操作:++casevar,这将根据开关增加适当的casevar1或casevar2或casevar3。)场景,我是如何做到的?因为这样,它传递变量的值,但似乎只有一种方式…你明白我的意思吗?对不起,如果我不够清楚,这是我第一次来这里,我下次会尝试更好地表达我自己,谢谢!例如,在你的示例中,如果选择了案例1,我在play方法中使用++casevar,结果将是casevar1=8,这是正确的,但如果我再次选择案例1,结果仍然是8,假设是9。希望这样更清楚。在这种情况下,你可以按照@David Wallace的建议装箱一个对象来保存数据。我添加了一个示例。呵呵,我明白了,这很有趣,我会尝试那种类型的东西,我会我回到你身边。但是如果你明白我的意思,我希望能够一批完成。如果我能做一个循环来处理3个案例…(这是我学习JAVA的第二周,所以不管怎样,有什么帮助,非常感谢!)感谢你的反馈。投票鼓励你提问、帮助和获得帮助。