Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试从字符串(JAVA)访问变量集_Java_Loops_Variables_Switch Statement_Pass By Reference - Fatal编程技术网

尝试从字符串(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
,等等),如果选择了case
2
,我希望
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的第二周,所以不管怎样,有什么帮助,非常感谢!)感谢你的反馈。投票鼓励你提问、帮助和获得帮助。