没有所需的输出,可能的原因是过载

编程入门 行业动态 更新时间:2024-10-25 22:34:15
本文介绍了没有所需的输出,可能的原因是过载的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在创建一个简单的剪刀石头布游戏,但通过添加两个选项Lizard"和Spock"​​来改变传统的游戏方式.这个游戏的重点是让它比传统的玩游戏方式更复杂.不确定我是否重载了 Action 事件,但我在代码中遇到了这个奇怪的错误.假设有 5 个按钮包含石头剪刀布等,以及 1 个 JTextArea.问题是每当我单击Spock"​​按钮时,String AI 也会得到Spock"​​/choices[4],它似乎忽略了下面我希望它响应的代码,而是使用You Lost"...哈哈"选项,

I am creating a simple Rock Paper Scissors game, but changing the traditional way it is played by adding two more choices, "Lizard" and "Spock". The Point of this game is to make it more complex then the traditional way of playing it. Not sure if I am overloading the Action Event, but I get this weird bug in the code. there is suppose to be 5 buttons containing the Rock Paper Scissors etc., and 1 JTextArea. The problem is whenever I click the button "Spock" and the String AI gets "Spock"/choices[4] as well, It appear to be ignoring the following code below that I want it to respond to and instead goes with "You Lost... Haha" Option,

if ((e.getSource() == b5) && (AI == choices[4])) { text.append("It's a Tie!\n\n"); return; }

此外,当单击Lizard"按钮时,它也会忽略下面的代码并显示You Won!"替代选项

Also when clicking the "Lizard" Button, it also ignores the following code below and goes with the "You Won!" Option instead

if ((e.getSource() == b4) && (AI == choices[3])) { text.append("It's a Tie!\n\n"); return; }

游戏规则

Scissors cut paper Paper covers rock Rock crushes lizard Lizard poisons Spock Spock smashes scissors Scissors decapitate lizard Lizard eats paper Paper disproves Spock Spock vaporizes rock Rock crushes scissors

为那些好奇的人提供完整的代码.www.mediafire/?x4853rq3a4fp4ah*没有病毒.;)

Complete Code for those that are Curious. www.mediafire/?x4853rq3a4fp4ah *No Viruses. ;)

代码:

