C# 如何解决StringBuilder问题?
我在做什么:使用C# 如何解决StringBuilder问题?,c#,string,stringbuilder,C#,String,Stringbuilder,我在做什么:使用StringBuilder替换字符串中的变量,以生成包含变量的问题 string question; void CreateNewQuestion() { Random rnd = new Random(); int questionNumber = rnd.Next(1, 4); //Generate a random question number int a = rnd.Next(1, 10); //Create random numbers so
StringBuilder
替换字符串中的变量,以生成包含变量的问题
string question;
void CreateNewQuestion()
{
Random rnd = new Random();
int questionNumber = rnd.Next(1, 4); //Generate a random question number
int a = rnd.Next(1, 10); //Create random numbers so the question is different each time
int b = rnd.Next(1, 15);
int c = rnd.Next(1, 15);
string q = questionNumber.ToString();
StringBuilder sbq = new StringBuilder("Question" +q);//StringBuilder is now called to replace the randomly called for question with its new variables
sbq.Replace("Question1", $"What is {a} + {a} ?");
sbq.Replace("Question2", $"What is {a} + {b} ?");
sbq.Replace("Question3", $"What is {a*c} + {a} ?"");
question = sbq.ToString();
}
问题:如果字符串q
(正在修改的字符串)=“问题1”,StringBuilder.Replace
将不仅仅停留在sb。Replace(“问题1”…)
仍将计算问题2和3。因此,随着问题数量的增加,这个问题的效率也随之提高
问题:如何创建包含变量的问题,以便在同一问题结构中有效地提供变量?我建议使用
字典:
Random rnd=new Random();
int questionNumber=rnd.Next(1,4)//生成一个随机问题编号
INTA=下一个(1,10)的rnd//创建随机数,使问题每次都不同
int b=下一个(1,15)的rnd;
int c=下一个(1,15)的rnd;
新字典
{
{1,“什么是“+a+”+“+a+”?”},
{2,“什么是“+a+”+“+b+”?”},
{3,“什么是“+(a*b)+”+“+c+”?”},
};
var-question=string.Empty;
if(问题.TryGetValue(问题编号,问题外))
{
//密钥存在,您可以在此处阅读您的问题
}
更新:
如果希望在一个函数中创建字典,在另一个函数中创建随机数,则必须有一个目标函数:
static Random rnd = new Random();
static void Main(string[] args)
{
int questionQuantity = 15;
var questions = new Dictionary<int, string>();
for (int i = 0; i < questionQuantity; i++)
{
int variableCount = rnd.Next(17);
var variables = CreateVariables(variableCount);
var signs = CreateSigns(variableCount - 1);
var question = CreateQuestion(variables, signs);
questions.Add(i, question);
}
}
public static List<int> CreateVariables(int variableQuantity)
{
var variables = new List<int>();
for (int i = 0; i < variableQuantity; i++)
{
variables.Add(rnd.Next(1, 15));
}
return variables;
}
public static List<char> CreateSigns(int variableQuantity)
{
var operators = new char[] {'+', '-', '/', '*' };
var randomOperators = new List<char>();
for (int i = 0; i < variableQuantity; i++)
{
randomOperators.Add(operators[ rnd.Next(0, 3) ]);
}
return randomOperators;
}
public static string CreateQuestion(List<int> variables, List<char> operations)
{
StringBuilder sb = new StringBuilder();
sb.Append("What is ");
for (int i = 0, j = 0; i < variables.Count; i++)
{
sb.Append(variables[i]);
if (i % 2 != 0)
{
sb.Append(" ");
sb.Append(operations[j]);
sb.Append(" ");
j++;
}
}
sb.Append("?");
return sb.ToString();
}
static Random rnd=new Random();
静态void Main(字符串[]参数)
{
数量=15;
var questions=newdictionary();
for(int i=0;i
和其他职能:
static Random rnd = new Random();
static void Main(string[] args)
{
int questionQuantity = 15;
var questions = new Dictionary<int, string>();
for (int i = 0; i < questionQuantity; i++)
{
int variableCount = rnd.Next(17);
var variables = CreateVariables(variableCount);
var signs = CreateSigns(variableCount - 1);
var question = CreateQuestion(variables, signs);
questions.Add(i, question);
}
}
public static List<int> CreateVariables(int variableQuantity)
{
var variables = new List<int>();
for (int i = 0; i < variableQuantity; i++)
{
variables.Add(rnd.Next(1, 15));
}
return variables;
}
public static List<char> CreateSigns(int variableQuantity)
{
var operators = new char[] {'+', '-', '/', '*' };
var randomOperators = new List<char>();
for (int i = 0; i < variableQuantity; i++)
{
randomOperators.Add(operators[ rnd.Next(0, 3) ]);
}
return randomOperators;
}
public static string CreateQuestion(List<int> variables, List<char> operations)
{
StringBuilder sb = new StringBuilder();
sb.Append("What is ");
for (int i = 0, j = 0; i < variables.Count; i++)
{
sb.Append(variables[i]);
if (i % 2 != 0)
{
sb.Append(" ");
sb.Append(operations[j]);
sb.Append(" ");
j++;
}
}
sb.Append("?");
return sb.ToString();
}
公共静态列表CreateVariables(int-variableQuantity)
{
var变量=新列表();
对于(int i=0;i
考虑使用switch语句
Random rnd = new Random();
int a = rnd.Next(1, 10); //Create random numbers so the question is different each time
int b = rnd.Next(1, 15);
int c = rnd.Next(1, 15);
string question;
switch (rnd.Next(1, 4)) {
case 1: {
question = "What is " + a + " + " + a + " ?";
break;
}
case 2: {
question = "What is " + a + " + " + b + " ?";
break;
}
case 3: {
question = "What is " + (a * b) + " + " + c + " ?";
break;
}
default: {
question = "Default Value";
break;
}
}
C#8:
为了增加可读性,我建议您使用以下表单:$“什么是{a}+{b}?”
。它帮助很大,特别是在字符串连接+与数学+混合的情况下。您的代码没有多大意义。你把“Question”+q放入一个字符串中,然后立即用与问题编号无关的其他内容替换它。嗨,更新了这样做-我希望它有帮助,然后我将字符串“What is{a}+{b}?”
放入数组或字典中,并按问题编号查找它们。将它们设置为字符串格式,以便您仍然可以填充孔。请参见“是”,它们可以具有单独的功能。我必须查看您的代码才能知道错误所在。使用数组,通过index@irdis:数组的大小是固定的。@Irdis字典用于OP希望键为字符串
值的情况,例如,问题1
,正如他在问题中所说。这是一件艺术品,谢谢!真是不可思议answer@kizzer非常感谢你!对我来说,这意味着整个世界!祝你今天愉快!:)嗨,彼得,我能把int放在一个函数中吗?这个函数在每一个例子的开头都会被调用?那么,每次生成问题时,都会选择新的变量?你认为这是有效的吗?感谢you@kizzer您的意思是将int传递给函数(其中包含switch语句),然后返回结果吗?