Java Can';无法让程序识别卡值

Java Can';无法让程序识别卡值,java,exception,arraylist,javafx,logic,Java,Exception,Arraylist,Javafx,Logic,我的程序不会进入这段代码的内部 if(card1.CardValue() == (int)expInput.get(0) && card2.CardValue() == (int)expInput.get(1) && card3.CardValue() == (int)expInput.get(2) && card4.CardValue() == (int)e

我的程序不会进入这段代码的内部

if(card1.CardValue() == (int)expInput.get(0)
               && card2.CardValue() == (int)expInput.get(1)
               && card3.CardValue() == (int)expInput.get(2)
               && card4.CardValue() == (int)expInput.get(3))
               {
                  if(express == 24){
                     display.setText("Correct");
                  }
                  else
                     display.setText("Incorrect");

               }
我想这是因为我正在尝试获取
card1
的卡值,而出现的卡只是我牌组中的随机卡。我可以用什么来评估出现的新卡片?这是我的全部代码:

import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.control.Label;
import javafx.scene.control.TextField;
import javafx.scene.image.Image;
import javafx.scene.layout.BorderPane;
import javafx.scene.layout.HBox;
import javafx.scene.layout.Pane;
import javafx.stage.Stage;
import javafx.scene.image.ImageView;

import java.util.ArrayList;
import java.util.Collections;
import java.util.LinkedList;
import java.util.concurrent.atomic.AtomicReference;

public class Main extends Application {

   @Override
   public void start(Stage primaryStage) {


      ArrayList<Integer> deck;
      deck = new ArrayList<>();
      int i = 1;
      while(i < 52){
         deck.add(i);
         i++;
      }
      final AtomicReference<String> result = new AtomicReference<>("go.");

      Collections.shuffle(deck);

      BorderPane pane = new BorderPane();

      HBox top = new HBox(10);
      Label display = new Label(result.toString());
      Button btShuffle = new Button("Shuffle");

      top.getChildren().add(display);
      top.getChildren().add(btShuffle);


      HBox center = new HBox(10);
      Card card1 = new Card(deck.get(0));
      center.getChildren().add(card1);

      Card card2 = new Card(deck.get(1));
      center.getChildren().add(card2);

      Card card3 = new Card(deck.get(3));
      center.getChildren().add(card3);

      Card card4 = new Card(deck.get(4));
      center.getChildren().add(card4);



      btShuffle.setOnAction(
            e -> {
               Collections.shuffle(deck);
              center.getChildren().clear();    
              center.getChildren().add(new Card(deck.get(0)));
              center.getChildren().add(new Card(deck.get(1)));
              center.getChildren().add(new Card(deck.get(2)));
              center.getChildren().add(new Card(deck.get(3)));

            });





      HBox bottom = new HBox(10);
      Label expression = new Label("Please Enter the expression: ");

      TextField tfExpress = new TextField();
      ArrayList<Character> signs = new ArrayList<>();
      signs.add('/');
      signs.add('+');
      signs.add('(');
      signs.add(')');
      signs.add('-');
      signs.add('^');
      signs.add('*');
      signs.add('%');
      String str = tfExpress.getText();


      int express = (str != null && !"".equals(str)) ? Integer.parseInt(str) : -1;      



     // expInput.removeIf(p-> p.equals(signs));

      Button btVerify = new Button("Verify");
      bottom.getChildren().add(expression);
      bottom.getChildren().add(tfExpress);
      bottom.getChildren().add(btVerify);

      btVerify.setOnAction(
            (ActionEvent e) -> 
            {
               LinkedList<Character> expInput = new LinkedList<Character>();
            for(char c: tfExpress.getText().toCharArray()){
                expInput.add(c);
                }

               expInput.removeIf(p-> p.equals(signs));


               if(card1.CardValue() == (int)expInput.get(0)
               && card2.CardValue() == (int)expInput.get(1)
               && card3.CardValue() == (int)expInput.get(2)
               && card4.CardValue() == (int)expInput.get(3))
               {
                  if(express == 24){
                     display.setText("Correct");
                  }
                  else
                     display.setText("Incorrect");

               }
               else
                  display.setText("The numbers in the expression don't "
                     + "match the numbers in the set.");
            });



      pane.setTop(top);
      pane.setCenter(center);
      pane.setBottom(bottom);

      Scene scene = new Scene(pane);
      primaryStage.setTitle("24 card game");
      primaryStage.setScene(scene);
      primaryStage.show();
   }

   public class Card extends Pane {
      public int cardVal;
      Card(int card){
         Image cardImage;
         cardImage = new Image("card/"+ card +".png");
         getChildren().add(new ImageView(cardImage));
         cardVal = card;

      }

      public int CardValue(){
         int card = 0;

         if(cardVal <= 13){
            card = cardVal;
         }
         else if(cardVal > 13 && cardVal <= 26){
            card = cardVal - 13;
         }
         else if(cardVal > 26 && cardVal <= 39){
            card = cardVal - 26;
         }
         else if(cardVal > 39 && cardVal <= 52){
            card = cardVal - 39;
         }


         return card;
      }




   }



