c# - 获取未处理的异常:System.FormatException:当字符不包含在数组中时,字符串必须恰好是一个字符长
问题描述
我正在开发一个在控制台中运行的刽子手游戏,并尝试检查猜测的字母是否是存储在 char 数组中的单词的一部分。当我尝试运行它并输入一个正确的字母时,不会引发异常;但是,当我输入一个不属于该单词的字母时,我会收到一个 FormatException 说该字符串必须只有一个字符长。请记住,当我收到此异常时,我输入了一个字符。这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
Game game = new Game();
if(game.CheckAnswer())
{
Console.WriteLine("true");
}
else if(!game.CheckAnswer())
{
Console.WriteLine("false");
}
}
}
class Word
{
public static string GetWord()
{
string[] words = new string[5]{"alpha", "bravo", "charlie", "delta", "echo"};
Random random = new Random();
return words[random.Next(5)];
}
public char[] correctAnswer = GetWord().ToCharArray();
}
class Game
{
static char guessLetter;
static List<char> correctGuesses = new List<char>();
static List<char> incorrectGuesses = new List<char>();
Word word = new Word();
public bool CheckAnswer()
{
guessLetter = Convert.ToChar(Console.ReadLine());
if (word.correctAnswer.Contains(guessLetter))
{
return true;
}
else if (!word.correctAnswer.Contains(guessLetter))
{
return false;
}
else
{
return false;
}
}
}
是的,我检查了其他答案,不,他们没有解决我的问题。
解决方案
我的坏没有彻底检查你的代码。当您在 if else 情况下调用该方法时,它将运行它们。所以你检查了两次结果。
如果您输入的字母是错误的,它将在 if 和 else 两种情况下进行检查,这两种情况都会调用它两次。
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
Game game = new Game();
//dont call the method in if else save the result in a var first maybe
Console.WriteLine(game.CheckAnswer());
}
}
class Word
{
public static string GetWord()
{
string[] words = new string[5]{"alpha", "bravo", "charlie", "delta", "echo"};
Random random = new Random();
return words[random.Next(5)];
}
public char[] correctAnswer = GetWord().ToCharArray();
}
class Game
{
static char guessLetter;
static List<char> correctGuesses = new List<char>();
static List<char> incorrectGuesses = new List<char>();
Word word = new Word();
public bool CheckAnswer()
{
guessLetter = Convert.ToChar(Console.ReadLine());
//you can return the result directly
return word.correctAnswer.Contains(guessLetter);
}
}
推荐阅读
- amazon-web-services - 如何找出重复的 AWS CloudWatch 警报
- go - 自定义 golang sql.NullString Stringer 接口
- c# - 如何在 Unity3D Android 中创建日志文件?
- reactjs - 无法在 localhost 上打开 ReactJS 网站。从 Github 下载
- apache - 重定向 410 网址格式
- javascript - 猫鼬模式 [对象] 问题
- wordpress - 如何在插件安装时插入多个 Contact form7 预定义模板?
- swift - 使用具有通用关联类型的关联类型扩展类型
- vue.js - Vue3 vite:npm run serve 没有加载我所有的文件(结果:404)
- hadoop - hbase表顶部的凤凰视图问题