gpt4 book ai didi

java - 命令行输入问题 (Java)

转载 作者:行者123 更新时间:2023-12-01 12:14:27 24 4
gpt4 key购买 nike

我有一个程序,可以读取 CFL 的特定语法并输出起始符号的单独产生式,但由于某种原因,传递命令行参数不起作用。

我尝试在程序中使用名为inputString[]并使用它似乎提供了输出,但是当我尝试使用特定的运行程序时从命令行执行命令时,我收到错误。

代码如下:

    char[][] prod; int prodCount = 0, numProds = 0;
String[] input = new String[] {"a","a","S","b","X",
"a","a","S","a","X",
"a","S","a","X"};

for(int i = 0; i < input.length; i++) {
if(input[i] == "X")
prodCount++;
}

if(input[input.length - 1] == "X") {
prod = new char[prodCount + 1][1];
prod[prod.length - 1][0] = '\0';
} else
prod = new char[prodCount][];

int current = 0;
for(int i = 0; i < input.length; i++) {
if(input[i] == "X") {
prod[current] = new char[numProds];
current++; numProds = 0;
} else
numProds++;
}

int currentTerminal = 0; current = 0;
for(int i = 0; i < input.length; i++) {
if(input[i] == "X") {
currentTerminal = 0;
current++;
}
else {
prod[current][currentTerminal] = input[i].charAt(0);
currentTerminal++;
}
}

for(int i = 0; i < prod.length; i++) {
for(int j = 0; j < prod[i].length; j++) {
if(prod[i][j] == '\0')
System.out.print("E");
else
System.out.print(prod[i][j]);
}
System.out.println();
}

将此代码与 String[] 输入 结合使用会给我

aaSb
aaSa
aSa
E

但是,当我尝试使用命令行输入时,我得到...

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
Line 36

这是上面错误所指向的行

prod[current][currentTerminal] = args[i].charAt(0);

我不确定 String[] inputString[] args 之间有什么不同。有人可以让我知道我在哪里犯了错误吗?

最佳答案

您的索引在此超出范围: for(int j = 0; j < prod[i].length; j++) {

因为prod是一个新的 NULL 数组,定义如下:

  if(input[input.length - 1] == "X") { //This is the problem line
prod = new char[prodCount + 1][1];
prod[prod.length - 1][0] = '\0';
} else
prod = new char[prodCount][];

您不能使用 == 来比较字符串。由于此比较将始终评估为 FALSE(在此特定片段中),因此您声明 prod与此行:prod = new char[prodCount][]; 每次。请注意,在代码中的其他任何地方都不能更改此数组或为其分配任何内容。因此,当您稍后尝试访问不存在的索引时,您会收到越界信息。

将代码更改为使用 String::equals(),如下所示:

  if(input[input.length - 1].equals("X") { //Here's the fix
prod = new char[prodCount + 1][1];
prod[prod.length - 1][0] = '\0';
} else
prod = new char[prodCount][];

编辑:

我应该澄清一下,您需要在整个代码中进行此更改,因为您使用 ==操作符多次,而不仅仅是在上面的代码片段中。

关于java - 命令行输入问题 (Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27097473/

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