习题2--函数与数组1

///前两次给大家总结的都是些比较概念性的东西,都说实践出真理,这次就给大家分享些比较典型的例题,供大家对概念性的东西加深印象
1.
在这里插入图片描述

import java.util.Scanner;
class Class22{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter string: ");
        String s1=scanner.nextLine();
        System.out.print("Enter string: ");
        String s2=scanner.nextLine();
        for(int i=0;i<=s1.length()-s2.length();i++){//比较时比较不到最后一个最多比较到长串减短串处
            boolean flag=true;
            if(s1.charAt(i)==s2.charAt(0)){//当s1有元素跟s2的第一个元素相等时
                for(int j=1;j<s2.length();j++){//从s2的第二个元素开始比,第一个元素已经比过了
                    if(s1.charAt(i+j)!=s2.charAt(j)){//
                        flag=false;
                        break;
                    }
                }
                if(flag){//设flag的目的是为了标记该程序是正常执行完的,还是break出来的
                    System.out.println(s2+" is a substring of "+s1);
                    return;
                }

            }
        }
        System.out.println(s2+" is not a substring of "+s1);
    }
}

2.在这里插入图片描述

import java.util.Scanner;
class Class26_1{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter a number:");
        int num=scanner.nextInt();
        if(isPalindrome(num)){
            System.out.println("合法");
        }else{
            System.out.println("不合法");
        }
    }
    public static boolean isPalindrome(int num){//判断其是否为回文整数
        return reverse(num)==num;
    }
    public static int reverse(int num){//将输入的数转变为反置数
        int res=0;
        while(true){
            res=res*10+num%10;
            num/=10;
            if(num==0){
                break;
            }
        }
        return res;
    }
}

在这里插入图片描述

import java.util.Scanner;
class Class27{ 
    /*
    1.提示用户输入
    2.判断其是否合法
    3.输出
     */ 
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter a pwd: ");
        String pwd=scanner.nextLine();
        if(isValid(pwd)){//判断是否合法
            System.out.println("Valid");
        }else{
            System.out.println("InVaild");
        }
    }
    public static boolean isValid(String pwd){//判断合法需要三个条件,需三个条件同时成立
        return isRight1(pwd)&&isRight2(pwd)&&isRight3(pwd);
    }
    public static boolean isRight1(String pwd){//密码必须至少8位字符
    return pwd.length()>=8;
    }
    public static boolean isRight2(String pwd){//密码只能为字母和数字
        for(int i=0;i<pwd.length();i++){
            char c=pwd.charAt(i);
            if(!isDigit(c)&&!isLetter(c)){
                return false;
            }
        }
        return true;
    }
    public static boolean isDigit(char c){//判断是否为数字
        return c>='0'&&c<='9';
    }
    public static boolean isLetter(char c){//判断是否为字母
        return (c>='a'&&c<='z')||(c>='A'&&c>='Z');
    }
    public static boolean  isRight3(String pwd){//判断是否至少包含连个数字
        int digitcount=0;//记录数字个数
        for(int i=0;i<pwd.length();i++){
            if(isDigit(pwd.charAt(i))){
                digitcount++;
            }
        }
        return digitcount>=2;
    }
}

在这里插入图片描述解法一:边读边删

import java.util.*;
class Class30{
    public static void main(String[] args){
        //解法一:边读边删
        //把数组长度先置0;然后再扩容(读一个元素,如果该数组中不包括该元素,就把该数组长度+1)
        //最后输出该数组
        Scanner scanner=new Scanner(System.in);
        int[] arr=new int[0];//定义一个数组长度为0的数组
        System.out.print("Enter ten numbers: ");
        for(int i=0;i<10;i++){//输入10个数
            int number=scanner.nextInt();
            if(!isContains(arr,number)){//如果该元素不在该数组中
                arr=resize(arr,arr.length+1);//扩容该数组,传进该函数的数组长度为该数组长度加1
                arr[arr.length-1]=number;//把当前输入的该元素赋给扩容后的数组的最后一个位置
            }
        }
        System.out.println(Arrays.toString(arr));//打印该数组
    }
    public static boolean isContains (int[] arr,int number){//判断输入的数是否包含在该数组中
            for(int i=0;i<arr.length;i++){
                if(arr[i]==number){
                    return true;
                }
            }

            return false;
    }
        public static int[] resize(int[] arr,int newArrlength){//扩容
            int[] newArr=new int[newArrlength];//该方法中定义一个新数组,该数组长度为之前的数组长度+1
            for(int i=0;i<arr.length;i++){//遍历之前的数组
                newArr[i]=arr[i];//把之前的数组元素赋给当前新数组中

            }
            return newArr;//返回扩容后新的数组
    }
}