   public static void main(String[] args) {
      launch(args);
   }

}
导入javafx.application.application;
导入javafx.event.ActionEvent;
导入javafx.scene.scene;
导入javafx.scene.control.Button;
导入javafx.scene.control.Label;
导入javafx.scene.control.TextField;
导入javafx.scene.image.image;
导入javafx.scene.layout.BorderPane;
导入javafx.scene.layout.HBox;
导入javafx.scene.layout.Pane;
导入javafx.stage.stage;
导入javafx.scene.image.ImageView;
导入java.util.ArrayList;
导入java.util.Collections;
导入java.util.LinkedList;
导入java.util.concurrent.AtomicReference;
公共类主扩展应用程序{
@凌驾
公共无效开始(阶段primaryStage){
阵列式甲板;
deck=newarraylist();
int i=1;
而(i<52){
甲板。添加(i);
i++;
}
最终原子参考结果=新原子参考(“go”);
收藏。洗牌(牌组);
BorderPane=新的BorderPane();
HBox top=新的HBox(10);
标签显示=新标签(result.toString());
按钮btShuffle=新按钮(“Shuffle”);
top.getChildren().add(显示);
top.getChildren().add(btShuffle);
HBox中心=新的HBox(10);
Card card1=新卡(CACK.get(0));
center.getChildren().add(card1);
Card card2=新卡(CACK.get(1));
center.getChildren().add(card2);
CardCard3=新卡(deck.get(3));
center.getChildren().add(card3);
Card Card 4=新卡(CACK.get(4));
center.getChildren().add(card4);
btShuffle.setOnAction(
e->{
收藏。洗牌(牌组);
center.getChildren().clear();
center.getChildren().add(新卡(deck.get(0)));
center.getChildren().add(新卡(deck.get(1)));
center.getChildren().add(新卡(deck.get(2)));
center.getChildren().add(新卡(deck.get(3)));
});
HBox底部=新的HBox(10);
标签表达式=新标签(“请输入表达式:”);
TextField tfExpress=新建TextField();
ArrayList符号=新的ArrayList();
符号。加上(“/”);
符号。添加(“+”);
符号.加上(“(”);
符号。加上(“)”;
符号。加上(“-”);
符号。加上(“^”);
符号。加上(“*”);
符号。加上(“%”);
字符串str=tfExpress.getText();
int express=(str!=null&&!“.equals(str))?Integer.parseInt(str):-1;
//expInput.removeIf(p->p.equals(符号));
按钮btVerify=新按钮(“验证”);
bottom.getChildren().add(表达式);
bottom.getChildren().add(tfExpress);
bottom.getChildren().add(btVerify);
btVerify.setOnAction(
(活动e)->
{
LinkedList expInput=新建LinkedList();
for(char c:tfExpress.getText().toCharArray()){
expInput.add(c);
}
expInput.removeIf(p->p.equals(符号));
如果(card1.CardValue()==(int)expInput.get(0)
&&card2.CardValue()==(int)expInput.get(1)
&&card3.CardValue()==(int)expInput.get(2)
&&card4.CardValue()==(int)expInput.get(3))
{
if(express==24){
display.setText(“正确”);
}
其他的
display.setText(“不正确”);
}
其他的
display.setText(“表达式中的数字不”
+“匹配集合中的数字。”);
});
窗格。设置顶部(顶部);
窗格。设置中心(中间);
窗格。立根底部(底部);
场景=新场景(窗格);
初级阶段。设置标题(“24张牌游戏”);
初级阶段。场景(场景);
primaryStage.show();
}
公共类卡扩展窗格{
公共国际信用卡;
智能卡(智能卡){
图像梳理;
cardImage=新图像(“卡/”+卡+“.png”);
getChildren().add(新图像视图(cardImage));
cardVal=卡片;
}
public int CardValue(){
int卡=0;

如果(cardVal 13&&cardVal 26&&cardVal 39&&cardVal您正在将数字的字符值与整数值进行比较。这些值不匹配。要使这一点直观明了,请执行以下操作:

String numbers = "0123456789";
for(char c: numbers.toCharArray()){
  System.out.println( c);
}
产生

0123456789

但是,如果您像在程序中一样将字符值强制转换为整数,您将得到以下结果

48 49 50 51 52 53 54 55 56 57

哪些是字符的ascii值

换句话说:对于字符“1”和卡值1,如果1==49,则进行比较

解决方案:您需要解析字符,而不是将其强制转换为int,例如使用

Character.getNumericValue(...)
总而言之:找出代码错误的最简单方法是使用调试器。或者,一个简单的日志输出将向您显示错误


编辑:仅供参考,您有一个错误:

int i = 1;
while(i < 52){
  deck.add(i);
  i++;
}
inti=1;
而(i<52){
甲板。添加(i);
i++;
}

将导致最后一张卡丢失。

谢谢,这非常有用。因此我的新代码块是:'if(card1.CardValue()==Character.getNumericValue(0)和&card2.CardValue()==Character.getNumericValue(1)和&card3.CardValue()==Character.getNumericValue(2)和&card4.CardValue()==字符。getNumericValue(3))`它的运行和以前一样。我猜这是因为我之前说的,它不知道显示的卡片有数字值。关于如何链接这一点有什么建议吗?我想我知道如何处理这副卡片。只是一个一般性的提示。看看我的答案。如果你真的给了他们数字,看看