Java基础,关于流程控制的问题:输入错误,提示错误并且重新输入。 这个快把我整崩溃了,请大家帮帮我

JAVA基础语言,就是有两个输入,下面是if语句。输入错误后,提示重新输入错误,并且跳转重新输入;我是初学者,都快崩溃了。代码如下:问题一:有一个输入身份1.我想实现的就... JAVA基础语言,就是有两个输入,下面是if语句。输入错误后,提示重新输入错误,并且跳转重新输入;我是初学者,都快崩溃了。代码如下:

问题一:有一个输入身份
1.我想实现的就是在输入身份的时候如果输入是字符串,提示输入错误,并跳转重新输入;
2.如果输入不是在0-2之间的数字,提示输入错误,并且跳转重新输入

问题二:下面还有一个收入输入,用在结果的;
1.我想实现输入收入的时候如果是字符串,提示输入错误,并且重新跳转输入(注意:这里的跳转是跳转到重新输入收入,而不是全部跳转到重新输入身份哪里)
2.如果输入的是负数,同样提示输出负数,请重新输入;

问题三:我想请问这个简单的流程控制都把我正崩溃,是我(刚学习1个多月)的知识还不够,还是我比较笨啊。熟悉的人一定觉得很简单。但是我确实不会啊;难道要给没一个if语句建一个方法,才能方便调取吗?

问题四:因为我觉得光靠控制流程,如果要做好几个输入判断呢(上面我只有2个,如果是好几输入选择在if语句里面怎么整?)?比如一些网站的注册和登录,都好输入好几次是不是光靠控制流程语句是不可能实现的呢?是不是有什么给没一个输入弄监听,异常的通用方法吗?

谢谢了上面一共有4个问题,请大家每个问题每个问题给我解答一下,我头很昏,学习java有点吃力。请加大尽量用一些简单通俗比较通用的办法的给解答一下。随便给小弟我讲讲一下学习java的技巧,经验等等。

import java.text.DecimalFormat;
import java.util.Scanner;

