提问人:Beau Moody 提问时间:3/22/2023 更新时间:3/22/2023 访问量:18
将数组更改为 ArrayList 后修改程序中的方法
Modifying methods in my program after changing an array to an ArrayList
问:
这是我写的,第 71、74、77、78、79、82、84、85、89、90、91、94、96 和 104 行有错误。这些都是在我更改数组 String[] 标记后出现的;to 和 ArrayList。这是我在下面的代码。
public void processProgram() {
//Declare Variables
String fileName;
String line;
ArrayList tokens = new ArrayList();
HashMap<String, Double> variables = new HashMap<String, Double>();
int lineNumber = 0;
//Get File Name
fileName = getFileName();
//Error Checking
if(fileName == null) {
errors.setText("Error: No file selected");
return;
}
//Open File
try {
BufferedReader reader = new BufferedReader(new FileReader(fileName));
//Read File
while((line = reader.readLine()) != null) {
lineNumber++;
tokens = line.split(" ");
//Check for GOTO Statement
if(tokens.equals("GOTO")) {
lineNumber = Integer.parseInt(tokens);
}
//Check for Conditional Statement
else if(tokens[0].equals("IF")) {
double value = Double.parseDouble(tokens[3]);
double checkValue = variables.get(tokens[1]);
//Check if statement is true
if(checkValue == value) {
tokens = Arrays.copyOfRange(tokens, 5, tokens.length);
//Evaluate expression
double expressionValue = evaluateExpression(tokens, variables);
variables.put(tokens[0], expressionValue);
}
}
//Check for Assign Statement
else if(tokens.length == 3 && tokens[1].equals("=")) {
double expressionValue = evaluateExpression(tokens, variables);
variables.put(tokens[0], expressionValue);
}
//Check for Print Statement
else if(tokens[0].equals("PRINT")) {
try {
double printValue = variables.get(tokens[1]);
result.append(String.format("%.2f", printValue) + "\n");
} catch (NullPointerException e) {
errors.setText("Error: Line " + lineNumber + ": Variable not declared");
return;
}
}
//Check for End Statement
else if(tokens[0].equals("END")) {
return;
}
//Error Handling
else {
errors.setText("Error: Line " + lineNumber + " is invalid");
return;
}
}
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
//Evaluate Expression
public double evaluateExpression(String[] tokens, HashMap<String, Double> variables) {
double result = 0;
//Loop through expression
for(int i = 0; i < tokens.length; i++) {
if(i == 0) {
result = Double.parseDouble(tokens[i]);
}
//Check for operator
else if(tokens[i].equals("+")) {
result += Double.parseDouble(tokens[i+1]);
i++;
} else if(tokens[i].equals("-")) {
result -= Double.parseDouble(tokens[i+1]);
i++;
} else if(tokens[i].equals("*")) {
result *= Double.parseDouble(tokens[i+1]);
i++;
} else if(tokens[i].equals("/")) {
result /= Double.parseDouble(tokens[i+1]);
i++;
} else {
try {
result += variables.get(tokens[i]);
} catch (NullPointerException e) {
errors.setText("Error: Variable not declared");
return -1;
}
}
}
return result;
}
}
我对编程非常陌生,我尝试查找 ArrayLists 而不是数组的修改方法,因为我们不允许在这个实验室中使用它们。我非常困住,不知道该怎么办。
答:
1赞
Allison Chen
3/22/2023
#1
Arrays
并且是不同的。如果更改为 list,则应使用 代替 。List
tokens
tokens.get(i)
tokens[i]
评论