有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

计数器重置为java

我正在做一项学校作业

任务是制作一个随机选择一个数字的程序,用户必须猜测该数字

程序应该保留用户提交输入的次数计数(count var)

我知道计数器被重置的问题来自方法的初始化步骤。。。。如果my count变量的值大于0,是否有方法绕过初始化步骤

我已提交我的代码如下:

    public static void main(String[] args) {

        Random rand = new Random();
        int randomnumber = rand.nextInt(50);

        int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("gok een getal")), randomnumber);

    }

    public static int CallPane(int Value, int rndNumber) {
        int X1;
        X1 = Integer.parseInt(JOptionPane.showInputDialog("gok een getal3"));
        int machine = GuessMachine(X1, rndNumber);
        return X1;
    }


    public static int GuessMachine(int InputNumber, int rndNumber) {
        int value = InputNumber;
        int randomNumber = rndNumber;
        int count=0;


        if (InputNumber == randomNumber) {
            count =+1;
            JOptionPane.showMessageDialog(null, "Goed! Je deed er "+count+" keer " );

            int Response = JOptionPane.showConfirmDialog(null, "Nog een keer spelen?", "Bevestigen",

                   JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);

            if (Response == JOptionPane.NO_OPTION) {
                JOptionPane.showMessageDialog(null, "tot de volgende keer");
            } 
            else if (Response == JOptionPane.YES_OPTION) {
                Random rand = new Random();
                int randomnumber = rand.nextInt(50);
                //callpane
                int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("gok een getal")), randomnumber);

            }

        }
        else if (InputNumber < randomNumber) {
            JOptionPane.showMessageDialog(null, "te weinig");

            int PaneInput = CallPane(value, randomNumber);
            count+=1;
        } 
       else if (InputNumber > randomNumber) {
            // JOptionPane.showMessageDialog(null,"teveel", "information", >INFORMATION_MESSAGE);
           JOptionPane.showMessageDialog(null, "teveel");
        int PaneInput = CallPane(value, randomNumber);
         count=+1;
      }



      return value;

   }

----建议后更新代码---

   public static int count=0;
    public static void main(String[] args) {
        // TODO code application logic here

        Random rand = new Random();
        int randomnumber = rand.nextInt(50);

        int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("gok een getal")), randomnumber);
 JOptionPane.showMessageDialog(null, count);
    }

    public static int CallPane(int Value, int rndNumber) {
        int X1;
        X1 = Integer.parseInt(JOptionPane.showInputDialog("gok een getal3"));
        int machine = GuessMachine(X1, rndNumber);
        return X1;
    }


    public static int GuessMachine(int InputNumber, int rndNumber) {
        int value = InputNumber;
        int randomNumber = rndNumber;



        if (InputNumber == randomNumber) {
            count +=1;
            JOptionPane.showMessageDialog(null, "Goed! Je deed er "+count+" keer " );

            int Response = JOptionPane.showConfirmDialog(null, "Nog een keer spelen?", "Bevestigen",
                    JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);

            if (Response == JOptionPane.NO_OPTION) {
                JOptionPane.showMessageDialog(null, "tot de volgende keer");
            } 
            else if (Response == JOptionPane.YES_OPTION) {
                Random rand = new Random();
                int randomnumber = rand.nextInt(50);
                //callpane
                int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("gok een getal")), randomnumber);

            }

        }
        else if (InputNumber < randomNumber) {
            JOptionPane.showMessageDialog(null, "te weinig");

            int PaneInput = CallPane(value, randomNumber);
            count+=1;
        } 
        else if (InputNumber > randomNumber) {
            // JOptionPane.showMessageDialog(null,"teveel", "information", INFORMATION_MESSAGE);
            JOptionPane.showMessageDialog(null, "teveel");

            int PaneInput = CallPane(value, randomNumber);
            count+=1;
        }

        return value;
    }
}

