变量不递增1以等于正确的开关案例方法

时间:2013-08-23 01:40:55

标签: java android imageview switch-statement android-imageview

我知道我做错了什么但是我真的无法弄清楚它是什么,我想要完成的是让switch语句知道如果One ImageView消失了然后让我知道一个消失了。如果两个图像视图消失,则移动到数字2,然后移动到第三个。它适用于第一,但如果在此处编写此代码,则不会移动两个第二个

工作代码

         if (numOne == ImageView.GONE) {
                 Toast.makeText(.......).show()
            }
         if (numTwo == ImageView.GONE + 2) {
                  Toast.makeText(.......).show() 
             }

据我所知,如果第一个语句为真,它将不会流经if语句,这就是为什么我需要一个switch语句以便它遍历所有这些语句

这是我的 SWITCH STATEMENT ** EDITED SWITCH STATEMENT

  public void checkIfCorrect() {
      //checking the game to see if the numbers are correct

             int numOne   = ImageView.GONE;
         int numTwo   = ImageView.GONE + 2;
         int numThree = ImageView.GONE + 3;
         int numFour  = ImageView.GONE + 4;
         int numFive  = ImageView.GONE + 5;
         int numSix   = ImageView.GONE + 6;
         int numSeven = ImageView.GONE + 7;
         int numEight = ImageView.GONE + 8;
         int numNine  = ImageView.GONE + 9;
         int numTen   = ImageView.GONE + 10;

      switch (iGone = 0){ //tried using switch (ImageView.GONE) didn't work
        case 1:
            if (numOne == ImageView.GONE) {
                 Toast.makeText(this, "One Gone Now Put two in the basket", Toast.LENGTH_LONG).show();

            };
        break;
         case 2:
             if (numTwo == ImageView.GONE + 2){
             Toast.makeText(this, "Two Gone Now Put Three in the basket", Toast.LENGTH_LONG).show();
             };
        break; 
         case 3:
             if (numThree == ImageView.GONE + 3) {
                 Toast.makeText(this, "Three Gone Now Put Four in the basket", Toast.LENGTH_LONG).show();

             }
        break;
         case 4: 
             if (numFour == ImageView.GONE + 4){
             Toast.makeText(this, "Four Gone Now Put Five in the basket", Toast.LENGTH_LONG).show();
            }
        break;
         case 5:
             if (numFive == ImageView.GONE + 5) {
             Toast.makeText(this, "Five Gone Now Put two in the basket", Toast.LENGTH_LONG).show();
             }
        break;

      }

我想要完成的是当一个ImageView消失时让我知道并告诉我一个已经消失然后继续从0开始两个并且计数到两个,然后一旦你完成第二个从0开始再次和数到3等......

编辑我想做什么

所以我要做的是数到10.通过删除imageview来做这件事,当imageview到达某个位置它将被删除,我想要我上面发布的这个代码检查删除了多少个imageViews,说如果0在1号被删除,如果1号图像视图被删除我在2号等...请告诉我如何使其更清晰

回答每个人的问题

由于某些原因,它不让我在下面发表评论,比如我有限制或者其他什么,所以我要解释一下 @Shiva,我只希望它在案例一完成之后转到案例一,如果我添加它可以帮助每个人理解

我的某个imageViews的代码

                public boolean onTouch(View v, MotionEvent event) {
                    int x = (int)event.getX();
                  int y = (int)event.getY();

                   switch(event.getActionMasked()) {
                         //touch down so check if finger is on ball
                        case MotionEvent.ACTION_DOWN:
                             //



                        break;

                        case MotionEvent.ACTION_MOVE:
                          //moves the image with the finger
                          if (mImageView16.getX() > 0 && mImageView16.getY() >0) {
                              mImageView16.setX(x + mImageView16.getX());
                              mImageView16.setY(y + mImageView16.getY());

                          }// color square 50 50
                          if (mImageView16.getX() >= 430 && mImageView16.getX()<= 470 && mImageView16.getY() >= 80  && mImageView16.getY() <= 120) { //colorsquare RGBY
                               mImageView16.setVisibility(gone);    

                             } else {

                                 }
                          break;

                         case MotionEvent.ACTION_UP: 
                          // touch drop will do things here after drop
                             checkIfCorrect();



                }

                    return true;
             }       

              }); // one more bracket then end of class
        } // end of class

