Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 可以合并这两个do循环吗_Java - Fatal编程技术网

Java 可以合并这两个do循环吗

Java 可以合并这两个do循环吗,java,Java,我尝试将两个循环合并为一个do循环,但每次输入无效值时,都不会提示错误消息并要求再次输入值。相反,它只是转到下一个prompt语句 do { try { dependents = Integer.parseInt(JOptionPane.showInputDialog("number of dependents:")); } catch (NumberFormatException e) { dependents = MIN_DEPENDE

我尝试将两个循环合并为一个do循环,但每次输入无效值时,都不会提示错误消息并要求再次输入值。相反,它只是转到下一个prompt语句

do {
    try {
        dependents = Integer.parseInt(JOptionPane.showInputDialog("number of dependents:"));
    }
    catch (NumberFormatException e) {
        dependents = MIN_DEPENDENTS - 1;
    }
    if (dependents < MIN_DEPENDENTS || dependents > MAX_DEPENDENTS) {
        JOptionPane.showMessageDialog(null, "Number of dependents must be between 0 and 9.");
    }
} while (dependents < MIN_DEPENDENTS || dependents > MAX_DEPENDENTS);

do {
    try {
        income = Double.parseDouble(JOptionPane.showInputDialog("amount of income:"));
    }
    catch (NumberFormatException e) {
        income = MIN_INCOME - 1;
    }
    if (income < MIN_INCOME || income > MAX_INCOME) {
        JOptionPane.showMessageDialog(null, "income must be between $0 and $999,999.");
    }
} while (income < MIN_INCOME || income > MAX_INCOME);
do{
试一试{
dependents=Integer.parseInt(JOptionPane.showInputDialog(“依赖项的数量:”);
}
捕获(数字格式){
依赖项=最小依赖项-1;
}
if(依赖项<最小依赖项|依赖项>最大依赖项){
showMessageDialog(null,“依赖项的数量必须介于0和9之间”);
}
}而(受抚养人<最小受抚养人|受抚养人>最大受抚养人);
做{
试一试{
income=Double.parseDouble(JOptionPane.showInputDialog(“收入金额:”);
}
捕获(数字格式){
收入=最低收入-1;
}
如果(收入<最低收入>最高收入){
showMessageDialog(null,“收入必须介于$0和$999999之间”);
}
}而(收入<最低收入>最高收入);

没有,但是您可以创建某种GetInput函数,并传入min、max、prompText和errorText。这样可以避免重复代码

dependents = getInput(MIN_DEPENDENTS, MAX_DEPENDENTS,"number of dependents:","Number of dependents must be between 0 and 9.")
income = getInput(MIN_INCOME,MAX_INCOME,"amount of income:","income must be between $0 and $999,999.")

private double getInput(double min, double max, String promptText, String errorText) {
   double result = 0.0;
   do {
         try {
            result = Double.parseDouble(JOptionPane.showInputDialog(promptText));
         }
         catch (NumberFormatException e) {
            result = min - 1;
         }

         if (result < min || result > max) {
            JOptionPane.showMessageDialog(null, errorText);
         }
   } while (result < min || result > max);

   return result;
}
dependents=getInput(最小依赖项,最大依赖项,“依赖项数量:”,“依赖项数量必须介于0和9之间。”)
收入=getInput(最低收入,最高收入,“收入金额:”,“收入必须介于$0和$999999之间。”)
私有双getInput(双最小值、双最大值、字符串PrompText、字符串errorText){
双结果=0.0;
做{
试一试{
结果=Double.parseDouble(JOptionPane.showInputDialog(prompText));
}
捕获(数字格式){
结果=min-1;
}
如果(结果<最小值|结果>最大值){
showMessageDialog(null,errorText);
}
}而(结果<最小值| |结果>最大值);
返回结果;
}

Dan,您需要在catch块中添加以下行以显示错误消息并再次提示输入

catch (NumberFormatException e) {        
                dependents = MIN_DEPENDENTS - 1; 
    JOptionPane.showMessageDialog(null, "Number of dependents must be between 0 and 9.");

    dependents = Integer.parseInt(JOptionPane.showInputDialog("number of dependents:"));
}

另一个选项可以在数组中设置输入的主列表,然后在while循环中使用它

Object[][] input = {
            {"number of dependents", MIN_DEPENDENTS, MAX_DEPENDENTS},
            {"amount of income", MIN_INCOME, MAX_INCOME},
    };

    int index = 0;
    int value, min, max;
    do {

        Object[] inputDetails = input[index];

        String label = inputDetails[0].toString();
        min = Integer.valueOf(inputDetails[1].toString());
        max = Integer.valueOf(inputDetails[2].toString());


        try {
            value = Integer.parseInt(JOptionPane.showInputDialog(label));
        } catch (NumberFormatException e) {
            value = min - 1;
        }
        if (value < min || value > max) {
            JOptionPane.showMessageDialog(null, String.format("%s must be between %s and %s", label, min, max));
        } else {
            index++;
        }

    } while ((value < min || value > max) || index < input.length);
对象[][]输入={
{“受抚养人数量”,最小受抚养人,最大受抚养人},
{“收入金额”,最低收入,最高收入},
};
int指数=0;
int值,最小值,最大值;
做{
对象[]inputDetails=输入[索引];
字符串标签=inputDetails[0]。toString();
min=Integer.valueOf(inputDetails[1].toString());
max=Integer.valueOf(inputDetails[2].toString());
试一试{
value=Integer.parseInt(JOptionPane.showInputDialog(label));
}捕获(数字格式){
值=最小值-1;
}
如果(值<最小值>最大值){
JOptionPane.showMessageDialog(null,String.format(“%s必须介于%s和%s之间”,标签,最小值,最大值));
}否则{
索引++;
}
}而((值<最小值>最大值)|索引<输入长度);

@WhyCry这是两个循环的顺序。@BilltheLizard我认为问题在于OP不想要两个循环,而是想要一个循环来完成这两个循环所做的一切。我不会合并它们,只是因为它们所做的事情尽我所能不同。我在这些“循环”中看到的只是检查用户的输入。这应该以完全不同的方式来完成。对于JOptionPane,请参见此处:合并这些循环没有意义。Java方法参数不再需要类型了P