更新:代码现在正常运行。谢谢你的帮助。
这是我遇到问题的代码的一部分
if ((amount < 0) || (Character.isLetter(amount)))
任何人都知道我做错了什么?这是我的一段代码:
try
{
if ( theStock.exists( pn ) ) // Button CHECK
{
thePicture.clear();
if ( actionIs.equals( Name.ADD ) ) {
try
{
amount = Integer.parseInt(theInputPQ.getText()); // Checks that
if ((amount < 0) || (Character.isLetter(amount))) { // number has been
theOutput.setText("Please enter sufficient No."); // input
}
else {
theStock.addStock(pn, amount);
Product pr = theStock.getDetails( pn ); // Add to
theAction.setText( // stock of
pr.getDescription() + " : " + // item
theMoney.format(pr.getPrice()) +
" (" + pr.getQuantity() + ")" );
}
}
catch (NumberFormatException e) {
theOutput.setText("Please enter sufficient No.");
Product pr = theStock.getDetails( pn );
theAction.setText(
pr.getDescription() + " : " +
theMoney.format(pr.getPrice()) +
" (" + pr.getQuantity() + ")" );
if ( actionIs.equals( Name.ADD ) ) {
}
}
} else { // F
theAction.setText( // Inform Unknown
"Unknown product number " + pn ); // product number
}
}
答案 0 :(得分:1)
您正在检查int
是否是一封信:
Character.isLetter(amount)
如果该int是例如65
该方法将返回true,因为在ascii代码中,数字65
代表字母a
这可能是您问题的根源。
您可以安全地删除该验证,因为,如果在致电Integer.parseInt
之后您可能确定amount
是一个数字(否则它会转到{您可能已经注意到以下{1}}部分。
答案 1 :(得分:0)
amount
是int
变量吗?如果是,它是如何成为一封信(Character
)?如果不是int
,那么如何使用< 0
进行比较?它可以是或字符或整数,而不是上述两者。
答案 2 :(得分:0)
嗯,我认为你已经通过以下方式检查金额是否为int
Integer.parseInt(theInputPQ.getText());
和try-catch块。
Character.isLetter(amount)
答案 3 :(得分:0)
amount < 0
检查没有做任何有用的事情,除非您检查小于0的整数值。Integer.parseInt()
返回它读取的整数,作为字符串。如果其参数不包含可解析的整数,则抛出NumberFormatException
。
如果你的目标只是弄清楚按钮的文字中是否有字母,我会调用另一种方法。另外,我不确定你为什么要在String的文本上调用isLetter()
。这是我看到的一个逐个字符的例子:
String str = theInputPQ.getText(); // I assume this is a String
for(int i=0; i < str.length(); i++)
{
if(Character.isDigit(str.charAt(i)))
System.out.println("It's a digit");
if(Character.isLetter(str.charAt(i)))
System.out.println("It's a letter");
}
为了良好的编码实践,如果你添加这个代码,那么它应该是一个单独的私有方法。