簡體   English   中英

為什么我的if語句不起作用?

[英]Why doesn't my if statement work?

我在Android Studio中制作了一款應用。

快速摘要:它是一款適合兒童的應用,可在用戶啟動游戲時呈現隨機形狀。 用戶有4個選項可供選擇,其中一個形狀是正確的形狀。 然后,用戶需要將形狀拖放到輪廓中。 下面顯示了一個例子的圖片。

MyGame

問題是,我需要下面4個形狀中的1個來匹配要猜到的形狀。 我有2套18個形狀,第一套是形狀輪廓與? 內。

    int[] outlines = new int[] {R.drawable.outline_0, R.drawable.outline_1, R.drawable.outline_2,
            R.drawable.outline_3, R.drawable.outline_4, R.drawable.outline_5, R.drawable.outline_6,
            R.drawable.outline_7, R.drawable.outline_8, R.drawable.outline_9, R.drawable.outline_10,
            R.drawable.outline_11, R.drawable.outline_12, R.drawable.outline_13, R.drawable.outline_14,
            R.drawable.outline_15, R.drawable.outline_16,R.drawable.outline_17};

第二組是具有面部的實際彩色形狀。

    int[] images = new int[] {R.drawable.img_0, R.drawable.img_1, R.drawable.img_2, R.drawable.img_3, R.drawable.img_4,
    R.drawable.img_5, R.drawable.img_6, R.drawable.img_7, R.drawable.img_8, R.drawable.img_9, R.drawable.img_10,
            R.drawable.img_11, R.drawable.img_12, R.drawable.img_13, R.drawable.img_14, R.drawable.img_15, R.drawable.img_16,
            R.drawable.img_17};

我需要某種功能或陳述,其中底部的4個形狀不能與對應於需要猜測的形狀的1個形狀相同。

注意:outline_0形狀對應img_0,outline_1對應img_1等。

這是此活動的完整代碼。

public class SecondActivity extends AppCompatActivity {

int n;
ImageView shape1, shape2, shape3, shape4, guessShape;
ImageButton exit;
Random rand = new Random();
ImageView[] shapes = new ImageView[4];


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_second);

    shape1 = (ImageView) findViewById(R.id.shape1);
    shape2 = (ImageView) findViewById(R.id.shape2);
    shape3 = (ImageView) findViewById(R.id.shape3);
    shape4 = (ImageView) findViewById(R.id.shape4);
    guessShape = (ImageView) findViewById(R.id.guessShape);
    shapes[0] = shape1;
    shapes[1] = shape2;
    shapes[2] = shape3;
    shapes[3] = shape4;

    //store all the shapes in an array
    int[] images = new int[] {R.drawable.img_0, R.drawable.img_1, R.drawable.img_2, R.drawable.img_3, R.drawable.img_4,
    R.drawable.img_5, R.drawable.img_6, R.drawable.img_7, R.drawable.img_8, R.drawable.img_9, R.drawable.img_10,
            R.drawable.img_11, R.drawable.img_12, R.drawable.img_13, R.drawable.img_14, R.drawable.img_15, R.drawable.img_16,
            R.drawable.img_17};

    int[] outlines = new int[] {R.drawable.outline_0, R.drawable.outline_1, R.drawable.outline_2,
            R.drawable.outline_3, R.drawable.outline_4, R.drawable.outline_5, R.drawable.outline_6,
            R.drawable.outline_7, R.drawable.outline_8, R.drawable.outline_9, R.drawable.outline_10,
            R.drawable.outline_11, R.drawable.outline_12, R.drawable.outline_13, R.drawable.outline_14,
            R.drawable.outline_15, R.drawable.outline_16,R.drawable.outline_17};

    //generate random number between 0 and image.length
   int img1 = (int) Math.round((Math.random() * images.length));
    int img2 = (int) Math.round((Math.random() * images.length));
    int img3 = (int) Math.round((Math.random() * images.length));
    int img4 = (int) Math.round((Math.random() * images.length));
    int outlineID = (int) Math.round((Math.random() * outlines.length));


    //set the image
    guessShape.setBackgroundResource(outlines[outlineID]);
    shape1.setBackgroundResource(images[img1]);
    shape2.setBackgroundResource(images[img2]);
    shape3.setBackgroundResource(images[img3]);
    shape4.setBackgroundResource(images[img4]);

      //set tags for the imageViews
    guessShape.setTag("RandomImage");
    shape1.setTag("Shape1");
    shape2.setTag("Shape2");
    shape3.setTag("Shape3");
    shape4.setTag("Shape4");

    //1 of the 4 image views needs to match outline of the shape that needs to be guessed
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_0)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_0);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_1)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_1);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_2)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_2);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_3)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_3);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_4)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_4);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_5)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_5);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_6)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_6);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_7)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_7);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_8)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_8);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_9)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_9);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_10)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_10);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_11)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_11);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_12)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_12);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_13)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_13);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_14)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_14);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_15)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_15);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_16)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_16);
    }
    if(guessShape.getBackground().getConstantState().equals(R.drawable.outline_17)){
        int random = new Random().nextInt(shapes.length);
        shapes[random].setBackgroundResource(R.drawable.img_17);
    }
}

}

  1. 我在這做錯了什么?
  2. 為什么我的if語句不能用於確保下面的一個隨機形狀對應於要猜測的形狀?
  3. 如何確保底部的4個形狀不同?

