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;
}
}
}
}