现在我在删除ImageView后调用检查是否正确,现在当我调用检查是否正确时我想知道类检查是否正确是否正确以及它们所在的数字。如果它们在第一个数字1上,则计入第一个数字。如果他们在2号,那么从0图像视图开始计数到2号我希望这可以解决问题。

@nachokk不会让iGone成为布尔值,因此它与switch语句不兼容吗?我知道这应该是一个评论,但我的评论不起作用?

好的,因为某些原因IE 10上没有评论

现在我添加了这个,它通过从1到5

的case语句递增

ok所以我能够找到我需要的答案的解决方案,我需要在完成命令时循环遍历每个case语句,这里是如何完成的

       public void checkIfCorrect() {
      //checking the game to see if the words are correct

        //counting my numbers and image views gone
         int numOne   = ImageView.GONE;
         int numTwo   = ImageView.GONE + 2;
         int numThree = ImageView.GONE + 3;
         int numFour  = ImageView.GONE + 4;
         int numFive  = ImageView.GONE + 5;
         int numSix   = ImageView.GONE + 6;
         int numSeven = ImageView.GONE + 7;
         int numEight = ImageView.GONE + 8;
         int numNine  = ImageView.GONE + 9;
         int numTen   = ImageView.GONE + 10;

      switch (iGone++){
        case 0:

            if (numOne == ImageView.GONE) {
                 Toast.makeText(this, "One Gone Now Put one more to get to 2", Toast.LENGTH_LONG).show();
                 iGone = 1;
            }
            break;
         case 1:
             if (numTwo == ImageView.GONE + 2){
             Toast.makeText(this, "Two Gone Now Put Three in the basket", Toast.LENGTH_LONG).show();
               iGone = 2;
             }

             break;
         case 2:
             if (numThree == ImageView.GONE + 3) {
                 Toast.makeText(this, "Three Gone Now Put Four in the basket", Toast.LENGTH_LONG).show();
                  iGone = 3;
             }
        break;
         case 3: 
             if (numFour == ImageView.GONE + 4){
             Toast.makeText(this, "Four Gone Now Put Five in the basket", Toast.LENGTH_LONG).show();
              iGone = 4;
             }
        break;
         case 4:
             if (numFive == ImageView.GONE + 5) {
             Toast.makeText(this, "Five Gone Now Put two in the basket", Toast.LENGTH_LONG).show();
             iGone = 5;
             }
        break;

但我试图实现的目标尚未解决

为了更好地解决我的问题,我试图将iGone的值设为= case语句中的一个案例。每当ImageView.getVisibility ==时,我希望iGone增加1;已经过去了= ImageView.GONE;这是实例的代码

**gone code**

   gone = ImageView.GONE;

现在为了让事情更加清晰,每个图像都是一个类image5(),image6(),....最多16个除了与它们相等的变量之外,所有类都完全相同。

现在如果你看上面你会看到image16(),(mImageView16)的触摸类

当它击中setX和setY cordinates时我是怎么做的= iGone + 1这是我试过的

在每个图片类上尝试过此操作

         public boolean onTouch(View v, MotionEvent event) {
            int x = (int)event.getX();
           int y = (int)event.getY();

            switch(event.getActionMasked()) {
                  //touch down so check if finger is on ball
                 case MotionEvent.ACTION_DOWN:
                      //



                 break;

                 case MotionEvent.ACTION_MOVE:
                  //moves the image with the finger
                  if (mImageView5.getX() > 0 && mImageView5.getY() > 0) {
                      mImageView5.setX(x + mImageView5.getX());
                      mImageView5.setY(y + mImageView5.getY());

                  } //color square 1
                if (mImageView5.getX() >= 430 && mImageView5.getX()<= 470 && mImageView5.getY() >= 80 && mImageView5.getY() <= 120) { //colorsquare RGBY
                       mImageView5.setVisibility(gone); 

                     }
                if (mImageView5.getVisibility() == gone) { //colorsquare RGBY
                       ++iGone;  //HERE IS WHERE I TRIED IT
                //I have also tried iGone = iGone + 1; and iGone++; nothing works


                         }
                  break;

                 case MotionEvent.ACTION_UP: 
                  // touch drop will do things here after drop
                     checkIfCorrect();

        }

            return true;
     }       

      });

