尝试从字符串 (JAVA) 访问一组变量

Trying to access a sets of variable from string (JAVA)

鉴于此:

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)
}

我的问题,对于每种情况,都有一组特定变量必须递增(例如 casevar1win1loose1 等),如果如果选择 2,我希望 play() 方法中的变量现在自动引用适当的变量(例如 casevar2win2loose2 等.).那么如何将该信息传递给 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 和最后通过 switch 传递的内容,我正在影响正确变量的新值。

谢谢大家,我是编程新手,也是这个社区的新手,但是尝试了很多地方,那个地方看起来是最好的。你反应迅速,有礼貌,亲切,我会阅读所有规则以更好地适应这个地方,准备更多我的问题,当我能够时,我会帮助别人。这个地方太棒了,我爱你们。