【问题标题】:my full array isn't being displayed我的完整数组没有显示
【发布时间】:2016-08-31 22:37:56
【问题描述】:

我应该创建一个从文本文件中选择随机单词的游戏。然后这个词被加扰并显示给用户。然后用户必须尝试猜测原始单词。完成后,他们按检查答案并显示它们是否正确。这是我第一次在 C# 中做任何事情(我已经习惯了 Java),所以如果适用的话,我将非常感谢基本的解释。我已经编写了大部分程序,但是当显示打乱的单词时,它不会显示整个打乱的单词,只有大约 3 个字母,有时每个单词有 3 个相同的字母。我查看了我的代码,但找不到问题所在。我做了一些快速测试,我知道文件正在被读入,并且 origWords[] 数组中确实存储了一个完整的单词。这使我相信问题出在 jumbleWords() 方法中。我感谢任何和所有的帮助。

编辑:我将代码缩减为我认为的问题区域。

private string jumbleWords(String origWord)
{
    // converts word to char array
    char [] charArray = origWord.ToCharArray();  
    // creates bool array with length of charArray
    bool [] letterCheck = new bool [charArray.Length];    
    for (int i = 0; i < letterCheck.Length; i++)
    { 
        letterCheck[i] = false;
    }

    Random letterAssign = new Random();
    string jumble = null;

    for (int index = 0; index < charArray.Length; index++)  //jumbling     of word
    {
        // picks random letter (number position of array)        
        int letterChosen = letterAssign.Next(charArray.Length);   
        if (letterCheck[letterChosen] == false) //check if letter has been used    
        {
            jumble += charArray[letterChosen];  //adds letter to jumble string
            // changes bool array position to true so it can't be used again        
            letterCheck[letterChosen] = true;   
        }
    }
    return jumble;
} 

【问题讨论】:

  • 查找 Fisher Yates Shuffle 并用它来混淆你的话。这不是 C# 语言问题,而是算法选择不当。
  • 但是我继续展示了整个程序。,这实际上适得其反。见How to create a Minimal, Complete, and Verifiable example。如果您认为jumbleWords 是您的问题,则编写一个仅测试该功能的MCVE,确认是问题所在,然后仅发布该代码。转储一大堆代码会让人们更难帮助你。
  • 我把它削减到问题区域。谢谢。

标签: c# arrays display


【解决方案1】:

当您检查某个特定字母是否已被使用时,如果它已被使用,您只需继续到下一个位置。相反,您需要再试一次,直到您收到一封未使用的信件。最简单的方法就是减少循环变量,以便它再次尝试插槽。

此外,您选择单词的逻辑没有检查是否已选择单词 - 您每次只需从整个文件中随机选择一个,因此您经常会以相同的单词结束并且再次。

【讨论】:

  • 感谢您的意见。我理解你的第二点,但我不确定如何在没有一堆笨重代码的情况下实现它。您的第一点可能是我一直遇到的问题吗?谢谢
  • 第一点是为什么每个单词只能得到几个字母。第二点是为什么你一遍又一遍地得到同一个词。要解决后者,您可能只需读取一次文件并使用相同的过程来选择您用来选择字母的单词(显然,一旦您解决了第一点的问题)
  • 好的。谢谢你。我认为它可能有效,但现在我在这部分收到异常错误。 char [] charArray = origWord.ToCharArray();
  • 如果您仍然遇到问题,最好发布另一个关于此的问题,因为这将是一个完全不同的主题。
猜你喜欢
  • 2021-10-02
  • 2017-02-13
  • 2013-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
相关资源
最近更新 更多