gpt4 book ai didi

java - 当我尝试重新定义变量时,出现索引越界错误

转载 作者:行者123 更新时间:2023-12-01 23:29:01 25 4
gpt4 key购买 nike

我正在构建一个程序来充当带内存的计算器,这样您就可以给出变量及其值。每当我尝试将变量 a = 5 重新定义为 a = 6 时,都会出现索引越界错误。

public static void main(String args[])
{
LinkedHashMap<String,Integer> map = new LinkedHashMap<String,Integer>();
Scanner scan = new Scanner(System.in);
ArrayList<Integer> values = new ArrayList<>();
ArrayList<String> variables = new ArrayList<>();

while(scan.hasNextLine())
{
String line = scan.nextLine();
String[] tokens = line.split(" ");


if(!Character.isDigit(tokens[0].charAt(0)) && !line.equals("clear") && !line.equals("var"))
{
int value = 0;
for(int i=0; i<tokens.length; i++)
{
if(tokens.length==3)
{
value = Integer.parseInt(tokens[2]);
System.out.printf("%5d\n",value);
if(map.containsKey(tokens[0]))
{
values.set(values.indexOf(tokens[0]), value);
variables.set(variables.indexOf(tokens[0]), tokens[0]);
}
else
{
values.add(value);
}
break;
}

else if(tokens[i].charAt(0) == '+')
{
value = addition(tokens, value);
System.out.printf("%5d\n",value);
variables.add(tokens[0]);
if(map.containsKey(tokens[0]))
{
values.set(values.indexOf(tokens[0]), value);
variables.set(variables.indexOf(tokens[0]), tokens[0]);
}
else
{
values.add(value);
}
break;
}

else if(i==tokens.length-1 && tokens.length != 3)
{
System.out.println("No operation");
break;
}
}
map.put(tokens[0], value);

}

if(Character.isDigit(tokens[0].charAt(0)))
{
int value = 0;
if(tokens.length==1)
{
System.out.printf("%5s\n", tokens[0]);
}

else
{
value = addition(tokens, value);
System.out.printf("%5d\n", value);
}
}

if(line.equals("clear"))
{
clear(map);
}

if(line.equals("var"))
{
variableList(variables, values);
}
}
}

public static int addition(String[] a, int b)
{
for(String item : a)
{
if(Character.isDigit(item.charAt(0)))
{
int add = Integer.parseInt(item);
b = b + add;
}
}
return b;
}

public static void clear(LinkedHashMap<String,Integer> b)
{
b.clear();
}

public static void variableList(ArrayList<String> a, ArrayList<Integer> b)
{
for(int i=0; i<a.size(); i++)
{
System.out.printf("%5s: %d\n", a.get(i), b.get(i));
}
}

我包含了整个代码,因为我不确定错误是从哪里产生的。

Error

我假设错误是由于将值存储在 ArrayList 中而引起的。

最佳答案

这一行:

values.set(values.indexOf(tokens[0]), value);

正在抛出ArrayIndexOutOfBoundsException

您正在查找变量名称“a”当前存在的values,显然是为了覆盖它。

但是,这是没有意义的:valuesIntegerList,因此它永远不会包含您的变量名称 “一个”

因此,List.indexOf(Object) 返回-1。当您尝试调用 List.set(E, int) 并传递 -1 时,它将崩溃。

关于java - 当我尝试重新定义变量时,出现索引越界错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19612289/

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