【问题标题】:Java Simon Says program issuesJava Simon 说程序问题
【发布时间】:2015-11-17 23:09:28
【问题描述】:

这是我在这个网站上的第一篇文章,所以如果我违反规则或我不知道的东西,我非常抱歉。也就是说,我的老师已分配我制作一个 Simon Says 程序,我在课堂上苦苦挣扎,所以我正在寻找其他帮助途径。规则如下:

完成这项任务的方式完全取决于您。代码必须完全按照规定工作才能获得适当的信用。你将设计游戏西蒙。在西蒙有四种颜色:红色、蓝色、绿色和黄色。用户必须按照正确的顺序选择 Simon 选择的相同颜色。西蒙选择的颜色必须是随机的。每一轮西蒙都会在序列中添加另一种颜色。当用户失败时,Simon 应该告诉用户他们持续了多少轮。您可以玩多少轮应该没有限制。此分配不需要 GUI。如果您使用 JOptionPane 选择颜色,则必须使用红色、蓝色、绿色和黄色的字母快捷方式。您还必须包括游戏说明。您还必须跟踪每次播放的高分,并允许用户输入他们的名字以获得高分。如果您关闭程序,您不必记分;仅在程序打开时。

当我执行我的代码时,当用户给出正确答案时它不会继续游戏,而是在一个循环后终止。奇怪的是,如果我给出错误的答案,它似乎只会循环。最后,我想指出我的程序非常基础,因为老实说,这就是我知道如何使用的全部内容。谢谢你的帮助

package stuff;

import java.util.ArrayList;

import javax.swing.JOptionPane;

public class Simon {
    String s = "";
    String a = "";
    String c = "";
    String d = "";
    boolean b = true;
    boolean b2 = true;
    String obj[] = { "Red", "Yellow", "Green", "Blue" };
    ArrayList<String> colors = new ArrayList<String>();
    String[] options = new String[] { "Red", "Yellow", "Green", "Blue" };
    int count = 0;
    int count2 = 0;
    int score = 0;

    public String simon() {
            do {
                int c = ((int) (Math.random() * 4));
                if (c == 0)
                    colors.add(obj[0]);
                else if (c == 1)
                    colors.add(obj[1]);
                else if (c == 2)
                    colors.add(obj[2]);
                else if (c == 3)
                    colors.add(obj[3]);
                else {
                    JOptionPane.showMessageDialog(null,
                            "weird stuff happened bruh");
                }
                JOptionPane.showMessageDialog(null, colors.get(count));
                b2 = true;
                while (b2) {
                    for (int i2 = 0; i2 < colors.size(); i2++) {
                        a = JOptionPane.showInputDialog("put letter");
                        if(a != null){
                        if (a.equalsIgnoreCase(colors.get(i2))) {
                            JOptionPane.showMessageDialog(null,
                                    "Your color  is right" + score);
                            score += 1;
                            if (i2 == colors.size() - 1)
                                b2 = false;
                            else {
                                JOptionPane.showMessageDialog(null, "weird stuff happened bruh fo realz");  
                            }
                        } else {
                            b2 = false;
                            b = false;
                        }
                    }else{
                       System.exit(0);
                   }
                }
                }
                count++;
            } while (b == false);

        return s;
    }
}

【问题讨论】:

  • 为什么你使用try-catch 块作为NullPointerException,然后只是退出而不记录任何有关异常的信息?至少使用npe.printStackTrace() 这样您就可以看到导致异常的原因。
  • 当我用谷歌搜索我得到的错误时,我在其他网站上找到了该解决方案,这对我来说非常有效。如果有其他方法可以避免这个错误,你能告诉我吗?
  • 避免此错误的适当方法是不要尝试对 null 对象调用对象方法。这意味着您转到引发错误的行并找出哪个对象为空,以及为什么它没有初始化为您期望的值。
  • 开始here。基本上,当您尝试在 null 的对象上调用方法时,就会出现 NullPointerException。当您捕获该异常时您正在退出这一事实强烈表明设置为 null 的对象是您的问题的一部分

标签: java if-statement for-loop joptionpane do-while


【解决方案1】:

你的很多代码都不需要,而且你让它变得比它应该做的更难:)。

我发布了代码来展示我将如何使用两个单独的 for 循环来制作程序,并检查以对抗当用户取消输入时创建的 讨厌的 NullPointerException。

public String simon() {
    while(true){
        generateColor();
        for(int i = 0; i < colors.size(); i++){
            JOptionPane.showMessageDialog(null, "Color #"+i+" is: "+colors.get(i));
        }
        for(int i = 0; i < colors.size(); i++){
            String input = JOptionPane.showInputDialog("Type in #"+i+" color: ");
            if(input == null){
                System.out.println("User typed in wrong input");
                return "Program ended unsuspectively";
            }
            if(input.equalsIgnoreCase(colors.get(i))){
                System.out.println("You were correct!");
            }
            else{
                System.out.println("you wasnt correct");
                return "You ended with a score of: "+score;
            }
        }
        score++;
    }
}

private void generateColor(){
    int c = (int)(Math.random() * 4);
    colors.add(obj[c]);
}     

希望这对您有所帮助,祝您有愉快的一天:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-27
    • 2018-06-22
    • 2010-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-20
    相关资源
    最近更新 更多