Java习题7

1.(检测密码)一些网站对于密码具有一些规则。编写一个方法,检测字符串是否是一个有效密码。假定密码规则如下:
●密码必须至少8位字符。
●密码仅能包含字母和数字。
●密码必须包含至少两个数字。
        编写一个程序,提示用户输入一个密码,如果符合规则,则显示Valid Password, 否则显示Invalid Password。

  • 解题思路:我们可以创建多个函数,分别用来检测是否满足上面的条件,nextLine()会接受你回车之前的所有输入,包括空格和符号,创建一个函数isDigit判断是否为数字,另一个函数isLetter判断是否为字母
import java.util.Scanner;
class Demo01{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入密码:");    //提示用户输入密码
        String password=scanner.nextLine(); 

        if(isValid(password)){
            System.out.println("密码合法!");
        }else{
            System.out.println("密码不合法!");
        }
    }

    public static boolean isValid(String s){        //是否满足三个条件
        return isLengthValid(s)&&isContentValid(s)&&isNumberValid(s);
    }
    public static boolean isLengthValid(String s){    //第一个条件长度最少8字符
        return s.length()>=8;
    }
    public static boolean isContentValid(String s){    //第二个条件
        char c=' ';
        for(int i=0;i<s.length();i++){     //循环判断其字符串的每个字符都是否满足
            c=s.charAt(i);            
            if(!isLetter(c)&&!isDigit(c)){      
                return false;        //如果有不是数字或字母的,则输出false
            }
        }
        return true;
    }
    public static boolean isNumberValid(String s){    //第三个条件判断是否超过两个数字
        int count=0;
        char c=' ';
        for(int i=0;i<s.length();i++){        
            c=s.charAt(i);
            if(isDigit(c)){        
                count++;        //如果是数字则count+1
            }
        }
        return count>=2;        //如果count大于或等于2则输出turn
    }
    // a~z A~Z 只需要比较ASCII值
    // 'a'<=c<='z' || 'A'<=c<='Z'
    // '0'<=c<='9'
    public static boolean isLetter(char c){
        return c>='a'&&c<='z' || c>='A'&&c<='Z';
    }
    public static boolean isDigit(char c){
        return c>='0'&&c<='9';
    }

}

2.(最长的共同前缀)编写一个程序,提示用户输人两个字符串,显示两个字符串最长的共同前缀。

  • 解题思路:我们可以通过charAt(),来从字符串的首位开始对比每个字符,相同则继续,不同则停止并输出结果,s.substring(a,b)意思是输出s字符串的从a位置到b位置的字符
class Demo02{
    public static void main(String[] args){
        String s1="Welcome";
        String s2="Welcome";
        System.out.println(getCommonPrefix(s1,s2));    //传参
    }
    public static String getCommonPrefix(String s1,String s2){
        int pa=0;    // 相当于s1的指针
        int pb=0;    // 相当于s2的指针
        while(true){    
            if(s1.charAt(pa)!=s2.charAt(pb)){    
                return s1.substring(0,pa);        //返回s1的从首位到pa位置的字符
            }
            if(s1.charAt(pa)==s2.charAt(pb)){    //如果当前字符一样则+1
                pa++;
                pb++;
            }
            if(pa==s1.length()){
                return s1;
            }
            if(pb==s2.length()){    
                return s2;        //超过字符串长度则退出循环
            }
        }
    }
}

3.程序输入AB8C十六进制数,用下面的方法将该数转换为一个十进制数:
public static int hexToDecimal(String hex)

  • 解题思路:

class Demo03{
    public static void main(String[] args){
        String s="AB8C";    //令字符串s为AB8C

        System.out.println(hexToDeimal(s));    //将s传参并输出
    }
    public static int hexToDeimal(String s){
        int num=0;
        char c=' ';
        for(int i=0;i<s.length();i++){    
            c=s.charAt(s.length()-1-i);    //从后往前
       
            if(isLetter(c)){    //如果c为字母
                num+=(c-'A'+10)*Math.pow(16,i);   
            }else{
                num+=(c-'0')*Math.pow(16,i);
            }
        }
        return num;
    }
    public static boolean isLetter(char c){    //判断是否为字母
        return c>='A'&&c<='F';
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值