我是java的新手,请原谅noob问题。
我创建了一个swing应用程序,在JTextFields中基本上有三个输入字符串:
loanAmount,interestRate和loanYears以及带有EventAction
的单个提交按钮。
我正在尝试使用java.util.Scanner
来解析我可以在计算中使用的基本类型的输入。
我在NetBeans中收到错误,表明我的变量无法识别?
我不应该打电话给System.in
吗?
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
Scanner keyInput = new Scanner(System.in);
while (true)
try{
double amount = keyInput.nextDouble(loanAmount.getText());
double interest = keyInput.nextDouble(interestRate.getText());
int years = keyInput.nextInt(loanYears.getText());
} catch (NumberFormatException nfe){
}
}
答案 0 :(得分:2)
不要担心提出更简单的问题,我们会一直得到它们。如果不是为了简单的问题,实际上,我永远不会回答任何问题。
我可以立即看到您的代码存在三个问题:
您正在捕获异常,但随后将其丢弃。有时候,从用户的角度来看,您不想采取任何操作来响应异常,但作为程序员,您需要知道。试着说nfe.printStackTrace(System.err);
扫描仪不是您想要的。 Double.valueOf(..)会更直接。
现在,关于您的实际问题:您的三个变量超出try
块末尾的范围。尝试在声明KeyInput的地方声明它们。
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
double amount, interest;
int years;
while (true) {
try {
amount = Double.valueOf(loanAmount.getText());
interest = Double.valueOf(interestRate.getText());
years = Integer.valueOf(loanYears.getText());
} catch (NumberFormatException nfe){
if (DEBUG) nfe.printStackTrace(System.err);
return;
}
}
// Your values of amount, interest and years will be available here.
// Past this last curley brace, however, they will go out of scope.
// If you want them to stick around for as long as the new object,
// define them as class fields.
}
答案 1 :(得分:0)
扫描仪用于命令行。您需要访问输入字段并获取其值并将其转换为int。
试试这样:
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
double amount = Double.valueof(loanAmount.getText());
double interest = Double.valueof(interestRate.getText());
int years = Double.valueof(loanYears.getText());
}
答案 2 :(得分:0)
不,你不应该;)扫描程序从Stream读取数据,System.in是一个从控制台读取字节而不是从swing组件读取字节的流。
这里的想法是解析文本字段中的字符串:
private void submitButtonActionPerformed(java.awt.event.ActionEvent evt) {
try {
double amount = Double.parseDouble(loanAmount.getText());
double interest = Double.parseDouble(interestRate.getText());
int years = Integer.parseInt(loanYears.getText());
} catch (NumberFormatException nfe){
}
}