Java求水仙花数 (n位数可用) / 模拟3次密码输入

1 模拟三次密码输入

在生活中,很多地方会用对密码的输入次数进行限制,例如:银行卡、微信以及支付宝密码等等,如果不加以限制,就会被黑客用暴力穷举法的方式才出来,盗取账号。
我们模拟三次密码输入,就是指,如果用户在三次之内输入的密码和系统预置的密码相匹配,则登陆成功;如果三次机会用完了都不匹配则登陆失败,强制退出。

1.1 密码设置

密码有纯数字的形式、也有既有数字又有字母符号的形式,加之,密码并不是用来进行算术运算的,所以其类型应设置为字符串。
(1) 将密码预先设置为 123456。

String password = "123456";

(2) 获取用户输入密码:

Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的密码:");
String input = scanner.next();

(3) 比较用户输入密码是否与预先设置密码相同

if(input.equals(password)){  
//input 和password的位置交换效果一样
    System.out.println("登陆成功");
}else{
    System.out.println("登陆失败");
}

注意:
在Java中,不能直接使用 == 比较字符串的内容是否相等,直接使用是相当于比较地址相等。
应该使用字符串类中的一个 equals 方法 来比较。

1.2 控制次数

循环次数确定时 使用for循环较多
小技巧:
在IDEA中,通过ctrl + alt + t 触发surround 功能,就可以把某一段代码包裹到某种代码块中。(先选中要包裹进去的代码,然后按ctrl + alt + t,会出现如下窗口,选择点击之后,就可以包裹进去了)在这里插入图片描述

for (int i = 0; i <3 ; i++) {
    if(input.equals(password)){
        System.out.println("登陆成功");
        break;
    }else{
        System.out.println("登陆失败");
    }
}

上述for循环跳出的原因只有两种可能:
(1) for 的条件不满足(三次机会耗尽);
(2) 输入正确,从而break跳出。
我们可以再加一个判断来反映,它超过错误次数而结束。

if(i == 3){
    System.out.println("您已3次输入错误,程序强制终止。");
}

1.3完整代码

public static void main(String[] args) {
    Login();
}
public static void Login() {
    String password = "123456";
    Scanner scanner = new Scanner(System.in);
    int i = 0;
    for (i = 0; i <3 ; i++) {
        System.out.println("请输入您的密码:");
        String input = scanner.next();
        if(input.equals(password)){
            System.out.println("登陆成功");
            break;
        }else{
            System.out.println("登陆失败");
        }
    }
    if(i == 3){
        System.out.println("您已3次输入错误,程序强制终止。");
    }
}

2 求水仙花数

2.1 什么是水仙花数

所谓水仙花数,是指一个n位数,每一位数字的n次幂的和正好等于这个数本身。例如:数153=13+53+33

2.2 代码块实现

我们可以分成两个步骤,第一步先是遍历所有的数,第二步细化,判断每个数是不是水仙花数,运用方法的知识,一个方法只做一件工作,提升我们的效率,较少我们出现bug的概率。
(1) 限制范围,即我们需要求多少到多少之间的水仙花数,因此我们可以写一个方法,限制并且遍历这个范围内的每一个数。

public static void printNarcissusNum(int begin, int end) {
        for (int i = begin; i <=end ; i++) {
            if(isNarcissusNum(i)){
                System.out.println(i);
            }
        }
    }

(2) 判断该数是不是水仙花数
有两种判断方式:
第一种:位数较少,我们可以逐步分解每一位的数字进行立方,然后求和。比如:是三位数,就可以用 “/” 将其每个位上的数字分解,分别求立方。

public static boolean isNarcissusNum(int number) {
    int ge=number%10;
    int tmp=number/10;
    int shi=tmp%10;
    tmp=number/100;
    int bai=tmp%10;
    if((cube(ge)+cube(shi)+cube(bai))==number){
        return true;
    }
    return false;
}
public static int cube(int i) {
    return i*i*i;
}

第二种:用循环的方法,位数多或少都可以使用,循环求出每一位的数,立方求和。

public static boolean isNarcissusNum(int i) {
    if (cubeResult(i) == i){
        return true;
    }
    return false;
}
public static int cubeResult(int number) {
    int result = 0;
    while (number>0){
        int a =number%10;
        result+=a*a*a;
        number/=10;
    }
    return result;
}

2.3完整代码

public static void main(String[] args) {
    //求出0~999之间的所有“水仙花数”并输出
    printNarcissusNum(0,999);
}
public static void printNarcissusNum(int begin, int end) {
    for (int i = begin; i <=end ; i++) {
        if(isNarcissusNum(i)){
            System.out.println(i);
        }
    }
}
public static boolean isNarcissusNum(int i) {
    if (result(i) == i){
        return true;
    }
    return false;
}
public static int result(int number) {
    int result = 0;
    while (number>0){
        int a =number%10;
        result+=a*a*a;
        number/=10;
    }
    return result;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值