共 (4) 个答案

  1. # 1 楼答案

    将count变量设为类成员:

    public:
        static int count;
    

    然后在GuessMachine中删除同名的局部变量

  2. # 2 楼答案

    1. 就像shekhar说的,你需要更新代码,使之成为count +=1或者是安全的count = count + 1
    2. 正如CDahn所说,变量count需要是静态的,因为它必须在调用函数时保持值
    3. 每次调用GuessMachine时,计数都会被重置。想一想GuessMachine将如何一次又一次地被呼叫。这意味着您将一次又一次地在函数GuessMachine的顶部执行count = 0。您需要将count = 0的初始化从函数GuessMachine中取出,放入函数main中,因为即使在将其设置为静态之后,如果每次调用GuessMachine时都对其进行初始化,count仍将被重置
    4. 你的代码还有一个问题。在GuessMachine2中的if块中,共有3次,count的增量太晚了。它需要立即递增。事实上,它是同一段代码,所以我们可以将其从if块中取出

      public static int GuessMachine(int InputNumber, int rndNumber) {
          int value = InputNumber;
          int randomNumber = rndNumber;
          count = count + 1;
          if (InputNumber == randomNumber) {
              // count +=1; No need for this statement anymore because we moved it out.
              ...
      

    我建议你逐步完成这个项目。尝试“干运行”,并尝试使用调试器单步执行每一条语句,以了解此代码的控制流。似乎你需要大量的实践来理解如何设计代码和调试它

  3. # 3 楼答案

    1. 您在整个代码中所做的是,您错误地键入了count=+1此外,count变量必须声明为class属性,即public static int count=0

    2. 此外,在调用CallPane()方法后,您正在增加count,因为它永远无法增加

    这就是错误,因此每次都会重置!将此语句替换为count+=1此外,还声明count as static要通过从类中的任何位置递增来更新。会很好用的!我在下面展示了:

    public class JavaApplication5 {
    
    public static int count=0;
    
    public static void main(String[] args) {
    Random rand = new Random();
    int randomnumber = rand.nextInt(50);
    System.out.println("The random number is "+randomnumber);
    int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("Guess a number :- ")), randomnumber);
    }
    
    public static int CallPane(int Value, int rndNumber) {
    int X1;
    X1 = Integer.parseInt(JOptionPane.showInputDialog("Guess a number :- "));
    int machine = GuessMachine(X1, rndNumber);
    return X1;
    }
    
    public static int GuessMachine(int InputNumber, int rndNumber) {
    int value = InputNumber;
    int randomNumber = rndNumber;
    if(InputNumber == randomNumber) {
        count +=1;//error 1
        JOptionPane.showMessageDialog(null, "Well! You did it "+count+" times." );
        int Response = JOptionPane.showConfirmDialog(null, "Play again", "Confirm",
               JOptionPane.YES_NO_OPTION, JOptionPane.QUESTION_MESSAGE);
        if (Response == JOptionPane.NO_OPTION) {
            JOptionPane.showMessageDialog(null, "See you later!");
        } 
        else if (Response == JOptionPane.YES_OPTION) {
            Random rand = new Random();
            int randomnumber = rand.nextInt(50);
            //callpane
            int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("Guess a number :- ")), randomnumber);
        }
    }
        else if (InputNumber < randomNumber) {
        JOptionPane.showMessageDialog(null, "Insufficient!");
        count+=1;//error 2
        int PaneInput = CallPane(value, randomNumber);
    } 
        else if (InputNumber > randomNumber) {
        // JOptionPane.showMessageDialog(null,"teveel", "information", >INFORMATION_MESSAGE);
       JOptionPane.showMessageDialog(null, "Excess!");
       count+=1;//error 3
       int PaneInput = CallPane(value, randomNumber);
       }
      return value;
     }
    
    }
    
  4. # 4 楼答案

    初始化count变量的方法如下所示:我做了一个count变量和两个方法initializeCount()和incrementalCount()。每次我得到一个计数变量时,我都会通过方法incrementalCount()添加1来更新它。当我需要再次初始化变量时,我使用initializeCount()

    public class YourClass {
    
    private static int count = 0;
    
    public static void initializeCount(){
        this.count = 0;
    }
    
    public static int incrementalCount(){
       this.count++;
    }
    
    public static void main(String[] args) {
    
    Random rand = new Random();
    int randomnumber = rand.nextInt(50);
    
    initializeCount(); // for initializing the count variable    
    
    int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("gok een getal")), randomnumber);
    
    }
    
    ...
    
    //Then you can use.
    public static int GuessMachine(int InputNumber, int rndNumber) {
        int value = InputNumber;
        int randomNumber = rndNumber;
        // int count=0;
    
        if (InputNumber == randomNumber) {
    
            JOptionPane.showMessageDialog(null, "Goed! Je deed er "+incrementalCount()+" keer " );
    
            .... 
    
            else if (Response == JOptionPane.YES_OPTION) {
                    Random rand = new Random();
                    int randomnumber = rand.nextInt(50);
    
                    initializeCount(); // for initializing the count variable    
    
                    //callpane
                    int machine = GuessMachine(Integer.parseInt(JOptionPane.showInputDialog("gok een getal")), randomnumber);
    
                }
    
            ...
        }    
    }
    
    ...
    
    }