import java.awt.event.*; import javax.swing.*; class Main2 implements ActionListener { JTextArea text; JButton b1; JButton b2; JButton b3; JButton b4; JButton b5; String[] choices = { "Rock", "Paper", "Scissors", "Lizard", "Spock" }; int l = this.choices.length; public static void main(String[] args) { Main2 gui = new Main2(); gui.go(); } public void go() { JFrame frame = new JFrame("Rock Paper Scissors"); this.text = new JTextArea(13,40); JPanel panel1 = new JPanel(); JPanel panel2 = new JPanel(); b1 = new JButton(choices[0]); b2 = new JButton(choices[1]); b3 = new JButton(choices[2]); b4 = new JButton(choices[3]); b5 = new JButton(choices[4]); b1.addActionListener(this); b2.addActionListener(this); b3.addActionListener(this); b4.addActionListener(this); b5.addActionListener(this); text.setEditable(false); JScrollPane scroller = new JScrollPane(text); scroller.setVerticalScrollBarPolicy(22); panel1.add(scroller); panel2.add(this.b1); panel2.add(this.b2); panel2.add(this.b3); panel2.add(this.b4); panel2.add(this.b5); frame.getContentPane().add("Center", panel1); frame.getContentPane().add("South", panel2); frame.setSize(500, 300); frame.setVisible(true); } public void actionPerformed(ActionEvent e) { int nr = (int)(Math.random() *l); String AI = choices[nr]; if (e.getSource() == b1) { text.append("Your choice was " + choices[0] + "\nComputer's choice was " + AI + "\n"); } if (e.getSource() == b2) { text.append("Your choice was " + choices[1] + "\nComputer's choice was" + AI + "\n"); } if (e.getSource() == b3) { text.append("Your choice was " + choices[2] + "\nComputer's choice was " + AI + "\n"); } if (e.getSource() == this.b4) { text.append("Your choice was " + choices[3] + "\nComputer's choice was " + AI + "\n"); } if (e.getSource() == this.b5) { text.append("Your choice was " + choices[4] + "\nComputer's choice was " + AI + "\n"); } if (((e.getSource() ==b1) && (AI == choices[2])) || (AI == choices[3])) { text.append("You won!\n\n"); return; } if ((e.getSource() == b1) && (AI == choices[0])) { text.append("It's a Tie!\n\n"); return; } if (((e.getSource() == b1) && (AI == choices[1])) || (AI == choices[4])) { text.append("You Lost... Haha!\n\n"); return; } if (((e.getSource() == b2) && (AI == choices[0])) || (AI == choices[4])) { text.append("You won!\n\n"); return; } if ((e.getSource() == b2) && (AI == choices[1])) { text.append("It's a Tie!\n\n"); return; } if (((e.getSource() == b2) && (AI == choices[2])) || (AI == choices[3])) { text.append("You Lost... Haha!\n\n"); return; } if (((e.getSource() == b3) && (AI == choices[1])) || (AI == choices[3])) { text.append("You won!\n\n"); return; } if ((e.getSource() == b3) && (AI == choices[2])) { text.append("It's a Tie!\n\n"); return; } if (((e.getSource() == b3) && (AI == choices[0])) || (AI == choices[4])) { text.append("You Lost... Haha!\n\n"); return; } if (((e.getSource() == b4) && (AI == choices[1])) || (AI == choices[4])) { text.append("You won!\n\n"); return; } if ((e.getSource() == b4) && (AI == choices[3])) { text.append("It's a Tie!\n\n"); return; } if (((e.getSource() == b4) && (AI == choices[0])) || (AI == choices[2])) { text.append("You Lost... Haha!\n\n"); return; } if (((e.getSource() == b5) && (AI == choices[0])) || (AI == choices[2])) { text.append("You won!\n\n"); return; } if ((e.getSource() == b5) && (AI == choices[4])) { text.append("It's a Tie!\n\n"); return; } if (((e.getSource() == b5) && (AI == choices[1])) || (AI == choices[3])) { text.append("You Lost... Haha!\n\n"); return; } } }

推荐答案

正如 Hot Licks 所建议的那样,这是您的问题:您正在使用 == 来检查字符串的等效性,而不是使用 ==code>equals(...) 或 equalsIgnoreCase(...) 方法.了解 == 检查两个 对象 是否相同,这不是您感兴趣的.另一方面,方法检查两个字符串是否相同字符以相同的顺序排列,这就是这里的重要性.所以代替

As Hot Licks suggests, that's your problem: you're using == to check for String equivalence rather than use either the equals(...) or the equalsIgnoreCase(...) method. Understand that == checks if the two objects are the same which is not what you're interested in. The methods on the other hand check if the two Strings have the same characters in the same order, and that's what matters here. So instead of

