簡體   English   中英

某些變量可能尚未初始化? 為什么?

[英]Some variables might not have been initialized? Why?

在這里編程菜鳥。 我正在嘗試編寫一個簡單的程序,以隨機生成一個井字游戲板,顯示X和O,然后確定游戲的結果。 我的問題是,當我將String變量放在if / else語句中的大括號中時,它告訴我它們尚未初始化。 也就是說,它說變量s11,s13,s21,s22,s31,s32和s33尚未初始化。 但是s12和s23已初始化,我唯一能看到的區別是它們不在大括號內。 我在哪里弄錯了? 謝謝。

import java.util.Random;

public class Lab7 {

public static void main(String[] args) {

    int b11, b12, b13, b21, b22, b23, b31, b32, b33;
    int x, o;
    String s11, s12, s13, s21, s22, s23, s31, s32, s33;

    x = 0;
    o = 0;

    Random r = new Random();
    b11 = r.nextInt(3);
    b12 = r.nextInt(3);
    b13 = r.nextInt(3);
    b21 = r.nextInt(3);
    b22 = r.nextInt(3);
    b23 = r.nextInt(3);
    b31 = r.nextInt(3);
    b32 = r.nextInt(3);
    b33 = r.nextInt(3);

    if ((b11 == b12) && (b12 == b13))
        if (b11 == 0)
        {
            o = o+1;
            s11 = "O";
        }
        else if (b11 == 1)
        {
            x = x+1;
            s11 = "X";
        }
        else
            s11 = "";
    if ((b21 == b22) && (b22 == b23))
        if (b21 == 0)
        {
            o = o+1;
            s21 = "O";
        }
        else if (b21 == 1)
        {
            x = x+1;
            s21 = "X";
        }
        else
            s21 = "";
    if ((b31 == b32) && (b32 == b33))
        if (b31 == 0)
        {
            o = o+1;
            s31 = "O";
        }
        else if (b31 == 1)
        {
            x = x+1;
            s31 = "X";
        }
        else
            s31 = "";

    if ((b11 == b21) && (b21 == b31))
        if (b11 == 0)
            o = o+1;
        else if (b11 == 1)
            x = x+1;
    if ((b32 == b22) && (b22 == b12))
        if (b32 == 0)
        {
         o = o+1;
         s32 = "O";
        }
        else if (b32 == 1)
        {
         x = x+1;
         s32 = "X";
        }
        else
            s32 = "";
    if ((b33 == b23) && (b23 == b13))
        if (b33 == 0)
        {
         o = o+1;
         s33 = "O";
        }
        else if (b33 == 1)
        {
          x = x+1;
          s33 = "X";
        }
        else
            s33 = "";

    if ((b22 == b11) && (b22 == b33))
        if (b22 == 0)
        {
         o = o+1;
         s22 = "O";
        }
        else if (b22 == 1)
        {
         x = x+1;
         s22 = "X";
        }
        else
            s22 = "";
    if ((b13 == b22) && (b22 == b31))
        if (b13 == 0)
        {
            o = o+1;
            s13 = "O";
        }
        else if (b13 == 1)
        {
            x = x+1;
            s13 = "X";
        }
        else
            s13 = "";

    if (b12 == 0)
        s12 = "O";
    else if (b12 == 1)
        s12 = "X";
    else
        s12 = "";

    if (b23 == 0)
        s23 = "O";
    else if (b23 == 1)
        s23 = "X";
    else
        s23 = "";

    System.out.println(s11+" "+s12+" "+s13);
    System.out.println(s21+" "+s22+" "+s23);
    System.out.println(s31+" "+s32+" "+s33);
}
}

采用

String s11="", s12="", s13="", s21="", s22="", s23="", s31="", s32="", s33="";

代替

String s11, s12, s13, s21, s22, s23, s31, s32, s33;

這是因為根據代碼所采用的條件,您的變量可能未初始化。

只需在所有變量中放置一個空值,您的代碼就可以了。

但是請記住,使用==運算符比較兩個String對象可能會失敗。

如果if表達式的條件為false,則不會初始化sxx變量。 必須始終對其進行初始化。 您可以簡單地將它們初始化為null或為空的String。

它們已聲明,但不一定初始化。 為了消除該編譯錯誤,必須在代碼的所有可能路徑中對其進行初始化。 最簡單的方法是在聲明時將String值設置為null"" ,即

String s11 = null;

要么

String s11 = "";

編譯器認識到在任何情況下s12s23被賦予一個值。 對於其他人,他沒有,他們需要一個值才能使用。 只需編寫即可初始化每個變量。

String s11="";
String s12="";
...

該錯誤意味着取決於輸入,這些變量可能未初始化。

例如, if ((b13 == b22) && (b22 == b31))可能導致錯誤,並且s13將不會初始化。

String s11 = "", s12 ="" . . . .; String s11 = "", s12 ="" . . . .; 將解決問題,但可能導致邏輯錯誤,您以后可以檢查。 現在就去做。

在嵌套的if語句中,懸空的else屬於內部if,而不是兩個都屬於。 例如,如果b11不等於b12,則不會為s11分配任何內容。 簡單的解決方案是這樣的:

if ((b11 == b12) && (b12 == b13)) {
    if (b11 == 0)
    {
        o = o+1;
        s11 = "O";
    }
    else if (b11 == 1)
    {
        x = x+1;
        s11 = "X";
    } else {
        s11 = "";
    }
}
else {
        s11 = "";
}

另外,如果語句的部分跨越多行,請使用花括號。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM