如何使此程序输出'无效数据'而不是总人数和#39;当总人数少于0?
另外,为什么当我输入格式问题时输入'它印刷了总人数和#39;然后把我送回去输入号码离开'再次。如何制作它以便它提示我输入“输入数字”。直到有效?
final int MAX_PEOPLE = 65;
final int MIN_PEOPLE = 0;
int totalPeople = 0;
while (totalPeople <= MAX_PEOPLE) {
try {
int numLeaving = Integer.parseInt(JOptionPane.showInputDialog("number leaving:"));
int numEntering = Integer.parseInt(JOptionPane.showInputDialog("number entering:"));
if (numLeaving < MIN_PEOPLE || numEntering < MIN_PEOPLE) {
JOptionPane.showMessageDialog(null,"Invalid data");
}
else {
totalPeople = (totalPeople + numEntering) - numLeaving;
}
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Enter numbers only");
}
if (totalPeople > MAX_PEOPLE) {
JOptionPane.showMessageDialog(null,"Capacity exceeded");
}
else {
JOptionPane.showMessageDialog(null,"Total people");
}
}
答案 0 :(得分:1)
我发现你的程序存在2个问题
如果在“号码输入”或“号码离开”中输入了无效输入,则应分别提示回“号码输入”或“号码离开”。
输出“无效数据”是变量totalPeople
&lt; 0
您可以通过为while
和numLeaving
创建numEntering
循环并检查无效输入来解决第一个问题,直到收到正确的输入为止,如下所示:
numLeaving
:
int numLeaving = -1;
while(numLeaving < MIN_PEOPLE){
try{
numLeaving = Integer.parseInt(JOptionPane.showInputDialog("number leaving:"));
if(numLeaving < MIN_PEOPLE){
JOptionPane.showMessageDialog(null,"Invalid data");
}
}catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null,"Enter numbers only");
}
}
numEntering
:
int numEntering = -1;
while(numEntering < MIN_PEOPLE){
try{
numEntering = Integer.parseInt(JOptionPane.showInputDialog("number entering:"));
if(numEntering < MIN_PEOPLE){
JOptionPane.showMessageDialog(null,"Invalid data");
}
}catch(NumberFormatException ex){
JOptionPane.showMessageDialog(null,"Enter numbers only");
}
}
现在上面的代码消除了检查(numLeaving < MIN_PEOPLE || numEntering < MIN_PEOPLE)
的要求,因为它已被处理。因此,您可以简单地计算totalPeople
并检查它是否小于0并执行相应操作,如下所示:
totalPeople = (totalPeople + numEntering) - numLeaving;
if (totalPeople < MIN_PEOPLE) {
JOptionPane.showMessageDialog(null,"Invalid data");
totalPeople = 0;
continue;
}
我觉得这些建议可以解决您的问题。
答案 1 :(得分:0)
你得到的总数是因为在执行了catch块之后,你仍然在击中输出部分。
重写代码以使整个循环体保持在try
块中,因此异常会导致绕过整个迭代。
while (totalPeople <= MAX_PEOPLE) {
try {
int numLeaving = Integer.parseInt(JOptionPane.showInputDialog("number leaving:"));
int numEntering = Integer.parseInt(JOptionPane.showInputDialog("number entering:"));
if (numLeaving < MIN_PEOPLE || numEntering < MIN_PEOPLE) {
JOptionPane.showMessageDialog(null,"Invalid data");
}
else {
totalPeople = (totalPeople + numEntering) - numLeaving;
}
if (totalPeople > MAX_PEOPLE) {
JOptionPane.showMessageDialog(null,"Capacity exceeded");
}
else {
JOptionPane.showMessageDialog(null,"Total people");
}
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Enter numbers only");
continue peopleHandler;
}
}
您也可以使用带标签的continue
语句来启动新的迭代:
peopleHandler: while (totalPeople <= MAX_PEOPLE) {
try {
int numLeaving = Integer.parseInt(JOptionPane.showInputDialog("number leaving:"));
int numEntering = Integer.parseInt(JOptionPane.showInputDialog("number entering:"));
if (numLeaving < MIN_PEOPLE || numEntering < MIN_PEOPLE) {
JOptionPane.showMessageDialog(null,"Invalid data");
}
else {
totalPeople = (totalPeople + numEntering) - numLeaving;
}
}
catch (NumberFormatException e) {
JOptionPane.showMessageDialog(null,"Enter numbers only");
continue peopleHandler;
}
if (totalPeople > MAX_PEOPLE) {
JOptionPane.showMessageDialog(null,"Capacity exceeded");
}
else {
JOptionPane.showMessageDialog(null,"Total people");
}
}