Java 刽子手从数组中删除猜测的字母

Java 刽子手从数组中删除猜测的字母,java,arrays,Java,Arrays,我在编写我的刽子手程序时遇到了一个障碍,我帮助从数组中删除了我已经正确猜到的字母这是我的代码: import java.nio.charset.Charset; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Random; import java.util.Scanner; public cla

我在编写我的刽子手程序时遇到了一个障碍,我帮助从数组中删除了我已经正确猜到的字母这是我的代码:

import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.Random;
import java.util.Scanner;
public class Game {
    public Game(){

        start();

    }

    public static void start()
    {
        Scanner scan = new Scanner(System.in);
        Random rand = new Random();
        String [] Words = {"Dog","cat","Food","Bacon","Turkey","hood","poo","Good","look"};//initializes the array
        String RandomWord = Words[rand.nextInt(Words.length)];//picks a random word from the char array and stores it in a variabe
        char [] array = RandomWord.toCharArray();//converts the randomly generated word from the array into a char array
        int i = 0;//counter
        char input = 0;
        int WinCounter = 0;//counts the number of wins
        System.out.println("You have a "+RandomWord.length()+" letter word "+RandomWord);
        int tries = 20;
        int wrongCounter = 0;
        ArrayList<Character> list = new ArrayList<Character>();

        while(i<tries){

            i++;

            hangMan(wrongCounter);


            System.out.println("Guess a letter : ");
            input = scan.next().charAt(0);
            list.add(input);
            System.out.println("Guessed Letters are : "+guessedLetters(input,list));

            for(int j = 0; j<noDuplicates(array).length;j++){

                if(findCorrect(array,input, list)+removeCaseSensitive(array,input)>0){
                    j++;

                    System.out.println("You got it right");
                    //System.out.println(noRepeat(list,input));
                    WinCounter++;
                    break;

                }
                else if(!(input ==noDuplicates(array)[j])){

                    System.out.println("You got it wrong");
                    //System.out.println(noRepeat(list,input));
                    wrongCounter++;
                    break;


                }

            }
            if(WinCounter == noDuplicates(array).length)//tests to see if the player won
            {
                System.out.println("You have Won!");
                break;
            }
            else if(hangMan(wrongCounter)){
                break;
            }
        }

        System.out.println();
    }

    public static boolean hangMan(int wrongCounter) {
        boolean isOver= false;
        System.out.println("------------|");
        switch(wrongCounter){
        case 1:
            System.out.println("|           O");
            break;
        case 2 :
            System.out.println("|           O");
            System.out.print("|          /");

            break;
        case 3:
            System.out.println("|           O");
            System.out.print("|          /|\\");
            System.out.println();
            break;
        case 4 : 
            System.out.println("|           O");
            System.out.print("|          /|\\");
            System.out.println();
            System.out.println("|          /");
            break;
        case 5:
            System.out.println("|           O");
            System.out.print("|          /|\\");
            System.out.println();
            System.out.println("|          / \\");
            System.out.println("You lost");
            isOver = true;
            break;
        }
        for(int i = 0;i<7;i++)
            System.out.println("|");
        return isOver;

    }

    //removes all duplicates from the array
    private static char[] noDuplicates(char[] a) {
        HashSet<Integer> keys = new HashSet<Integer>();
        char[] result = new char[a.length];
        int j = 0;
        for (int i = 0 ; i < a.length; i++) {

            if (keys.add((int) a[i])) {
                result[j] = a[i];
                j++;
            }
        }
        return Arrays.copyOf(result, j);
    }
    //tests to see if the users input it equal to any of the letters in the array
    public static int findCorrect(char [] a,char Input,ArrayList list){

        int count = 0;
        for(int i = 0;i<noDuplicates(a).length;i++){
            if(noDuplicates(a)[i]==Input)
                count++;


        }
        return count;
    }
    //removes case sensitivity 
    public static int removeCaseSensitive(char [] a,char Input){
        int count = 0;
        for(int i = 0;i<noDuplicates(a).length;i++)
        {

            if(Character.toLowerCase(Input)==Character.toLowerCase(noDuplicates(a)[i]))
                count++;
            else if(Character.toUpperCase(Input)==Character.toUpperCase(noDuplicates(a)[i]))
                count++;


        }
        return count;

    }
    public static String guessedLetters(char input,ArrayList List){
        List.add(input);
        StringBuilder sb = new StringBuilder(List.size());
        for (int i = 0; i < List.size(); i++) {
            sb.append(List.get(i));
            if (i < List.size() - 1) {
                sb.append(" ");
            }
        }

        return sb.toString();   


    }

}
import java.nio.charset.charset;
导入java.util.ArrayList;
导入java.util.array;
导入java.util.Collection;
导入java.util.HashSet;
导入java.util.Random;
导入java.util.Scanner;
公开课游戏{
公共游戏(){
start();
}
公共静态void start()
{
扫描仪扫描=新扫描仪(System.in);
Random rand=新的Random();
String[]Words={“Dog”、“cat”、“Food”、“Bacon”、“火鸡”、“hood”、“poo”、“Good”、“look”};//初始化数组
String RandomWord=Words[rand.nextInt(Words.length)];//从字符数组中选择一个随机字,并将其存储在变量中
char[]array=RandomWord.toCharArray();//将数组中随机生成的单词转换为char数组
int i=0;//计数器
字符输入=0;
int WinCounter=0;//统计获胜次数
System.out.println(“您有一个“+RandomWord.length()+”字母词“+RandomWord”);
int=20;
int错误计数器=0;
ArrayList=新建ArrayList();

而(我使用列表而不是数组,然后你可以使用List remove()方法来删除项目。

我建议你告诉我们问题的确切原因。设置
可能会更好,效率更高(尽管大多数字母表的大小都很小,这不是什么大问题)而且在语义上更合适。OP可能试图跟踪猜测(或保持未使用)的集合字母。就字母表的大小而言,它实际上不太可能更有效率——对于小型集合来说,集合的额外复杂性、内存使用等都不值得,除非您确实需要强制执行唯一性。但我同意,在这种情况下,应该考虑
set
。问题是,我的整个程序都是基于数组或至少是mo重构是一件好事,也不是坏事,正如你所了解的,你会发现自己一直在做这件事(我现在还是这样!):)数组非常有限,诚实地说,使用集合。