用面向对象解决String例题

1. 检查社保号码

思路:1. 首先判断长度是否满足要求  2. 其次号码的3 和 6位置是否为 - 3. 判断三段数字是否满足要求

package day03;
//判断格式 DDD-DD-DDDD
import java.util.Scanner;
public class Class21 {
	public static void main(String[] args) {	
		Scanner scanner=new Scanner(System.in);
		System.out.println("Enter a SSN:");
		String ssn=scanner.nextLine();
		CheckSSN cs=new CheckSSN(ssn);
		System.out.println(cs.isFormat());
	}
}
class CheckSSN{
	private String ssn;
	public CheckSSN(String ssn){
		this.ssn=ssn;
	}
	public boolean isFormat(){
		//1.判断长度
		if(ssn.length()!=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); //substring 截取指定长度字符串
		String s2=ssn.substring(4,6);
		String s3=ssn.substring(7,11);
		return isNumber(s1)&&isNumber(s2)&&isNumber(s3);
	}
	private boolean isNumber(String s){
		for (int i = 0; i < s.length(); i++) {
			if(!Character.isDigit(s.charAt(i))){ //判断是否数字
				return false;
			}
		}
		return true;
	}
}

2. 检验密码

思路:1.判断长度 2. 判断是不是只包含字母数字 3. 密码至少包含两个数字

package day03;
//判断密码是否有效
import java.util.Scanner;
public class Class27 {
	public static void main(String[] args) {
		Scanner scanner=new Scanner(System.in);
		System.out.print("请输入密码:");
		String password=scanner.nextLine();
		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))){
				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;
	}
}

3. 猜字游戏

package day03;
import java.util.Random;
import java.util.Scanner;
public class Class34 {
	public static void main(String[] args) {
		String [] words={"nike","champion","converse","jordan","vans"}; //定义单词数组
		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;
	Scanner sc=new Scanner(System.in);
	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=sc.nextLine();
				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 missed "+missCount+" time");
			System.out.print("Do you want to guess another word?Enter y or n:");
			String choice=sc.nextLine();
			if(choice.equals("y")){ //继续或者结束游戏
				missCount=0;
				continue;
			}else{
				break;
			}
		}
	}
	private boolean isGameOver(){ //判断游戏是否结束
		for(int i=0;i<states.length;i++){
            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;
                }
            }
        }
	}
	private String getWord(){
        String str="";
        for(int i=0;i<states.length;i++){
            if(states[i]){
                str+=word.charAt(i);
            }else{
                str+="*";
            }
        }
        return str;
    }
}
发布了29 篇原创文章 · 获赞 6 · 访问量 1161

猜你喜欢

转载自blog.csdn.net/weixin_43472705/article/details/98507178