gpt4 book ai didi

Java.lang.NumberFormatException.forInputString(NumberFormatException.java :65)

转载 作者:行者123 更新时间:2023-11-29 07:48:12 38 4
gpt4 key购买 nike

每次我尝试启动我的代码时,我总是遇到同样的错误:

 java.lang.NumberFormatException: For input string: "x"
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
at java.lang.Integer.parseInt(Integer.java:492)
at java.lang.Integer.parseInt(Integer.java:527)
at Variable.<init>(Variable.java:17)
at Main.main(Main.java:4)`

我也放了我的代码。你能帮我了解哪里出了问题吗?

public class Main {

public static void main(final String[] args) {
final Node expression =
new Plus(
new Minus(
new Plus(
new Variable("x"),
new Literal(2)
),
new Variable("y")
),
new Minus(
new Literal(4),
new Variable("z")
)
);
// an interpreter would just evaluate the expression:
System.out.println("Expression is: " + expression);

// a compiler would compile the expression into a program
System.out.println("Compiling expression...");
final Program program = new Program();
expression.generateCode(program);
System.out.println("Resulting program:\n"+program);

// and, later, that program can then be executed after the variables have been assigned
// First assignment of variables
VariableSpace variables = new VariableSpace();
variables.store("x", 5);
variables.store("y", 7);
variables.store("z", 1);
System.out.println("For x = 5, y = 7 and z = 1 the program executes and returns:");
int resultOfExecution = program.execute(variables);
System.out.println(resultOfExecution);

// Second assignment of variables
variables.store("x", 11);
variables.store("y", 3);
variables.store("z", 2);
System.out.println("For x = 11, y = 3, and z = 2 the program executes and returns:");
resultOfExecution = program.execute(variables);
System.out.println(resultOfExecution);
}

public class Variable extends Node
{
String variable;
int value;
/**
* Constructor for objects of class Variable
*/
public Variable(final String variable)
{
this.variable = variable;
int value = Integer.parseInt(variable);
}

public void generateCode(final Program program) {
program.append(new ILOAD(value));
}

/**
* Return a int representing this expression
* (e.g., new Literal(19).toint() is "19").
*/
public String toString() {
return "" + value;
}
}

import java.util.ArrayList;


/**
* A Node in an abstract syntax tree (AST)
* for a very simple expression language.
* The language only supports the following subtypes of Nodes:
* <ul>
* <li>integer values (class Literal)
* <li>integer variables (class Variables)
* <li>the integer + operator (class Plus)
* <li>the integer - operator (class Minus)
* </ul>
* It does not support types other than integers.
*/

public class Node {

/**
* Compile this AST into an IJVM program:
* Append instructions to the given Program
* such that the instructions, when executed
* produce the same value
* as is produced by a call to evaluate().
*/
public void generateCode(Program program) {
}

/**
* Generate a string-representation of the subtree.
* When you implement this method in subclasses,
* where possible use recursive calls to left.toString() and
* to right.toString() to do this.
*/
public String toString() {
return null;
}

}

public class ILOAD extends Instruction
{
private final int value;

public ILOAD(final int value)
{
this.value = value;
}

public void execute(Storage storage) {
storage.getStack().push(value);
}

/**
* Produce a human-readable String-representation of this instruction.
*/
public String toString() {
return "ILAOAD " + value;
}

}

import java.util.*;

/**
* A space that stores the variables during the execution of the IJVM/Java bytecode.
*/
public class VariableSpace {

private HashMap<String, Integer> value;

public VariableSpace() {
value = new HashMap<String, Integer>();
}

public void store(String name, int value) {
this.value.put(name, value);
}

public int load(String name) {
return value.get(name);
}

}

我遇到的问题是在 Variable 类中,我在其中尝试将 String 转换为 Integer,因为 ILOAD 类需要一个整数。如果代码太长,我很抱歉,但是这些类是相互链接的。希望你能帮助我

最佳答案

看看 docs for Integer .

根据那些 Integer.parseInt(String s)

Throws NumberFormatException - if the string does not contain a parsable integer

从一个不包含整数的字符串中解析一个整数正是您在这个类 Variable 的构造函数中试图做的...

public Variable(final String variable)
{
this.variable = variable;
int value = Integer.parseInt(variable);
}

...当您像这样调用它时。

new Variable("x")

关于Java.lang.NumberFormatException.forInputString(NumberFormatException.java :65),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23580517/

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