当前位置: 首页 > 知识库问答 >
问题:

甲板交易Java

白博易
2023-03-14

我正在尝试为类编写代码,该类执行以下操作:

  • 询问要使用多少甲板
  • 每次按enter键时,程序都会从卡片组中生成一张未使用的卡片
  • 当没有更多的卡可以交易时,程序会通知用户
  • 程序允许用户再次播放
  • 方法被广泛使用

到目前为止,我的代码如下所示:

import java.util.*;
public class IA3 {

@SuppressWarnings({ })
public static void play () {
}
@SuppressWarnings("resource")
public static void main(String[] args) {
    boolean draw = true;
    boolean pa = true;
    Scanner console = new Scanner(System.in);
    // TODO Auto-generated method stub
    System.out.println("Hello! Please input the number of decks you would like to use:");
    int decks = console.nextInt();

    int t = decks * 52;
    System.out.println("Your total amount of cards to use are " +t);
    int a = 0;
    do {
        int[] deck = new int[t];
        //declaration of suits and ranks
        String[] suits = {"Spades", "Hearts", "Diamonds", "Clubs"};
        String[] ranks = {"Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"};

        //Initializing of the cards
        for (int i = 0; i < t; i++) {
        deck[i] = i;
                }

            System.out.println("Press enter to draw a random card : "); //allows player to prompt the system for the next card

            String input = console.nextLine();
            a++;
            if (input.equals("")) {
                // Shuffles the cards
                for (int i = 0; i < 1; i++) {
                  int index = (int)(Math.random() * t);
                  int temp = deck[i];
                  deck[i] = deck[index];
                  deck[index] = temp;
                }

                      for (int i = 0; i < 1; i++) {
                      String suit = suits[deck[i] / 13];
                      String rank = ranks[deck[i] % 13];
                      System.out.println(rank + " of " + suit);
                      }
             if (a>t) {
                 System.out.println ("No more cards available");
                 break;
             }
                      System.out.println("Draw another card? (Yes or No) : ");
                      String again = console.nextLine();
                      if (again.equals("Yes")) {
                          continue;
                      }
                      if (again.equals("No")) {
                          draw = false;
                          System.out.println("Game over!");
                      }
                        System.out.println("Play again? (Yes or No) : ");
                          String plag = console.nextLine();
                          if (plag.equals("Yes")) {
                              continue;
                          }
                          if (plag.equals("No")) {
                              pa = false;
                              System.out.println("Thank you for playing!");
                              break;
                          } while (pa == true);
                  }
        } while (draw == true);
    }
}

当我尝试运行超过1套牌时,问题就出现了,有时会立即失败,而有时运行可能4个交易然后失败。我似乎也无法让它再次运行;每当我输入“是”而不是再次播放时,它就会终止。如您所见,我在那里没有方法(我在方法上迷失了方向)。任何帮助都将不胜感激,谢谢!

共有2个答案

糜雪峰
2023-03-14

现在还不能发表评论,所以这里有一些想法可以让这段代码更容易理解,特别是当你的问题需要“任何帮助”时

删除如下所示的循环:

for (int i = 0; i < 1; i++) {
 // code
}

上面的for循环将i设置为0,然后执行内部代码,然后增加i(因此i现在等于1),然后检查i是否小于1(这不是因为它现在等于1),因此它不会再次执行内部代码。换句话说,这种类型的for循环是不必要的,因为它只能执行其内部代码一次。应移除周围的for循环,并保持内部代码完整。

将数据组存储为ArrayList可能更简单,而不是数组。这样做的好处是,您可以利用.remove(int)和.size()等操作,而不必担心洗牌(您可以随机删除一个条目并打印出来)。

希望这能给你一些正确方向的建议。继续努力!

这是一个关于创建方法的有用教程,我通过谷歌搜索“java方法”找到了它。http://www.tutorialspoint.com/java/java_methods.htm

柯乐童
2023-03-14

您应该发布完整的错误消息。没有它很难猜测发生了什么。我看到至少一个数组索引可能超出边界的地方:

String suit = suits[deck[i] / 13];

如果您有多个牌组,则此除法的结果将大于3。您可以使用以下方法进行修复:

String suit = suits[(deck[i] / 13) % 4];

这样可以确保只使用索引为[0,1,2,3]的元素。

 类似资料:
  • 交易 为了与Infura节点进行交易,需要在发送它们之前离线创建交易和签名,因为Infura节点没有加密的以太坊密钥文件的访问权限,这是需要通过geth或者Parity管理命令来解锁帐户。 有关详细信息,请参阅以太坊交易中离线交易和签名部分和web3j如何使用管理APIs。

  • 交易 Web3j支持使用以太坊钱包文件(推荐的)和用于发送事务的以太坊客户端管理命令。 使用以太钱包文件发送以太币给其他人: Web3j web3 = Web3j.build(new HttpService()); // defaults to http://localhost:8545/ Credentials credentials = WalletUtils.loadCredentials

  • 交易有不同的分类,不同交易有不同的操作码。 这样做的好处就是明确用户行为,简化系统复杂度。 操作码列表 OpsTransfer:用于普通的链内转账 OpsMove:用于链间的转账 OpsNewChain:用于创建新的子链 OpsNewApp:用于创建智能合约 OpsRunApp:用于执行智能合约 OpsRegisterMiner:用于注册矿工 OpsUpdateAppLife:更新智能合约的生命周

  • composer transaction submit命令将交易提交给业务网络。 句法 composer transaction submit composer transaction submit [options] Options: --help Show help [boolean] -v, --version

  • 问题内容: 我正在使用Codeigniter交易 这很好用,我的问题是在和我正在调用其他函数,而这些函数处理数据库,因此它们包含插入和更新以及一些删除…例如: 现在,如果执行了这些功能并且发生了一些错误,CodeIgniter将不会回滚。 处理此类问题的最佳方法是什么? 我想到的唯一解决方案是从这些函数中返回错误,并在这些函数中添加(和),如果返回错误,则执行 例如: 有更好的方法吗? 更新1:

  • coinbase交易是块中的第一个交易。它是一种可以由矿工创建的独特类型的比特币交易。矿工使用它来收取他们工作的区块奖励,矿工收取的任何其他交易费也在此交易中发送。 说明 在比特币网络上执行的每个交易组合在一起以形成块。当一个块立即形成时,它将包含在区块链中。这些块对于在比特币网络上进行的所有交易是不可变的和防篡改的。每个块必须包含一个或多个交易,块中的第一个交易称为交易。 矿工总是负责创建一个区