if (fu == "bar") { // do something }

做,

if (fu.equals("bar")) { // do something }

或者,

if (fu.equalsIgnoreCase("bar")) { // do something }

另一个问题,与其使用大量 if 块,为什么不使用获胜矩阵来简单、轻松地简要检查一个选择是否优于另一个选择.枚举对此很有用,这样的事情可以工作:

Another issue, rather than having a chit-load of if blocks, why not use a win-matrix to simply, easily and briefly check to see if one choice beats another. Enums would be useful for this, something like this could work:

import java.util.Comparator; public enum HandGameChoice { ROCK, PAPER, SCISSORS, LIZARD, SPOCK; private static MyComparator myComparator = new MyComparator(); public static int compare(HandGameChoice o1, HandGameChoice o2) { return myComparatorpare(o1, o2); } private static class MyComparator implements Comparator<HandGameChoice> { private int[][] winMatrix = { { 0, -1, 1, 1, -1}, { 1, 0, -1, -1, 1}, {-1, 1, 0, 1, -1}, {-1, 1, -1, 0, 1}, { 1, -1, 1, -1, 0} }; @Override public int compare(HandGameChoice o1, HandGameChoice o2) { return winMatrix[o1.ordinal()][o2.ordinal()]; } } }

测试该枚举的类可能如下所示:

A class to test this enum could look like so:

public class TestHandGameChoices { public static void main(String[] args) { for (HandGameChoice choice1 : HandGameChoice.values()) { for (HandGameChoice choice2 : HandGameChoice.values()) { int value = HandGameChoicepare(choice1, choice2); String result = ""; if (value > 0) { result = "win"; } else if (value < 0) { result = "lose"; } else { result = "tie"; } System.out.printf("%-8s vs %-8s: %s%n", choice1, choice2, result); } } } }

测试类的输出显示:

ROCK vs ROCK : tie ROCK vs PAPER : lose ROCK vs SCISSORS: win ROCK vs LIZARD : win ROCK vs SPOCK : lose PAPER vs ROCK : win PAPER vs PAPER : tie PAPER vs SCISSORS: lose PAPER vs LIZARD : lose PAPER vs SPOCK : win SCISSORS vs ROCK : lose SCISSORS vs PAPER : win SCISSORS vs SCISSORS: tie SCISSORS vs LIZARD : win SCISSORS vs SPOCK : lose LIZARD vs ROCK : lose LIZARD vs PAPER : win LIZARD vs SCISSORS: lose LIZARD vs LIZARD : tie LIZARD vs SPOCK : win SPOCK vs ROCK : win SPOCK vs PAPER : lose SPOCK vs SCISSORS: win SPOCK vs LIZARD : lose SPOCK vs SPOCK : tie

然后 GUI 会像这样使用它:

Then the GUI would use it like so:

import java.awt.*; import java.awt.event.*; import java.util.Random; import javax.swing.*; @SuppressWarnings("serial") public class HandGameGui extends JPanel { private JTextArea tArea = new JTextArea(13, 40); public HandGameGui() { ButtonListener btnListener = new ButtonListener(); JPanel btnPanel = new JPanel(new GridLayout(1, 0, 5, 0)); for (HandGameChoice hgChoice : HandGameChoice.values()) { String choiceString = hgChoice.name(); String initCapChoiceString = choiceString.substring(0, 1) + choiceString.substring(1, choiceString.length()).toLowerCase(); JButton button = new JButton(initCapChoiceString); button.setActionCommand(choiceString); button.addActionListener(btnListener); btnPanel.add(button); } setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); setLayout(new BorderLayout(5, 5)); add(new JScrollPane(tArea, JScrollPane.VERTICAL_SCROLLBAR_ALWAYS, JScrollPane.HORIZONTAL_SCROLLBAR_NEVER), BorderLayout.CENTER); add(btnPanel, BorderLayout.PAGE_END); } private class ButtonListener implements ActionListener { private Random random = new Random(); @Override public void actionPerformed(ActionEvent e) { String actionCommand = e.getActionCommand(); HandGameChoice userChoice = HandGameChoice.valueOf(actionCommand); int randomInt = random.nextInt(HandGameChoice.values().length); HandGameChoice aiChoice = HandGameChoice.values()[randomInt]; int gameResult = HandGameChoicepare(userChoice, aiChoice); String resultStr = ""; if (gameResult > 0) { resultStr = "win"; } else if (gameResult < 0) { resultStr = "lose"; } else { resultStr = "tie"; } String output = String.format("You chose %s, and the computer chose %s; you %s%n", userChoice, aiChoice, resultStr); tArea.append(output); } } private static void createAndShowGui() { HandGameGui mainPanel = new HandGameGui(); JFrame frame = new JFrame("Rock Paper Scissors Lizard Spock"); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(mainPanel); frame.pack(); frame.setLocationByPlatform(true); frame.setVisible(true); } public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { createAndShowGui(); } }); } }

更多推荐

没有所需的输出,可能的原因是过载

本文发布于:2023-07-05 07:04:52,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1034468.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:所需   原因

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!