gpt4 book ai didi

c# - ArgumentOutOfRange 异常 C#

转载 作者:行者123 更新时间:2023-12-02 08:45:11 25 4
gpt4 key购买 nike

我正在做作业,我必须做一个程序,将文件中的简单字母(如 E 和 F)扩展到连续的作品,也在文件夹中给出,如 E+T E-F 等。无论如何显示的代码下面给了我一个参数超出范围的异常。我用 Java 编写了相同的代码,一切正常。我不知道为什么在 C# 中它会给我这个异常。请给我一些建议!!

我忘记放入我正在读取的文件:

电汇

a+()

E

E+T|E-T|T

T*F|T/F|F

一个|(E)

public void generare(){

String N = null;
String T = null;
String S = null;
String[] P = null;

TextReader tr = new StreamReader("dateIntrare.txt");

try
{

N = tr.ReadLine();
T = tr.ReadLine();
S = tr.ReadLine();
P = new String[N.Length];

for (int i = 0; i < N.Length; i++)
{
P[i] = tr.ReadLine();
}

tr.Close();

Console.WriteLine("Neterminale: N = " + N);
Console.WriteLine("Terminale: T = " + T);
Console.WriteLine("Productii ");

for (int i = 0; i < P.Length; i++)
Console.WriteLine("\t" + P[i]);

Console.WriteLine("Start: S = " + S);

Boolean gata = false;

String iesire = S.Substring(0, S.Length);

Console.WriteLine("\nRezultat");
Console.Write("\t");

while ((gata == false) && (iesire.Length < 50))
{

Console.Write(iesire);

Boolean ok = false;

for (int i = iesire.Length - 1; i >= 0 && ok == false; i--)
{
for (int j = 0; j < N.Length && ok == false; j++)
if (N[j] == iesire[i])
{
String s1 = iesire.Substring(0, i);
String s2 = iesire.Substring(i + 1, iesire.Length); // HERE IS THE EXCEPTION TAKING PLACE

String inlocuire = P[N.IndexOf(iesire[i])];
String[] optiuni = null;

String[] st = inlocuire.Split('|');
int k = 0;

foreach (String now in st)
{
k++;
}

optiuni = new String[k];
st = inlocuire.Split('|');

k = 0;

foreach (string next in st)
{
optiuni[k++] = next;
}

Random rand = new Random();
int randNr = rand.Next(optiuni.Length);

String inlocuireRandom = optiuni[randNr];

iesire = s1 + inlocuireRandom + s2;

ok = true;

}
}

if (ok == false)
{
gata = true;
}

else
{

if (iesire.Length < 50)
Console.Write(" => ");
}
}
}

catch (FileNotFoundException)
{
Console.WriteLine("Eroare, fisierul nu exista!");
}

Console.WriteLine();
}

最佳答案

But why in java works and here not? I'm confused

如有疑问,请阅读 the documentation .在 Java 中,substring 的 2 参数重载采用起始索引和结束索引。在 .NET 中,第二个参数是要获取的字符数,不是结束索引。

所以你可能想要

String s2 = iesire.Substring(i + 1, iesire.Length - i - 1);

或者为了更简单,只使用 1 参数版本,它从指定索引开始获取所有字符:

String s2 = iesire.Substring(i + 1);

(我也会在 Java 中使用它...)

但从根本上说,值得退后一步,弄清楚为什么你不能自己解决这个问题......即使你之前错过了:

  • 查看代码中引发异常的行
  • 查看哪个方法实际引发了异常(在本例中为 String.Substring)
  • 仔细查看异常消息(这是一个很好的提示!)以及任何嵌套的异常
  • 仔细阅读相关方法的文档,尤其是描述参数和异常的部分

关于c# - ArgumentOutOfRange 异常 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12992835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com