簡體   English   中英

從數組中識別未使用的字母

[英]Identifying Unused Letters from an array

我正在 Java 中編寫一個劊子手程序,但我遇到的問題是,在游戲中我想顯示猜測的字母中的剩余字母,為此我創建了一個包含字母的字符串 alpha,我把它到 ArrayList,這樣我就可以選擇玩家猜測的字母。 但我被困在這一點上,我想得到的輸出如下:我還附上了我為 function 編寫的代碼。

你還有 6 個猜測。 可用字母:abcdefghijklmnopqrstuvwxyz 請猜一個字母:a

好猜測:a_ _

你還有 6 個猜測。 可用字母:bcdefghijklmnopqrstuvwxyz

代碼:

public String getRemainingLetters(String[] lettersGuessed) {

    String alpha = "abcdefghijklmnopqrstuvwxyz";        
    String [] alpha2 = alpha.split("");          
    ArrayList<String> list = new ArrayList<>(Arrays.asList(alpha2));

    return null;
    // TODO: Fill in your code here
}

在這里,您可以對其進行美化並及時檢查錯誤:)

import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;


public class Main
{
  public static List < String > getRemainingLetters (ArrayList < String >
                             lettersGuessed)
  {
    String alpha = "abcdefghijklmnopqrstuvwxyz";
      String[] alpha1 = alpha.split ("");
      ArrayList < String > alpha2 = new ArrayList <> (Arrays.asList (alpha1));
    for (int i = 0; i < lettersGuessed.size (); i++)
      {
        for (int j = 0; j < alpha2.size (); j++)
          {
            if (alpha2.get (j).equals (lettersGuessed.get (i)))
              {
            alpha2.remove (j);
            break;
              }
          }
      }
    return alpha2;
  }


  public static void main (String[]args)
  {
    int numGuesses = 10;
    String w = "this";
    String[]word = w.split ("");
    ArrayList < String > wList = new ArrayList <> (Arrays.asList (word));
    ArrayList < String > wAnswer = new ArrayList < String > (wList.size ());
    for (int i = 0; i < wList.size (); i++)
      {
        wAnswer.add ("_ ");
      }
    int left = wList.size();
    Scanner scanner = new Scanner (System.in);
    boolean notDone = true;
    ArrayList < String > lettersGuessed = new ArrayList < String > ();

    while (notDone)
      {
        System.out.println ();
        String sOut = "";

        List < String > lettersLeft = getRemainingLetters (lettersGuessed);
          for (String s:lettersLeft)
          {
            sOut += s + " ";
          }
        System.out.println ("Letters Left: " + sOut );

        sOut = "";
        for (int i = 0; i < wList.size (); i++)
          {
            sOut += wAnswer.get (i);
          }
        System.out.println (sOut + " Guesses left:" + numGuesses);
        System.out.print ("Enter a letter(* exit): ");
        String sIn = scanner.next ();
        numGuesses--;
        if (sIn.equals ("*")){
          break;
        }
        lettersGuessed.add (sIn);
        for (int i = 0; i < wList.size (); i++)
          {
            if (sIn.equals (wList.get (i)))
              {
                wAnswer.set (i, sIn);
                left--;
              }
          }
          if(left == 0){
              System.out.println ("Congradulations you guessed it!");
              break;
          }
          if(numGuesses == 0){
              System.out.println ("You failed...:(");
              break;
          }

      }


  }

}

列表#removeAll & 字符串#join

如下所示使用它們來解決問題:

static String getRemainingLetters(String[] lettersGuessed) {
    String alpha = "abcdefghijklmnopqrstuvwxyz";
    String[] alpha2 = alpha.split("");
    List<String> list = new ArrayList<>(Arrays.asList(alpha2));
    List<String> toBeRemoved = new ArrayList<>(Arrays.asList(lettersGuessed));
    list.removeAll(toBeRemoved);
    return String.join("", list);
}

演示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        // Tests
        System.out.println(getRemainingLetters(new String[] { "a", "b", "c" }));
        System.out.println(getRemainingLetters(new String[] { "d" }));
        System.out.println(getRemainingLetters(new String[] { "x", "y", "z" }));
        System.out.println(getRemainingLetters(new String[] { "x" }));
    }

    static String getRemainingLetters(String[] lettersGuessed) {
        String alpha = "abcdefghijklmnopqrstuvwxyz";
        String[] alpha2 = alpha.split("");
        List<String> list = new ArrayList<>(Arrays.asList(alpha2));
        List<String> toBeRemoved = new ArrayList<>(Arrays.asList(lettersGuessed));
        list.removeAll(toBeRemoved);
        return String.join("", list);
    }
}

Output:

defghijklmnopqrstuvwxyz
abcefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvw
abcdefghijklmnopqrstuvwyz

交互式演示:

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        StringBuilder consumed = new StringBuilder();
        final int NO_OF_GUESSES = 6;
        Scanner kb = new Scanner(System.in);
        String guess;
        for (int i = 1; i <= NO_OF_GUESSES; i++) {
            System.out.println("Available letters: " + getRemainingLetters(consumed.toString().split("")));
            System.out.print("Guess a letter: ");
            guess = kb.nextLine();
            consumed.append(guess.length() >= 1 ? guess.charAt(0) : "");
            System.out.printf("You have %d chances left%n", NO_OF_GUESSES - i);
        }
    }

    static String getRemainingLetters(String[] lettersGuessed) {
        String alpha = "abcdefghijklmnopqrstuvwxyz";
        String[] alpha2 = alpha.split("");
        List<String> list = new ArrayList<>(Arrays.asList(alpha2));
        List<String> toBeRemoved = new ArrayList<>(Arrays.asList(lettersGuessed));
        list.removeAll(toBeRemoved);
        return String.join("", list);
    }
}

示例運行:

Available letters: abcdefghijklmnopqrstuvwxyz
Guess a letter: a
You have 5 chances left
Available letters: bcdefghijklmnopqrstuvwxyz
Guess a letter: x
You have 4 chances left
Available letters: bcdefghijklmnopqrstuvwyz
Guess a letter: 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM