【问题标题】:avoid initializing variable to make code still working避免初始化变量以使代码仍然有效
【发布时间】:2020-02-12 13:15:01
【问题描述】:

我做了一个猜谜游戏,我首先问: - 有多少玩家想玩这个游戏 - 分配所有玩家 - 开始按顺序猜数字 获胜者是猜对使用随机生成的数字的玩家

代码可以正常工作,但我担心一件事; 我需要先初始化guessingNumber 变量,这看起来有点奇怪,因为我需要输入我知道不会随机生成的任何数字,如果我只声明变量int guessingNumber 我会在这里出错

} while (los != guessingNumber); - guessingNumber is underlined with error :

局部变量guessingNumber可能没有初始化

您知道如何避免初始化 -1 位并使代码仍然有效吗?

public class kopia {

    public static void main(String[] args) {

        Random rand = new Random();
        int los = rand.nextInt(11);
        int numberofPlayers;
        int guessingNumber= -1;

        Scanner scan7 = new Scanner(System.in);
        Scanner scan = new Scanner(System.in);
        Scanner scan2 = new Scanner(System.in);

        do {
            System.out.println(" Type number of players :");
            while (!scan7.hasNextInt()) {
                System.out.println("Sorry, bad data");
                scan7.next();
            }
            numberofPlayers = scan7.nextInt();
        } while (numberofPlayers <= 0);

        String gracze[] = new String[numberofPlayers];
        int liczbaProbGraczy[] = new int[numberofPlayers];

        for (int i = 1; i <= numberofPlayers; i++) { // ++1

            System.out.println("Number of player " + i);
            gracze[i - 1] = scan.nextLine();
        }

        do {

            for (int j = 0; j < gracze.length; j++) {

                System.out.println(" Now guesssing " + gracze[j]);
                System.out.println("Guess number 0 do 10");
                while (!scan2.hasNextInt()) {
                    System.out.println("Cannot recognize this number");
                    scan2.next();
                }
                guessingNumber = scan2.nextInt();

                liczbaProbGraczy[j]++;

                if (guessingNumber == los) {

                    System.out.println("Winner is " + gracze[j] + "\n");

                    for (int c = 0; c < gracze.length; c++) {

                        System.out.println("Number of try's " + gracze[c] + " equals " + liczbaProbGraczy[c]);

                    }

                    break;

                }

            }

        } while (los != guessingNumber);

        scan7.close();
        scan.close();
        scan2.close();

    }
}

【问题讨论】:

  • 就像一个注释,没有理由打开3个不同的Scanner,你可以用同一个来做任何事情,有0区别。
  • 感谢您的意见,我将仅使用 1 台扫描仪进行测试
  • gracze.length 理论上可以为 0,跳过 for 循环并且不询问 guessingNumber。所以必须在这里初始化。
  • @Tomek Młynarski 在函数(方法)中声明变量时,它不会获得默认值,您必须对其进行初始化。如果您在类级别声明变量,例如在您的情况下的函数之外,它将在创建实例时获得默认值。在你的情况下,如果你在函数之外定义它,它将得到 0。
  • @Tomek Młynarski 是的,声明它是静态的guessingNumber;在您的情况下,主要功能之外。

标签: java variables


【解决方案1】:

您不能将某物与未初始化的整数变量进行比较,您需要先对其进行初始化。在您的情况下,您尝试使用比较,同时定义在比较为真时执行的同一块内的整数。

【讨论】:

  • 如果你在一个方法中声明 Integer 它不能被取消初始化......再次例如你说“整数不能为空,因为它是一个原始的”,如果它是你的对象说它会起作用?
  • 我具体回答了他的问题,是否可以使用未初始化的int
  • 也无法使用未初始化的 Integer。非易失性:)。如果他使用整数猜测数;再次代码将无法编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-15
  • 1970-01-01
  • 2015-01-17
  • 2021-10-28
  • 2020-06-30
相关资源
最近更新 更多