【问题标题】:Setting the counter to 0, then adding counters with methods are keeping it 0将计数器设置为 0,然后使用方法添加计数器使其保持为 0
【发布时间】:2015-01-11 08:03:25
【问题描述】:

我有一个猜测程序,我正在尝试添加一个计数器。在粗体部分我有一个柜台。当您猜错时,它会在计数器上加 1。但是当它打印它时,无论如何它只是打印为0。

                    public static void firstGame(String Answer, String userGuess, int counter)
                {
                    userInput = new Scanner(System.in);

                    boolean playgame = true;

                    while(playgame == true)
                    {
                    Answer = "Sam";

                    lnPrint(" ");
                    lnPrint("Take a guess at my name! It starts with an S...");
                    sPrint(":");
                    userGuess = userInput.next();

                    if(userGuess.equalsIgnoreCase(Answer))
                        {
                            lnPrint("You got it! Its " + Answer);
                            lnPrint(" ");
                            break;
                        }

                    else if(userGuess != Answer)
                        {
                            lnPrint("Good guess, keep trying!");
                            counter++;
                        }

                    }
                }

这是我与柜台的游戏方法。

public static void main(String[] args)
    {
        Scanner userInput = new Scanner(System.in);

        int Start, counter = 0;
        String Answer, userGuess, middleAnswer, middleUserGuess;
        Answer = null;
        userGuess = null;
        middleAnswer = null;
        middleUserGuess = null;
        Start = 0;

            while(Start !=2)
            {

            lnPrint("(1) Start Game");
            lnPrint("(2) Exit");
            sPrint(":");
            Start = userInput.nextInt();

                if(Start == 1)
                    {
                        firstGame(userGuess, Answer, counter);
                        lnPrint("Now, how about my middle name?");
                        nlnPrint(counter);
                        middleGame(middleAnswer, middleUserGuess);

                    }

这是打印它的代码

【问题讨论】:

    标签: java methods count counter zero


    【解决方案1】:

    这看起来像是一个常见的按值/引用传递问题。当使用counter 作为firstGame 的参数时,在firstGame 方法中使用的是counter,而不是传递引用counter 变量;您可以在此处阅读相关内容,例如:http://www.javacoffeebreak.com/faq/faq0066.html

    有一些方法可以通过引用方法来传递整数(参见Java : Best way to pass int by reference),但在这种情况下,我认为您应该简单地将counter 声明为全局变量。

    【讨论】:

    • 我尝试将其设为全局,但现在它给了我一个错误消息,“参数计数器的非法修饰符;只允许使用 final”我将全局 int 放在 main 方法中。
    【解决方案2】:

    你之前有没有初始化过“计数器”? 这是一个有效的例子:

    $.Guess = function() {
        var parent = this;
        var counter = 0;
    
        this.guess = function(val) {
            if ( val != 5 ) {
                parent.guessedWrong();
            }
        }
        this.guessedWrong = function() {
            counter++;
        }
        this.guessed = function() {
            return counter;
        }
        this.resetCounter = function() {
            counter = 0;
        }
    }
    
    
    var game = new $.Guess();
    game.guess(1);
    game.guess(2);
    alert( game.guessed() );
    
    game.guess(3);
    game.guess(4);
    game.guess(5);
    // Alerts 4, because there is 5 guesses and one of them (the one with value 5) is correct
    alert( game.guessed() );
    // Reset counter to 0
    game.resetCounter();
    
    game.guess(6);
    game.guess(7);
    game.guess(8);
    alert( game.guessed() );
    

    ..上面的代码可以在这里测试:http://jsfiddle.net/jcpjr9dc/

    【讨论】:

    • 我已经在 main 方法中启动了计数器。而且我不确定您的代码的含义或作用。有没有一种方法可以在我的代码中使用它而无需全部更改?
    • 现在我更关注你的代码,看起来像它的Java?我的不好,我之前没有注意到它,快速浏览了一下并认为它是javascript。但我仍然认为我的示例是有效的,无论使用哪种语言(如果我错了,请纠正我)。
    • 是的,它是 Java。但是那个代码不是我要找的东西。我需要知道为什么 counter++;在一种方法中,主要方法不起作用。我也在 main 方法中将它初始化为 0。
    • 好吧,很抱歉我帮不了你,我没有使用 Java 的经验:/ 一个热门提示:你可以添加标签“java” :)
    猜你喜欢
    • 2021-06-15
    • 2020-10-28
    • 1970-01-01
    • 1970-01-01
    • 2012-02-18
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多