输出打印的值小于最终的int

时间:2015-06-18 12:51:57

标签: java

如何使此程序输出'无效数据'而不是总人数和#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");              
     }
  }

2 个答案:

答案 0 :(得分:1)

我发现你的程序存在2个问题

  1. 如果在“号码输入”或“号码离开”中输入了无效输入,则应分别提示回“号码输入”或“号码离开”。

  2. 输出“无效数据”是变量totalPeople&lt; 0

  3. 您可以通过为whilenumLeaving创建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");              
     }
  }