解決我的問題的任何提示都會很棒。 謝謝! :)

沒有日志,堆棧跟蹤或輸出很難確切地知道你出錯的地方。 你可以做幾件事來修復這個錯誤,或者可能會阻止另一個錯誤。

設置變量

讓我們將guessShape.getBackground()。getConstantState()保存為變量。 現在我不知道這是什么類型,所以我將它稱為現在的對象。 請使用正確的類型進行更新。

Object currentBackground = guessShape.getBackground().getConstantState();

If-Else If

目前,您正在使用if語句,后跟更多if語句。 這具有每次測試第一個而不是第二個而不是第三個的效果。 相反,我們只想匹配其中的每一個。 這是一個教程

讓我們改變一下:

if(currentBackground.equals(R.drawable.outline_0){
    ...
}
if(currentBackgorund.equals(R.drawable.outline_1){
    ...
} .... 

對此:

if(currentBackground.equals(R.drawable.outline_0){
    ...
} else if(currentBackgorund.equals(R.drawable.outline_1){
    ...
} .... 

其他

現在我們知道它只會匹配一次,我們希望確保找到它。 我們希望在剛剛完成的if-else if語句的末尾捕獲一個else

.... } else if (currentBackground.equals(R.drawable.outline_17){
       ... 
} else {
     // How do you want to handle if the background did not equal any of your images? 
}

調試

現在我們有了一些重大改進。 你需要追蹤它出錯的地方。 一種有用的方法是將內容打印到控制台。 在NetBeans或Eclipse等IDE中有更強大的調試方法,但System.out.println現在很棒!

訣竅是知道你可能出錯的地方。 我看到了幾個“失敗點”。 這些是您出錯的風險較高的區域。 這將有助於檢查該值是否是您認為的那個值。

隨便的數字。 找出數字是什么。 它們是否在正確的范圍內? 這也可以幫助您調試它應該具有的形狀。

  //generate random number between 0 and image.length
int img1 = (int) Math.round((Math.random() * images.length));
int img2 = (int) Math.round((Math.random() * images.length));
int img3 = (int) Math.round((Math.random() * images.length));
int img4 = (int) Math.round((Math.random() * images.length));
int outlineID = (int) Math.round((Math.random() * outlines.length));

// Print these to know what they are, especially outlineID. 

您可以在每個if語句中放置打印件,以查看哪個(包括其他)被捕獲以及原因。 你可以確保它是你想要的那個。

結論

試試這些。 它可能無法捕捉到你的錯誤,但至少你會對你的設置有一個具體的想法,如果它的捕獲。 這將幫助您徹底調試。 如果大綱每次進入正確的if語句,那么我們就知道if語句中存在問題! 調試可能不是第一次發現問題,但確實縮小了范圍。

不匹配的圖像答案

我正在編輯我的答案以包含此內容。 我很確定我發現了你的問題。

在你的代碼中:

//generate random number between 0 and image.length
int img1 = (int) Math.round((Math.random() * images.length));
int img2 = (int) Math.round((Math.random() * images.length));
int img3 = (int) Math.round((Math.random() * images.length));
int img4 = (int) Math.round((Math.random() * images.length));
int outlineID = (int) Math.round((Math.random() * outlines.length));

您正在為圖像創建4個隨機圖像,但隨后您還要為輪廓創建隨機圖像。 這意味着您可以獲得圖像1,2,3,4,然后在輪廓上獲得圖像17的輪廓! 這將在你的if語句中匹配,但它會為你提供17而不是你想要的圖像。

在這種情況下,您希望獲得4個隨機數,然后從您的大綱中選擇。 這是一種方法(注意:有更好/更簡單的方法,但我想確保它在你當前的水平。你很快就會到達那里!)

//generate random number between 0 and image.length
int img1 = (int) Math.round((Math.random() * images.length));
int img2 = (int) Math.round((Math.random() * images.length));
int img3 = (int) Math.round((Math.random() * images.length));
int img4 = (int) Math.round((Math.random() * images.length));

int whichImg = (int) Math.round((Math.random() * 4));

if(whichImg == 1){
   whichImg = img1;
} else if(whichImg == 2){
   whichImg = img2;
} else if(whichImg == 3){
   whichImg = img3;
} else {
   whichImg = img4;
}

int outlineID = outlines[whichImg];

這給你一個隨機數1-4。 然后,您可以使用保存正確的圖像到Im。 然后使用它在輪廓數組中獲得相同的數字。

附注你可能還沒有學過它們,但for loop將是一個很好的方法,可以將代碼從所有這些if語句中刪除到只有一個。 :)如果您不熟悉它們,請在嘗試之前先修復您的錯誤。 是一個教程的鏈接,以防您想要查看它。

暫無
暫無

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

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