解法二:读完再删

import java.util.*;
class Class30{
    public static void main(String[] args){
     //版本二:读完再删
        Scanner scanner=new Scanner(System.in);
        int[] arr=new int[10];//定义一个长度为10的数组
        System.out.print("Enter ten numbers: ");
        for(int i=0;i<arr.length;i++){
            arr[i]=scanner.nextInt();//遍历该数组,给该数组赋值
        }
        int size=arr.length;
        for(int i=0;i<size;i++){
            for(int j=i+1;i<size;){//与当前的下一个比较
                if(arr[i]==arr[j]){
                    for(int k=j+1;k<size;k++){//如果与下一个相等,为了删除该相等的数,则把后面的数都向前移动
                        arr[k-1]=arr[k];
                    }
                    size--;//移完之后把数组长度减一
                }else{//如果不相等则j++继续下一轮比较
                    j++;
                }
            }
        }
        for(int i=0;i<size;i++){
        System.out.print(arr[i]+" ");//打印该数组
        }
    }

在这里插入图片描述

import java.util.Scanner;
class Class32{
    /*
    1.提示用户输入球的个数
    2.提示用户输入槽的个数  球经历的路径层数=槽数-1;
    3.打印每一个球的路径
    4.打印槽中球的个数  路径中R的个数表示该球落入哪个槽中
     */
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter the number of balls to drop:");
        int balls=scanner.nextInt();
        System.out.print("Enter the number of slots in the bean machine:");
        int slots=scanner.nextInt();
        int[] a=new int[slots];//路径层数    槽的数组表示槽的位置
        for(int i=0;i<balls;i++){//球
            String path="";
            for(int j=0;j<slots-1;j++){//路径=槽数减1
                path+=Math.random()>0.5?'L':'R';
            }
            System.out.println(path);//打印路径
            a[getlocation(path)]++;//某一槽数中的球数加1
        }
 
        for(int i=0;i<a.length;i++){//遍历每个槽
            System.out.print("solt"+i);//槽的编号
            for(int j=0;j<a[i];j++){//球的个数打印
                System.out.print("o");
            }
            System.out.println();
        }
    }
    public static int getlocation(String path){//遍历路径
        int count=0;//R的个数表示槽的位置
        for(int i=0;i<path.length();i++){
            if(path.charAt(i)=='R'){//如果路径中有R
                count++;//槽的位置++
            }
        }
        return count;//返回槽的位置
    }
}

猜单词

import java.util.*;
class Class34{ //全局变量:不用传参,函数可以直接调用主函数外面的东西
    //1.先生成一组单词
    public static String [] words={"banana","apple"};   
    //2.随机抽取一个单词
    public static  String word=null;
    //3.创建该单词的一个状态数组
    public static boolean[] state=null;
    //4.猜错的次数
    public static int missed=0;

    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        Random random=new Random();
        word =words[random.nextInt(words.length)];//对单词进行初始化  随机抽取一个单词
        state=new boolean[word.length()];//定义该单词状态数组  
        //5.开始输入字符猜单词
        while(true){
            String password=getPassWord();//要输出的是一个密文,与单词有关,还与当前单词的状态有关
            System.out.print("Enter a letter in word "+password+":");
            String letter=scanner.nextLine();//从键盘输入一个字母
            changeWordStste(letter);//改变单词状态,从左到右全改
            if(isEnd()){//当前是否猜完
                System.out.println("The word is "+word+".You missed "+missed+" time");
                break;
            }
        }
    }
    public static String getPassWord(){
        String password="";
        for(int i=0;i<word.length();i++){
            if(state[i]==true){
                password+=word.charAt(i);
            }else{
                password+="*";
            }
        }
        return password;
    }
    public static void changeWordStste(String letter){
        boolean isExist=false;
        for(int i=0;i<word.length();i++){//遍历整个单词,找相同的字母,重新显示单词
            if(( word.charAt(i)+"" ).equals(letter)){//任何字符加一个空字符串都会变为字符串
                isExist=true;
                if(state[i]==false){//
                    state[i]=true;
                }else{
                    System.out.println("\t"+letter+"is already in the word");
                    return;
                }
            }
        }
        if(!isExist){//标记如果改字母不存在
            missed++;//记录猜错次数
            System.out.println("\n"+letter+" is not in the word");
        }
    }
    public static boolean isEnd(){//判断该单词猜测是否结束
        for(int i=0;i<state.length;i++){
            if(state[i]==false){//如果状态里面还有未猜测的,说明未结束
                return false;
            }
        }
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值