我的程序工作正常,我只需要输入0
或a negative number
长度后输入验证“无效输入,数字必须为正”对话框:{{ 1}}和宽度:tLength
。
这是我的代码运行正常,只需需要添加验证:
tWidth
我试过:
import java.awt.event.*;
import javax.swing.*;
import java.awt.*;
public class FloorsRUs extends JFrame implements ActionListener, ItemListener
{
public JTabbedPane jTP;
public JRadioButton flrWood = null;
public JRadioButton flrCarpet = null;
public JTextField tCName;
public JTextField tAddress;
public JTextField tLength;
public JTextField tWidth;
public JButton calcArea;
public JButton calcCost;
public JButton subOrder;
public JButton orderSum;
public JButton ordList;
public JPanel flrPan;
public JPanel lwPan;
public JPanel cPan;
public JLabel lab1;
public JLabel lab2;
public JLabel lab3;
public JLabel lab4;
public String flrType;
public double area = 0;
public double cost = 0;
FloorsRUs(String title)
{
super(title);
jTP=new JTabbedPane();
flrPan=new JPanel();
lwPan=new JPanel();
cPan=new JPanel();
flrPan.add(flrWood=new JRadioButton("Choose Wood"));
flrPan.add(flrCarpet=new JRadioButton("Choose Carpet"));
ButtonGroup grp = new ButtonGroup();
grp.add(flrWood);
grp.add(flrCarpet);
lwPan.add(lab1=new JLabel("Enter the Length : "));
lwPan.add(tLength=new JTextField(10));
lwPan.add(lab2=new JLabel("Enter the Width"));
lwPan.add(tWidth=new JTextField(10));
lwPan.add(calcArea=new JButton("Calculate the Area"));
lwPan.add(calcCost=new JButton("Calculate the Cost"));
lwPan.add(subOrder=new JButton("Submit the Order"));
cPan.add(lab3=new JLabel("Enter the Customers Name : "));
cPan.add(tCName=new JTextField(10));
cPan.add(lab4=new JLabel("Enter the Customers Address : "));
cPan.add(tAddress=new JTextField(10));
cPan.add(orderSum=new JButton("The Order Summary"));
cPan.add(ordList=new JButton("The Order List"));
jTP.addTab("Select Floor Type ",flrPan);
jTP.addTab("Enter Length and Width ",lwPan);
jTP.addTab("Customer Info",cPan);
add(jTP);
calcArea.addActionListener(this);
calcCost.addActionListener(this);
subOrder.addActionListener(this);
orderSum.addActionListener(this);
ordList.addActionListener(this);
flrWood.addItemListener(this);
flrCarpet.addItemListener(this);
}
@Override
public void itemStateChanged(ItemEvent ie)
{
if(flrWood.isSelected()){
flrType="Wood";
}
else if(flrCarpet.isSelected()){
flrType="Carpet";
}
}
@Override
public void actionPerformed(ActionEvent ae)
{
String source=ae.getActionCommand();
switch (source) {
case "Calculate the Area":
System.out.println("Calc 1 Complete");
area=Double.parseDouble(tLength.getText())
*Double.parseDouble(tWidth.getText());
break;
case "Calculate the Cost":
System.out.println("Calc 2 Complete");
if(flrType.equals("Wood"))
cost = area *20;
else if(flrType.equals("Carpet"))
cost = area *10;
break;
case "The Order Summary":
JOptionPane.showMessageDialog(null,"The Order Summary - Area is :" +
""+area+""+ " The Cost is : "+cost," Information",
JOptionPane.INFORMATION_MESSAGE);
break;
case "The Order List":
JOptionPane.showMessageDialog(null,"The Order List : \n Customer's name :
"+tCName.getText()
+"\nAddress : "+tAddress.getText()
+"\n The Area is :"+area
+"\n The Cost is : "+cost,"Information",
JOptionPane.INFORMATION_MESSAGE);
break;
default:
break;
}
}
public static void main(String args[])
{
FloorsRUs f1=new FloorsRUs("FloorsRUs Easy App");
f1.setSize(new Dimension(650,450));
f1.setVisible(true);
}
}
由于if(tLength.getText()<=0 && tWidth.getText()<=0)
{
System.out.println("invalid input, number has to be positive");
}
和"Bad operand for binary operator '<='".
都是tLength
,我认为tWidth
收到错误。
然后我尝试了:
String
它接受了它但在我将case "Calculate the Area":
System.out.println("Calc 1 Complete");
area=Double.parseDouble(tLength.getText())
*Double.parseDouble(tWidth.getText());
if((Double.parseDouble(tLength.getText())<=0) &&
((Double.parseDouble(tWidth.getText())<=0)))
{
System.out.println("invalid input, number has to be positive");
}
break;
或0
放入tLength或tWidth字段时没有改变输出。
最后我尝试了:
negative number
此外,没有错误,但在输入case "Calculate the Area":
System.out.println("Calc 1 Complete");
try {
if ((Double.parseDouble(tLength.getText()) < 0)
&& ((Double.parseDouble(tWidth.getText()) < 0))) {
System.out.println("invalid input, number has to be
positive");
} else {
area = Double.parseDouble(tLength.getText()) *
Double.parseDouble(tWidth.getText());
}
} catch (NumberFormatException e) {
System.out.println("invalid input, number has to be positive");
}
break;
或negative numbers
时无效。
我已尝试将0
切换为'&&'
,但没有运气。
答案 0 :(得分:0)
TL; DR,第二个代码块就是你需要的。
你几乎就在那里:
if(tLength.getText()<=0 && tWidth.getText()<=0)
{
System.out.println("invalid input, number has to be positive");
}
除了它应该是||之外而不是&amp;&amp;,问题是你试图将String与int进行比较。要使其工作,您需要将String解析为整数,因此只需将您的字符串包装在Integer.parseInt()函数中。您的最终if语句应如下所示:
if (Integer.parseInt(tLength.getText()) <= 0 ||
Integer.parseInt(tWidth.getText()) <=0 )
{
System.out.println("invalid input, number has to be positive");
}
下一部分是不必要的,但有助于保持代码整洁:
因为大括号内只有一个单一的语句,你实际上并不需要它们,所以你可以写上面的内容,但是像这样:
if (Integer.parseInt(tLength.getText()) <= 0 ||
Integer.parseInt(tWidth.getText()) <=0 )
System.out.println("invalid input, number has to be positive");
以下任何代码行都在if语句代码块之外。
一个稍微复杂的例子: 如果是我,我会使用三元运算符并将结果赋给变量并打印变量,如下所示:
String output = Integer.parseInt(tLength.getText()) <= 0 ||
Integer.parseInt(tWidth.getText()) <= 0 ?
"invalid input, number has to be positive" : "";
System.out.println(output);
这基本上是几行代码集合在一起。前两个单词创建了&#39;输出&#39;变量。关于&#34; =&#34;的RHS的事情是三元手术。 三元操作只是一个if语句 如果&#34; x&#34; =真然后做A. 否则做B。
因此,如果Integer.parseInt(tLength.getText())&lt; = 0为真,那么字符串&#34;无效输入,数字必须是正数&#34;将被分配给变量&#39;输出&#39;。 但是如果Integer.parseInt(tLength.getText())&lt; = 0为false,那么字符串&#34;&#34; (空字符串)将被分配到&#39;输出&#39;。这个特殊的三元运算也对Integer.parseInt(tWidth.getText())执行相同的测试,因此如果其中任何一个为真,则使用第一个选项。 最后一行打印出&#39;输出&#39;的内容。并将光标放在下一行。这意味着如果打印空字符串,则光标仍将移动到下一行,但它不会打印任何内容。将光标移动到下一行可能是您想要做的也可能不是(如果您不想,您可以始终使用System.out.print()而不是System.out.println())。
希望有所帮助。
答案 1 :(得分:0)
我最终使用了JOptionPane并使用了这个有效的代码。谢谢大家的帮助,我很感激。
$students