出于某种原因,每次我知道这个时,iGone = s都是一个不同的数字,因为我在checkifcorrect类中调用了一个toast语句,这是带有switch语句的类

检查如果正确类别

        public void checkIfCorrect() {

      //checking the game to see if the words are correct

         switch (iGone){
        case 1:

                 Toast.makeText(this, "One Gone Now Put one more to get to 2", Toast.LENGTH_LONG).show();
            break;
         case 2:
             Toast.makeText(this, "Two Gone Now Put Three in the basket", Toast.LENGTH_LONG).show();


             break;
         case 3:
                 Toast.makeText(this, "Three Gone Now Put Four in the basket", Toast.LENGTH_LONG).show();

        break;
         case 4: 
             Toast.makeText(this, "Four Gone Now Put Five in the basket", Toast.LENGTH_LONG).show();
        break;
         case 5:
             Toast.makeText(this, "Five Gone Now Put two in the basket", Toast.LENGTH_LONG).show();
        break;

      }

         Toast.makeText(this, "The amount is" + iGone + "Yeah", Toast.LENGTH_LONG).show();

  }

我非常困惑为什么iGone每次都保持不同的数字。

好的,现在的主要问题是。如何让iGone等于图像视图的数量,以便它可以调用正确的switch case语句?

6 个答案:

答案 0 :(得分:1)

ok所以我能够找到我需要的答案的解决方案,我需要在完成命令时循环遍历每个case语句,这里是如何完成的

