用面向对象解决问题

import java.util.Scanner;
class Class21{    //主类用于运行程序
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);  //创建一个Scanner类的对象
        System.out.print("Enter a SSN:");
        String ssn=scanner.nextLine();   //接受用户输入的社保账号
        CheckSSN cs=new CheckSSN(ssn);   //创建一个用户输入的社保账号的对象
        System.out.println(cs.isFormat());  //调用函数进行检验
    }
}
class CheckSSN{  //创建一个社保账号类
    private String ssn;    //它的属性只有一个类型为String 的社保号
    public CheckSSN(String ssn){  //构造函数用于创建一个传进来的社保账号
        this.ssn=ssn;
    }
    public boolean isFormat(){  //判断是否是社保账户的函数
        //1.判断长度
        if(ssn.length()!=11){ //总长要为11,
            return false;
        }
        //2.判断特殊位置的分隔符- 下标index=3 和 6
        if(ssn.charAt(3)!='-'&&ssn.charAt(6)!='-'){
            return false;
        }
        //3.判断三个部分的数字
        //特殊下标数字部分 0-2  4-5  7-10
        String s1=ssn.substring(0,3);
        String s2=ssn.substring(4,6);
        String s3=ssn.substring(7,11);
        return isNumebr(s1)&&isNumebr(s2)&&isNumebr(s3);
    }
    private boolean isNumebr(String s){  //判断输入的是否是数字
        for(int i=0;i<s.length();i++){
            if(!Character.isDigit(s.charAt(i))){   //如果遍历发现存在一个非数字的字符就返回false
                return false;
            }
        }
        return true;
    }
}

class Class24{
    public static void main(String[] args){
        System.out.print("Enter the s1:");
        String s1=In.getString();
        System.out.print("Enter the s2:");
        String s2=In.getString();
        CommomPrefix cp=new CommomPrefix(s1,s2);  //创建一个有共同前缀类的对象
        System.out.println(cp.getPrefix()); //调用相应的方法
    }
}
class CommomPrefix{   //创建一个有共同前缀的类
    private String s1; //有两个字符串类型的的成员变量
    private String s2;
    public CommomPrefix(String s1,String s2){   //带参的构造函数
        this.s1=s1;
        this.s2=s2;
    }
    public String getPrefix(){  //获取共同最大的前缀
        String prefix="";   // 先定义没有
        for(int i=0;i<Math.min(s1.length(),s2.length());i++){
            if(s1.charAt(i)==s2.charAt(i)){  //如果两个字符挨个比较相等
                prefix+=s1.charAt(i);  //将字符串累加
            }else{
                break;  //否则就跳出循环
            }
        }
        return prefix;  //最后返回该前缀
    }
}

class Class27{
    public static void main(String[] args){
        String password=In.getString();
        CheckPassword cp=new CheckPassword(password);  //定义一个检查密码类的对象
        System.out.println(cp.isChecked());     //调用相应的方法判断密码是否有效
    }
}
class CheckPassword{   //定义一个检查密码的类
    private String password;   //有一个密码的属性
    public CheckPassword(String password){  //构造函数
        this.password=password;
    }
    public boolean isChecked(){  //判断密码是否合格的函数
        //1.长度isLength();
        //2.组成isAlpha();
        //3.数字个数isNumber();
        return isLength()&&isAlpha()&&isNumber();
    }
    private boolean isLength(){  //判断密码长度是否够八位的函数
        return password.length()>=8;
    }
    private boolean isAlpha(){   //判断密码中是否有包含除字母和数字外有其他字符的函数
        for(int i=0;i<password.length();i++){
            char c=password.charAt(i); 
            if(!(Character.isLetter(c)||Character.isDigit(c))){ //Character.isLetter(c)用来判断该字符是否是字母Character.isDigit(c)用来判断该字符是否是数字
                return false;
            }
        }
        return true;
    }
    private boolean isNumber(){ //判断该密码是否达到两位的函数
        int count=0;
        for(int i=0;i<password.length();i++){
            char c=password.charAt(i);
            if(Character.isDigit(c)){
                count++;
            }
        }
        return count>=2;
    }
}

其实不用面向对象解决也是可以的,下面是另一种方法

import java.util.Scanner;

public class Class27 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
      Scanner in = new Scanner(System.in);      
      System.out.print("请输入密码:");       
      testPas(in.next());    //这里直接将输入的字符进行判断
          
     	}

	public static void testPas(String a) {
             boolean flag = true;  //这里定义一个标志位
		if(a.length() <8) {   //如果密码长度小于8直接是不合格的密码
			
			System.out.print("Invalid Password");
			
		}else {  
			
			int x=0;
			char[] c = new char[a.length()];
			
			for(int j=0;j<a.length();j++) {  //如果密码位数合格,先将它转化为一个字符数组
				
				c[j]=a.charAt(j);			
			}
			
		for(int i=0;i<c.length;i++) {  //我这里可能麻烦一点,其实可以直接使用上面介绍的两个方法直接判断字母和数字

			if(Integer.valueOf(c[i])>=48 && Integer.valueOf(c[i])<=57){
                          //该位是数字进行统计
				x++;  
	            continue; 
			}
			if(Integer.valueOf(c[i])>=65 && Integer.valueOf(c[i])<=90 || Integer.valueOf(c[i])>=97 && Integer.valueOf(c[i])<=122) {   //如果该位是字母,则继续向下查找,这里用到了ASCII表
                    continue; 
			}
			else {  //如果该位既不是数字也不是字母,则为无效密码
                                flag = false;  //将标志位置为false
				break;  //直接跳出
			} 
		}

             if(flag==false){
                  System.out.println("Invalid Password");  //循环结束后先判断标志位,如果标志位为false就表示无效密码
               }else{      //否则判断数字的个数是否达标
		if(x<2) {
			System.out.println("Invalid Password"); //如果小于2表示不是有效密码
		}else {
			System.out.println("valid Password");   //最后判断的结果才是有效密码
		}
              } 
	  }
     }
}

