c# - Visual Studio 中没有错误,代码执行但 C# 不正确(更新!String.Insert 中的问题)
问题描述
我正在编写一个作业程序,它应该生成一个 10 000 个“电影”列表。单个“电影”由“电影名称年份导演”形式的字符串组成。我说“电影”是因为电影名称和导演应该是用 az 的字母随机生成的。
我编写了以下逻辑来生成这样一部“电影”。电影名称和导演是长度在 4-10 个字符之间的随机字母组合。代码在 Visual Studio 中没有给出错误,执行,但显示空白。如果我写得正确,那么这段代码应该生成一个这样的字符串并打印出来,但控制台是空白的。
执行 while 循环以检查列表中是否存在双项(尽管不太可能)(这是用于我执行 10 000 版本时)。
简而言之,我不明白我做错了什么?
using System;
using System.Collections.Generic;
using System.Linq;
namespace Experiment
{
class Program
{
static void Main(string[] args)
{
Movies();
Console.ReadKey();
}
public static void Movies()
{
List<string> movieList = new List<string>();
bool check = false;
do
{
string movie = "";
for (int i = 0; i < GetNum(); i++)
{
movie.Insert(0, Convert.ToString(GetLetter()));
}
movie.Insert(0, " ");
movie.Insert(0, Convert.ToString(GetYear()));
movie.Insert(0, " ");
for (int i = 0; i < GetNum(); i++)
{
movie.Insert(0, Convert.ToString(GetLetter()));
}
if (movieList.Contains(movie))
{
check = false;
}
else
{
movieList.Add(movie);
check = true;
}
} while (check == false);
Console.WriteLine(movieList[0]);
}
public static Random _random = new Random();
public static char GetLetter()
{
int num = _random.Next(0, 26);
char let = (char)('a' + num);
return let;
}
public static int GetNum()
{
int num = _random.Next(4, 11);
return num;
}
public static int GetYear()
{
int num = _random.Next(1920, 2020);
return num;
}
}
}
解决方案
字符串是不可变的,因此调用Insert()
电影字符串上的方法不会对当前电影变量做任何事情。相反,它返回新字符串。
但是,您最好将电影类型从 更改string
为StringBuilder
,这是一个动态分配的字符缓冲区,因此您的示例变为:
using System;
using System.Text;
using System.Collections.Generic;
namespace sotest
{
class Program
{
static void Main(string[] args)
{
Movies();
Console.ReadKey();
}
public static void Movies()
{
List<string> movieList = new List<string>();
bool check = false;
do
{
StringBuilder movie = new StringBuilder();
for (int i = 0; i < GetNum(); i++)
{
movie.Insert(0, Convert.ToString(GetLetter()));
}
movie.Insert(0, " ");
movie.Insert(0, Convert.ToString(GetYear()));
movie.Insert(0, " ");
for (int i = 0; i < GetNum(); i++)
{
movie.Insert(0, Convert.ToString(GetLetter()));
}
if (movieList.Contains(movie.ToString()))
{
check = false;
}
else
{
movieList.Add(movie.ToString());
check = true;
}
} while (check == false);
Console.WriteLine(movieList[0]);
}
public static Random _random = new Random();
public static char GetLetter()
{
int num = _random.Next(0, 26);
char let = (char)('a' + num);
return let;
}
public static int GetNum()
{
int num = _random.Next(4, 11);
return num;
}
public static int GetYear()
{
int num = _random.Next(1920, 2020);
return num;
}
}
}
推荐阅读
- c# - 用户选择一个项目并搜索一个数组以查找并计算所有被选中项目的出现次数
- php - 永久链接结构更改后 PHP 未运行 (WORDPRESS)
- c++ - 如果我的班级成员的类型与类型匹配,如何进行编译时 type_check 并仅编译我的班级的一部分?
- python - 如何以随机顺序打印列表中的单词,以便每个单词只打印一次(使用 Python)
- android - 如果我使用异步任务,OnDestroy 方法不起作用
- ios - QueryEndingAtValue 函数在 Swift firebase 中无法正常工作
- spring - 如何在spring-boot中实现JWT令牌中的用户信息?
- r - 有限输出:PLM R
- ios - 在自动布局ios中的xib中添加“常量”值
- html - 无法更改 angular4 中过滤数据长度的值