<强>码

  public boolean onTouch(View v, MotionEvent event) {
                int x = (int)event.getX();
              int y = (int)event.getY();

               switch(event.getActionMasked()) {
                     //touch down so check if finger is on ball
                    case MotionEvent.ACTION_DOWN:
                         //



                    break;

                    case MotionEvent.ACTION_MOVE:
                      //moves the image with the finger
                      if (mImageView25.getX() > 0 && mImageView25.getY() >0) {
                          mImageView25.setX(x + mImageView25.getX());
                          mImageView25.setY(y + mImageView25.getY());

                      }// color square 50 50
                      if (mImageView25.getX() >= 430 && mImageView25.getX()<= 470 && mImageView25.getY() >= 80  && mImageView25.getY() <= 120) { //colorsquare RGBY
                           mImageView25.setVisibility(gone);    

                         } else {

                             }

                      break;

                     case MotionEvent.ACTION_UP: 
                      // touch drop will do things here after drop

                        if (mImageView25.isShown() != true) {//here is what was changed
                              iGone++;//what was changed
                              }  
                         checkIfCorrect();//checking if correct moved after the if statement


            }

                return true;

检查是否正确

        public void checkIfCorrect() {

      //checking the game to see if the words are correct
      iGone = iGone;

         switch (iGone){
        case 1:

                 Toast.makeText(this, "One Gone Now Put one more to get to 2", Toast.LENGTH_LONG).show();

                 break;
         case 3:
             Toast.makeText(this, "Two Gone Now Put Three in the basket", Toast.LENGTH_LONG).show();


             break;
         case 6 :
                 Toast.makeText(this, "Three Gone Now Put Four in the basket", Toast.LENGTH_LONG).show();

        break;
         case 10: 
             Toast.makeText(this, "Four Gone Now Put Five in the basket", Toast.LENGTH_LONG).show();
        break;

不包括某些底层类,因为它没有关联

我正在将case语句递增一定数量,因为当iGone等于该数字时,我希望调用case语句。例如,iGone如果在它掉线时增加1并且是imageview的可见性是不可见的,

所以当一个imageview被删除时,它将增加1,1,1,所以最终iGone将等于3时它将调用第三个case语句,当它等于10时它将调用该特定情况声明因此模拟了iGone从0开始的效果。

所以我正在创建一个计数部分我需要用户计数到1然后我需要它们计数到2,然后是3等等。它的计算方式是当图像视图消失时意味着当图像视图消失为1时,计数到1就完成了。然后我需要用户从0开始计数到2,所以当第二个imageview消失时我需要调用第二个case语句。但如果我使用案例2: 那么我想要完成的东西是行不通的,因为系统不知道我们从0开始的第二个(除非我告诉它。)但是如果我告诉系统我从0开始那么它只会调用第一个case语句,因为iGone会= 1。

这不是我想要或需要的。我需要第二个案例声明,因此我实际上使用了我的大脑并说“好吧,我们知道一个ImageView已经消失了,我需要另外两个imageViews”等于计数到2.(但从逻辑上讲,我们知道这将是3因为1张图像视图消失了+ 2张图像视图消失了= 3我们显然知道了),我该怎么做?“ “哦,我知道,我打算调用案例3:作为我的第二个案例陈述,因为当我们删除一个imageview时,iGone将增加1,所以如果我们删除3个图像视图,iGone会= 3,但玩游戏的用户会不知道那个。他们认为他们从0开始计算到2,因为他们已经完成了数到1,所以第四次是案例陈述6和10和15.我希望你看到我试图制作的模式

我希望我能让自己明白,因为很多其他人都有这个问题。如果没有随时发送电子邮件(P.S.我的p按钮有点破,很抱歉错过任何应该在那里的P'。

如果您注意到我必须添加到其中的更改。我希望它可以帮助那些在不同时间调用该类时无法获得case语句中每个语句的其他人。

答案 1 :(得分:0)

我不确定我是否完全理解你的问题,但似乎你的iGone变量是选择一个点来开始执行代码,并且你希望在该起点之后的所有情况都能执行。如果是这种情况,您只需删除break语句。

答案 2 :(得分:0)

如果案例中有break语句,则switch语句不会失效。

来自文档http://docs.oracle.com/javase/tutorial/java/nutsandbolts/switch.html

  

break语句是必要的,因为如果没有它们,switch块中的语句就会失败:匹配的case标签之后的所有语句都按顺序执行,而不管后续case标签的表达式,直到遇到break语句。

因此,如果您想要删除,请删除break语句

答案 3 :(得分:0)

在switch语句中,我们只能使用数值和Java 7字符串文字来进行相等性检查。请查看以下内容并在代码中进行尝试。

使用数值:

int number_to_compare = 3;

switch(number_to_compare) {
case 1:
       System.out.println("value is equal to 1");
       break;
case 2:
       System.out.println("value is equal to 2");
       break;
case 3:
       System.out.println("value is equal to 3");
       break;
}

使用字符串文字:

String string_to_compare = "A";

switch(string_to_compare) {
case "A":
       System.out.println("value is equal to A");
       break;
case "B":
       System.out.println("value is equal to B");
       break;
case "C":
       System.out.println("value is equal to C");
       break;
}

如果您需要其他类型的检查,则必须通过 if / else 结构

进行检查

答案 4 :(得分:0)

我认为你做错了,switch (iGone = 0),你应该用switch (iGone)改变它。这将有效。

switch (iGone = 0)将始终返回1, true

答案 5 :(得分:0)

请看一下ApiDemos。你在ApiDemos / Views / Drag and Drop中搜索的是