当前位置: 首页 > 知识库问答 >
问题:

从数组中识别未使用的字母

宰父淳
2023-03-14

我在Java写一个刽子手程序,但我的问题是,在游戏中,我想显示猜测字母的剩余字母,因为我已经创建了一个字符串alpha,其中包含字母表,我把它一个数组列表,这样我就可以选择玩家猜测的字母。但是我被困在这一点上,我想得到的输出如下:我还附上了我为函数编写的代码。

你还有6个猜测。可用字母:abcdefghijklmnopqrstuvwxyz请猜一个字母:a

你还有6个猜测。可用信函:bcdefghijklmnopqrstuvxyz

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
}

共有2个答案

施令雪
2023-03-14

在这里,你可以漂亮起来,并把错误检查im的时间:)

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;
          }

      }


  }

}
龙正初
2023-03-14

如下所示使用它们来解决问题:

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);
    }
}

输出:

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: 
 类似资料:
  • 我正在编写一个程序,处理两个原型消息,我需要处理从不同来源发送的字节[],这些来源发送foo消息或bar消息。由于我无法弄清楚它属于哪个消息,我使用任何类(附带的协议)来解析字节数组并找到它属于哪个类,但遇到了编译时错误。如果我将来添加更多的原型消息类,我可以使用其他方法来检测吗? 第二个原型 代码: 尝试调用any时if语句出错。is(): 方法是(类

  • 我正在尝试识别使用for循环提供的输入中是否有数字。我已经尝试了很长时间,甚至在Google的第二页上进行了搜索。我决定寻求一些帮助。到目前为止,我已经尝试了以下内容: 基本上,我试着扫描每个字母,然后分别测试它们是字母还是数字,这就是我遇到的问题,因为只扫描第一个字母。我也试着在循环中输入“c”。我怎么扫描每封信? 编辑:哎呀,那是个错误。我把它改成c=c 1,但它不起作用,我把它改回c,但它最

  • 问题内容: 我想识别列表中的连续数字组,以便: 返回值: 并且想知道实现此目的的最佳方法是什么(特别是如果Python内置了某些东西)。 编辑:注意,我最初忘记提及个人数字应作为个人数字而不是范围返回。 问题答案: 是在4.0版中添加的。 演示版 应用此工具,我们将生成一个生成器函数来查找连续数字的范围。 所述源执行模拟一个经典配方(由@Nadia Alramli所证明)。 注意:more_ite

  • 问题内容: 我目前有一张来自画布上徒手画的点的数组列表。我想知道是否有一种简单的算法可以检测出该形状是否代表一个圆形,我已经对此进行了一些研究,我所指的主要项目是霍夫变换或具有位图图像,但两者似乎都有点过头了。我需要的顶部。任何指向算法或实现的指针都将非常有帮助。 在此先感谢您, 问题答案: 如果您不知道用户想要绘制什么内容(例如,圆形,椭圆形,直线或矩形),则可以使用一些基本的优化算法来找到与手

  • 问题内容: 我一直在寻找网络上图像识别数字的资源。我发现许多链接提供了有关该主题的大量资源。但不幸的是,这比提供帮助更令人困惑,我不知道从哪里开始。 我有一个带有5个数字的图像,没有打扰(没有验证码或类似的东西)。数字在白色背景上为黑色,以标准字体书写。 我的第一步是分离数字。我当前使用的算法非常简单,它只是检查一列是否完全为白色,因此是否为空格。然后,它会修剪每个字符,以使其周围没有白色边框。这

  • Hi识别专家, 我有很多的mp3文件(原创音源流采样是11.025千赫)包含数字(0-9)。 不同的说话者(男性/女性)说“一”、“七”、“三”等,中间有停顿(约2-2.5秒) 我要用CMU Sphinx来识别语音(桌面应用程序)。所以我有一些问题: > 声学模型:如果不对流进行上采样/下采样,如何找到支持11025 kHz的声学模型。如果我这样做,什么是最好的数字模型? 识别模式:我发现转录有两