public class MyTest {

private int staus; // 纳税身份
private double income;// 纳税收入

public void ComputTax() {
try {
Scanner input = new Scanner(System.in);
System.out.println("0-代表单身纳税人,1-代表已婚共同纳税人,2-代表已婚单独纳税人" + "\n"
+ "你选择你要纳税的身份:");
staus = input.nextInt();

System.out.println("请输入你的收入:");
income = input.nextDouble();
if(income<0){
System.out.println("你输入的是负数,请重新输入");
}

if (staus == 0) { // 单身纳税人

System.out.println("你选择的身份是单身纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.1);
}
if (staus == 1) { // 已婚共同纳税人
System.out.println("你选择的身份是单身纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.2);
}
if (staus == 2) { // 已婚单独纳税人
System.out.println("你选择的已婚单独纳税人");
System.out.println("你应当缴纳的税收为:" + income * 0.3);
} else {
System.out.println("你输入错误,只能输入0-2之间的数");
ComputTax();
}
} catch (Exception e) {
System.out.println("你输入有错误,请输入0-2之间的数");
ComputTax();
}
}

public static void main(String[] args) {
System.out.println("------欢迎使用纳税查询--------");
MyTest myTest = new MyTest();
myTest.ComputTax();
}
}
展开
 我来答
第一碗羊杂割
2015-10-04 · TA获得超过6145个赞
知道大有可为答主
回答量:1107
采纳率:80%
帮助的人:556万
展开全部

题主的问题大体就是如何判断用户的输入是否合法。这里最方便的就是使用正则表达式(Regular Expression,简称 Regex)。


正则表达式是一个字符串,它代表的是一定的字符串模式(比如邮箱的模式就是 "数字或字母 + @ + 数字或字母 + . + 顶级域名名称"),当用户输入一个字符串时,符合这个模式的字符串会通过验证,而不符合的则会匹配失败。现在几乎所有网站的邮箱密码身份证号等的验证都会使用正则表达式。


Java 的 String 类自带有一个 matches 方法提供了简单的正则表达式匹配功能,只需使用这个方法就可以完成你要求的匹配任务。代码如下:


import java.util.Scanner;

public class MyTest {

// 用于匹配身份选择和收入的正则表达式
private final String IDENTITY_REGEX = "[0-2]";
private final String INCOME_REGEX = "[0-9]*\\.?[0-9]*";

// 代表身份和收入的字符串
private String status_string;
private String income_string;

// 转换为 int 和 double 后的身份和收入
private int status;
private double income;

public void ComputTax() {

Scanner input = new Scanner(System.in);

// 一直循环直到到达 break 语句退出
while (true) {
System.out.println("0 - 单身纳税人,1 - 已婚共同纳税人,2 - 已婚单独纳税人" + 
"\n" + "请选择你要纳税的身份:");

// 读取用户输入的原始字符串并与正则表达式相匹配
status_string = input.nextLine();
// 匹配失败会返回 while 一开始
if (!status_string.matches(IDENTITY_REGEX)) {
System.out.println("输入错误,只能输入 0 ~ 2 之间的数");
continue;
}

// 匹配成功则会将输入转换为整数并退出循环
status = Integer.parseInt(status_string);
break;
}

// 同理
while (true) {

System.out.println("请输入你的收入:");

income_string = input.nextLine();

if (!income_string.matches(INCOME_REGEX)) {
System.out.println("收入输入有误,请重新输入");
continue;
}

income = Double.parseDouble(income_string);
break;

}

// 输出相应的税收
if (status == 0) {

// 使用 printf 保留两位小数,不然 double 输出的精度太多影响可读性
System.out.printf("你选择的身份是单身纳税人\n你应当缴纳的税收为:%.2f 元\n",
income * 0.1);

} else if (status == 1) {

System.out.printf("你选择的身份是已婚共同纳税人\n你应当缴纳的税收为:%.2f 元\n", 
income * 0.2); 

} else {

System.out.printf("你选择的身份是已婚单独纳税人\n你应当缴纳的税收为:%.2f 元\n",
income * 0.3); 

}
}

public static void main(String[] args) {

System.out.println("------------------欢迎使用纳税查询--------------------");
MyTest myTest = new MyTest();
myTest.ComputTax();


}

}


运行结果为:



有关正则表达式的写法,请参考

http://deerchao.net/tutorials/regex/regex.htm

追问

        谢谢你了,我是问题就是在有多输入的情况下,判断输入合法,并且每个输入判断错误过后会自动跳转到当前输入,不影响其他输入。由于我学的知识有限确实很难呀。 

——由于补充问题,字数限制我想还请教两个问题,请小弟我解答一下,谢谢了:如下图


gdmmd
推荐于2016-06-22 · TA获得超过1279个赞
知道大有可为答主
回答量:1581
采纳率:66%
帮助的人:1006万
展开全部

问题一,问题二: 循环  用一个boolean 标记输入是否正确  若正确则结束循环   具体请查看代码

问题三:多敲代码

问题四:如果是好几个输入判断,并且功能是可以重用的,可以提取出来一个校验方法,校验的结果可以用返回值和抛异常来表示。

import java.util.InputMismatchException;
import java.util.Scanner;

public class MyTest {
    public void ComputTax(int staus, double income) {
        switch (staus) {
        case 0: {
            System.out.println("你选择的身份是单身纳税人");
            System.out.println("你应当缴纳的税收为:" + income * 0.1);
            break;
        }
        case 1: {
            System.out.println("你选择的身份是单身纳税人");
            System.out.println("你应当缴纳的税收为:" + income * 0.2);
            break;
        }
        case 2: {
            System.out.println("你选择的已婚单独纳税人");
            System.out.println("你应当缴纳的税收为:" + income * 0.3);
            break;
        }
        }
    }

    public static void main(String[] args) {
        System.out.println("------欢迎使用纳税查询--------");
        MyTest myTest = new MyTest();
        int staus = 0;
        double income = 0.0;

        Scanner input = new Scanner(System.in);

        // 是否输入正确的标记
        boolean next = false;

        /**
         * 问题一:
         * 
         */
        while (!next) {
            System.out.println("0-代表单身纳税人,1-代表已婚共同纳税人,2-代表已婚单独纳税人" + "\n" + "你选择你要纳税的身份:");
            try {
                staus = input.nextInt();
            } catch (InputMismatchException e) {
                /**
                 * 实现的是在输入身份的时候如果输入是字符串,提示输入错误,并跳转重新输入;
                 */
                System.out.println("你输入错误,请重新输入.");
                input.next();
                continue;
            }
            if (staus < 0 || staus > 2) {
                /**
                 * 如果输入不是在0-2之间的数字,提示输入错误,并且跳转重新输入
                 */
                System.out.println("只能输入0-2之间的数,请重新输入.");
                continue;
            }
            next = true;
        }

        next = false;

        /**
         * 问题二
         */
        while (!next) {
            System.out.println("请输入你的收入:");
            try {
                income = input.nextDouble();
            } catch (InputMismatchException e) {
                System.out.println("你输入错误,请重新输入.");
                input.next();
                continue;
            }
            if (income < 0) {
                System.out.println("您输入的负数,请重新输入.");
                continue;
            }
            next = true;
        }

        myTest.ComputTax(staus, income);

        input.close();
        System.out.println("演示完毕.");
    }

}
追问

        谢谢你了,我是问题就是在有多输入的情况下,判断输入合法,并且每个输入判断错误过后会自动跳转到当前输入,不影响其他输入。由于我学的知识有限确实很难呀。 

——由于补充问题,字数限制我想还请教两个问题,请小弟我解答一下,谢谢了:如下图

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fg1161178773
2015-10-04 · TA获得超过379个赞
知道小有建树答主
回答量:190
采纳率:0%
帮助的人:84.4万
展开全部

看了看几位的回答都不错的,LZ既然是初学者那么不建议使用正则表达式。。。

追问

        谢谢你了,我是问题就是在有多输入的情况下,判断输入合法,并且每个输入判断错误过后会自动跳转到当前输入,不影响其他输入。由于我学的知识有限确实很难呀。 

——由于补充问题,字数限制我想还请教两个问题,请小弟我解答一下,谢谢了:如下图

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式