import java.util.Random;
class Class34{
    public static void main(String[] args){
        String[] words={
            "apple","computer","refrigerator",
            "banana","congratulation","reverse",
            "monkey","naruto","sasuke","wangquanze"
        };
        WordGame wg=new WordGame(words);
        wg.startGame();
    }
}
class WordGame{             //定义一个单词的类
    private String[] words; //用户传入的单词表
    private String word;    //当前正在猜测的单词
    private boolean[] states;//当前单词的密文状态
    private Random random;    //随机数
    private int missCount=0;  //猜错的次数
    public WordGame(String[] words){    //当单词表传入时就随机产生一个单词
        this.words=words;
        this.random=new Random();
    }
    public void startGame(){
        while(true){
            //1.随机产生一个单词
            word=words[random.nextInt(words.length)];
            //2.创建该单词的密文状态表
            states=new boolean[word.length()];
            //3.根据密文状态 生成提示单词
            while(!isGameOver()){
                String str=getWord();
                System.out.print("Enter a letter in word "+str+":");
                String ch=In.getString();
                if(word.contains(ch)){
                    //改变密文状态
                    changeStates(ch);
                }else{
                    System.out.println(ch+" is not in the word");
                    missCount++;    //记录出错的次数
                }
            }
            System.out.println("The word is "+word+".You missd "+missCount+" time");
            System.out.print("Do you want to guess another word? Enter y or n:");
            String choice=In.getString();
            if(choice.equals("y")){ 
                missCount=0;
                continue;
            }else{
                break;
            } 
        }
               
        
    }
    private boolean isGameOver(){     //判断游戏是否结束
        for(int i=0;i<states.length;i++){   //遍历密文状态,如果没有一个状态为false,表示结束
            if(states[i]==false){
                return false;
            }
        }
        return true;
    }
    private void changeStates(String ch){   //判断输入的字符是否已经猜过并在该单词中存在
        for(int i=0;i<word.length();i++){   
            if(ch.equals(word.charAt(i)+"")){ 
                if(states[i]==true){     //如果存在并且已经猜过了
                    System.out.println(ch+" is already in the word");
                    return;    //提示已经在并猜过了
                }else{
                    states[i]=true;   //否则就将相应的密文状态置为1
                }
            }
        }
    } 
    private String getWord(){     //对相应的单词状态的显示
   
        String str="";
        for(int i=0;i<states.length;i++){
            if(states[i]){
                str+=word.charAt(i);
            }else{
                str+="*";
            }
        }
        return str;
    }
}

另一种只用一个函数实现:

import java.util.*;

public class Class34 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub	
		Scanner in = new Scanner(System.in);
		Random ra = new Random();
		String[] words = {"program","write","reverse","that","thanks"};  //创建一个存储单词的字符数组
		String a="";
		do {    //do...while循环用于控制再次猜单词游戏
			int index = ra.nextInt(5);  //随机产生一个单词对应的下标
		
			Guess(words[index]);
			System.out.println("Do you want guess another words? Enter y or n?");
			a = in.next();
		}while(a.equals("y"));
		
	}

	public static void  Guess(String str){  //将产生的单词传进函数里
		Scanner in = new Scanner(System.in); 
		int[]  arr = new  int[str.length()];  //创建一个当前单词的密文状态数组,每个字符对应一个下标
		int size = 0,miss = 0;  //初始化猜对的个数和猜错的次数
		
		while(true) {		
		System.out.print("(Guess)  Enter a letter in word  ");  //首先输出单词的密文状态
		for(int i=0;i<arr.length;i++) {			
			if(arr[i]!=0) {  //只要密文数组的状态不为0,则表示该字符被猜中
				char a = str.charAt(i);
				System.out.print(a);  //然后显示具体的字符
			}else{
				System.out.print("*");  //没有被猜中的或者还没有被猜的字符都显示*号
			}
		}
		System.out.print(" > ");
		String s = in.next();
		if(s.length()>1) {   //每次只能输入一个字符,String类中没有获取字符输入函数
			System.out.println(s+" is not in the word");	
		}else {
		char ch = s.charAt(0);  
		int len = 0;
		for(int j=0;j<str.length();j++) { //否则将输入的字符串转化为字符,
			if(ch==str.charAt(j)){    //对比单词字符串的每个字符,如果猜中一个字符
				if(arr[j]==0) {  //并且它的密文状态是没有被猜到过得
				arr[j]=1;   //那么将它的密文状态置为显示状态
				size++;   //猜对的个数加一
				}
				else {
				System.out.println(s+" is alreaday in the word");  //否则提示已经猜过该字符
				break;
			}
			}else {
				len++;
			}   
		}
		
		if(len==str.length()) {
				System.out.println(s+" is not in the word"); //如果猜测的字符不在单词里,提示相应的信息
				miss++;  //错误次数加一
			}
		}
		if(size==str.length()) {  //到最后一个字符猜对时,输出结果
			System.out.println("the word is "+str+",you miss "+miss+(miss>1?" times":" time"));
			break;
		}
    }			
  }
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值