用Java编程Hangman,主线程异常错误(以及其他错误)

用Java编程Hangman,主线程异常错误(以及其他错误),java,exception,main,Java,Exception,Main,到目前为止,我已经有了这个程序。我一直在使用switch语句。我不确定这是否是正确的逻辑,但我有它的工作。当我输入我想要的单词时,它工作了,并在第一次输入后开始绘制刽子手,但随后遇到错误 public class Hangman { public static void main (String[] args){ JFrame frame = new JFrame ("Hang

到目前为止,我已经有了这个程序。我一直在使用switch语句。我不确定这是否是正确的逻辑,但我有它的工作。当我输入我想要的单词时,它工作了,并在第一次输入后开始绘制刽子手,但随后遇到错误

                public class Hangman {
                     public static void main (String[] args){
                       JFrame frame = new JFrame ("Hangman");
                       frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                       HangmanPanel Panel = new HangmanPanel();

                       frame.getContentPane().add(Panel);
                       frame.pack();
                       frame.setVisible(true);

                    }


                  }
这是我的另一节课

   import javax.swing.JPanel;

import java.awt.event.*;

import javax.swing.*;

import java.util.Random;
import java.util.Scanner;
import java.io.*;
import java.util.Scanner;

public class HangmanPanel extends JPanel {
    int lives;
    String guessletter;
    String inputw;
    char[] hiddenWord;
    char[] aOfWord;
    String[] words = { "ADA", "COBOL", "LOGO", "BASIC", "PROLOG", "UBUNTU",
            "UHURU" };

    Scanner scan = new Scanner(System.in);
    boolean isFound;
    int a;

    public HangmanPanel() {

        System.out.println("Enter the word to be searched: ");
        inputw = scan.nextLine();

        aOfWord = inputw.toCharArray();
        this.setLives(inputw.length());
        // this.output();

        hiddenWord = new char[aOfWord.length];

        for (int j = 0; j < hiddenWord.length; j++)
            hiddenWord[j] = '*';

        this.output();

        while (lives > 0)
            System.out.println("Please choose a letter: ");
        guessletter = scan.nextLine();
        this.checkForMatch(guessletter);
        if (isFound == true) {
            hiddenWord[a] = guessletter.charAt(0);
        } else {
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   ");
            System.out.println("|   ");
            System.out.println("|   ");
            this.reduceLives();

            while (lives > 0)
                System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();
            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(1);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   o");
                System.out.println("|    ");
                System.out.println("|    ");
                this.reduceLives();

            }

            while (lives > 0)
                System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();

            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(2);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   o");
                System.out.println("|   | ");
                System.out.println("|    ");
                this.reduceLives();
            }

            while (lives > 0)
                System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();

            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(3);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   o");
                System.out.println("|  /| ");
                System.out.println("|    ");
                this.reduceLives();
            }

            while (lives > 0)

                System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();

            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(4);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   o");
                System.out.println("|  /|\\ ");
                System.out.println("|    ");
                this.reduceLives();
            }

            while (lives > 0)

                System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();

            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(5);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   o");
                System.out.println("|  /|\\ ");
                System.out.println("|    \\");
                this.reduceLives();
            }

            while (lives > 0)

                System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();

            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(6);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   o");
                System.out.println("|  /|\\");
                System.out.println("|  / \\");
                this.reduceLives();
            }


        }
        this.output();

    }

    public void setLives(int a) {
        this.lives = a;
    }

    public void reduceLives() {
        lives = lives - 1;
        System.out.println("Lives remaining: " + this.getLives());

    }

    public int getLives() {
        return lives;
    }

    public void output() {
        System.out.println("Lives remaining: " + this.getLives());
        System.out.println("Word found so far ");

        for (int i = 0; i < hiddenWord.length; i++) {
            System.out.print(hiddenWord[i] + "\n");
        }

    }

    public void checkForMatch(String l) {

        for (int i = 0; i < aOfWord.length; i++) {

            if (l.charAt(0) == aOfWord[i]) {
                isFound = true;
                a = i;
                break;
            } else {
                isFound = false;
            }
        }

    }
}
import javax.swing.JPanel;
导入java.awt.event.*;
导入javax.swing.*;
导入java.util.Random;
导入java.util.Scanner;
导入java.io.*;
导入java.util.Scanner;
公共类HangmanPanel扩展了JPanel{
int生命;
字符串猜测字母;
字符串输入;
char[]隐藏词;
char[]aOfWord;
String[]words={“ADA”、“COBOL”、“LOGO”、“BASIC”、“PROLOG”、“UBUNTU”,
“乌胡鲁”};
扫描仪扫描=新扫描仪(System.in);
布尔型;
INTA;
公共刽子手小组(){
System.out.println(“输入要搜索的单词:”);
inputw=scan.nextLine();
aOfWord=inputw.toCharArray();
this.setlifes(inputw.length());
//这个是.output();
hiddenWord=新字符[aOfWord.length];
for(int j=0;j0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母.charAt(0);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
System.out.println(“|”);
System.out.println(“|”);
System.out.println(“|”);
这个。reduceLives();
而(寿命>0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母.charAt(1);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
系统输出打印号(“|o”);
System.out.println(“|”);
System.out.println(“|”);
这个。reduceLives();
}
而(寿命>0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母.charAt(2);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
系统输出打印号(“|o”);
System.out.println(“| |”);
System.out.println(“|”);
这个。reduceLives();
}
而(寿命>0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母.charAt(3);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
系统输出打印号(“|o”);
System.out.println(“|/|”);
System.out.println(“|”);
这个。reduceLives();
}
而(寿命>0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母charAt(4);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
系统输出打印号(“|o”);
System.out.println(“|/| \\”);
System.out.println(“|”);
这个。reduceLives();
}
而(寿命>0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母.charAt(5);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
系统输出打印号(“|o”);
System.out.println(“|/| \\”);
System.out.println(“| \\”);
这个。reduceLives();
}
而(寿命>0)
System.out.println(“请选择一个字母:”);
猜字母=scan.nextLine();
这个.checkForMatch(猜字母);
if(isFound==true){
hiddenWord[a]=猜字母charAt(6);
}否则{
System.out.println(“___;”);
System.out.println(“| |”);
系统输出打印号(“|o”);
System.out.println(“|/| \\”);
System.out.println(“|/\”);
这个。reduceLives();
}
}
这个是.output();
}
公共生活(INTA){
this.lifes=a;
}
公共void reduceLives(){
生命=生命-1;
System.out.println(“剩余生命:+this.getlifes());
}
公共生活{
回归生命;
}
公共无效输出(){
System.out.println(“剩余生命:+this.getlifes());
System.out.println(“迄今为止找到的单词”);
for(int i=0;icase 1:
            System.out.println("Please choose a letter: ");
            guessletter = scan.nextLine();
            this.checkForMatch(guessletter);
            if (isFound == true) {
                hiddenWord[a] = guessletter.charAt(0);
            } else {
                System.out.println("_____");
                System.out.println("|   |");
                System.out.println("|   ");
                System.out.println("|   ");
                System.out.println("|   ");
                this.reduceLives();
            }
            break;                                   // Add this for each case
// renamed from Hangman
public class Main {
    public static void main(String[] args) {

        // removed need for JFrame as no GUI is actually used.
        Hangman hangman = new Hangman();
        // starting a thread with the hangman runnable
        new Thread(hangman).start();

        // main thread will end here, but the hangman thread will keep the program running. 
    }
}
import java.util.Arrays;
import java.util.Scanner;


// Renamed from HangmanPanel, changed from JPanel to Runnable since no GUI is shown.
public class Hangman implements Runnable {

    // always use 7 lives, as this is the number of "hangman images" in reduceLives()
    private int lives = 7;

    private char[] hiddenWord;
    private char[] aOfWord;

    // I'm guessing that at some point you will use these randomly? 
    private String[] words = { "ADA", "COBOL", "LOGO", "BASIC", "PROLOG", "UBUNTU", "UHURU" };


    @Override
    public void run() {
        // This is the new Try-With-Resources in Java 7.
        // If you don't have Java 7, just change the 
        // try ( Scanner scan = new Scanner(System.in) ) {
        // to
        // try {
        //   Scanner scan = new Scanner(System.in);
        try ( Scanner scan = new Scanner(System.in) ) {

            System.out.println("Enter the word to be searched: ");
            String inputw = scan.nextLine();

            aOfWord = inputw.toCharArray();
            hiddenWord = new char[aOfWord.length];

            // nice method for filling an array.
            Arrays.fill(hiddenWord, '_');

            // renamed from output
            showStatus();

            // fixed outer while-loop
            while (lives > 0 && Arrays.equals(aOfWord, hiddenWord) == false) {
                System.out.println("Please choose a letter: ");
                String guessletter = scan.nextLine();
                if(guessletter.isEmpty()) {
                    System.out.println("You must enter a letter. Try again!");
                } else {
                    checkForMatch(guessletter);
                }

                // refactored all inner loops into checkForMatch() and reduceLives()
            }

            System.out.println("Game over, you " + (lives > 0 ? "won" : "lost"));   
        } catch (Exception e) {
            System.err.println("Error: " + e.getMessage());
        }
    }

    private void checkForMatch(String letter) {
        boolean found = false;

        for (int i = 0; i < aOfWord.length; i++) {
            if (letter.charAt(0) == aOfWord[i]) {
                found = true;
                hiddenWord[i] = letter.charAt(0);
                // removed break when found to allow searching entire word
            }
            // removed else condition to avoid clearing 'found' when searching rest of word
        }

        if(!found) {
            // reduceLives() will also print new hangman 
            reduceLives();
        }

        // printing summary
        showStatus();
    }

    private void reduceLives() {
        lives = lives - 1;

        switch (lives) {
        case 6:
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   ");
            System.out.println("|   ");
            System.out.println("|   ");

            break;
        case 5:

            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   o");
            System.out.println("|    ");
            System.out.println("|    ");

            break;
        case 4:
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   o");
            System.out.println("|   | ");
            System.out.println("|    ");

            break;
        case 3:
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   o");
            System.out.println("|  /| ");
            System.out.println("|    ");

            break;
        case 2:
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   o");
            System.out.println("|  /|\\ ");
            System.out.println("|    ");

            break;
        case 1:
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   o");
            System.out.println("|  /|\\ ");
            System.out.println("|    \\");

            break;
        case 0:
            System.out.println("_____");
            System.out.println("|   |");
            System.out.println("|   o");
            System.out.println("|  /|\\");
            System.out.println("|  / \\");

            break;
        }

    }

    private void showStatus() {
        System.out.println("Lives remaining: " + lives);
        System.out.println("Word found so far " + new String(hiddenWord));
    }
}