Java练习题二(函数和数组)

题目:豆机
在这里插入图片描述
代码实现:

import java.util.*;
class Class32{
/*
球的路径由层决定
球能进入槽,要经过solts-1层,每一层都有左右两个方向(L和R)
都为L是左边第一个槽,都为R为右边第一个槽
进入从左到右槽的路径中R的个数递增
0个R,1个R,....solts-1个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();    //进过的层数为solts-1
        //模拟槽创建一个数组
        int[] a=new int[slots];
        //根据球的个数创建路径
        for(int i=0;i<balls;i++){   //遍历球数
            String path="";     //创建一个空串,存放路径
            for(int j=0;j<slots-1;j++){     //遍历层数
                path+=Math.random()>0.5?"L":"R";     //调用随机数输出路径
            }
            System.out.println(path);     //打印每个球的path
            a[getLocation(path)]++;       //让R的个数对应的槽的球+1  
        }
        //打印槽中球的情况
        for(int i=0;i<a.length;i++){    //遍历数组a
            System.out.print("slots"+i+":");   //显示行对应的槽  
            for(int j=0;j<a[i];j++){      //遍历对应槽球的个数
                System.out.print("O"); //打印球
            }
            System.out.println();   //换行
        }
    }
    //函数getLocation返回path中R的个数
    public static int getLocation(String path){
        int count=0;     //用于记录R的个数
        for(int i=0;i<path.length();i++){   //遍历path
            //如果path中的字符和R相等,count++
            if((path.charAt(i)+"").equals("R")){   
                count++;    
            }
        }
        return count;  //返回
    }
}

题目:连续相等的四个数
在这里插入图片描述
代码实现:

import java.util.Scanner;
class Class33{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        //1.获取数组的长度
        System.out.print("Enter the number of values:");
        int[] a=new int[scanner.nextInt()];
        //2.给数组赋值元素
        System.out.print("Enter the values:");
        for(int i=0;i<a.length;i++){
            a[i]=scanner.nextInt();
        }
        //3、调用函数输出
        if(isConsecutiveFour(a)){
            System.out.println("The list has consetive fours");
        }else{
            System.out.println("The list has no consetive fours");
        }
    }
    //4、函数isConsecutiveFour判断数组是否有四个连续相等的数
    public static boolean isConsecutiveFour(int[] values ){
        int count = 1;      //计数
        for(int i = 0;i<values.length-1;i++){
            if(values[i+1] == values[i]){   //如果后面的等于前面的count++
                count++;
                if(count == 4)  //有连续四个时返回
                    return true;
            }
            else{
                count = 1;  //否则count重置为1
            }
        }
        return false;
    }
}

题目:回文素数
在这里插入图片描述
代码实现:

class Home26{
    public static void main(String[] args){
        print(100);  //调用函数
    }
    public static void print(int n){
        int number=2;   //素数初始从2遍历
        int count=0;    
        while(count<n){     //因为不知道循环多少个数字,用while循环
            if(isPrime(number)&&isReverse(number)){   //调用两个方法
                count++;
                if(count%10==0){    //一行十个数字
                    System.out.print(number+"\n");
                }else{
                    System.out.print(number+"\t");
                }
            }
            number++;
        }
    }
    //判断是否是素数
    public static boolean isPrime(int number){
        for(int j=2;j<=number/2;j++){   //对于number当不能被2到number/2之间的数字整除就是素数
            if(number%j==0){
                return false;
            }
        }
        return true;
    }
    //判断是否是回文
    public static boolean isReverse(int number){
        int temp=number;    //定义临时变量,一会用于与倒序后的数对比
        int res=0;      //定义res存放倒序后的数
        while(true){
            if(number==0){  //跳出循环条件
                break;
            }                  //1234           
            int a=number%10;   //4  3   2   1
            res=res*10+a;      //4  43  432 4321
            number/=10;        //123  12   1   0 跳出循环
        }
        return res==temp;
    }
}

题目:平方根的近似求法
在这里插入图片描述
代码实现:

class Class28{
    public static void main(String[] args){
       System.out.println(sqrt(16));
    }
    public static double sqrt(int n){   //定义函数
        double nextGuess = 0;
        double lastGuess = 1;
        while(true){
            nextGuess = (lastGuess+n/lastGuess)/2;
            if(Math.abs(nextGuess-lastGuess)<0.000001){ //跳出循环的条件
                break;
            }
            lastGuess = nextGuess;  
        }
        return nextGuess;
    }
}

题目:检验密码
在这里插入图片描述
代码实现:

import java.util.Scanner;
class Class27{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入一个密码:");    //提示用户输入
        String s = scanner.nextLine(); 
        if(isVaild(s)){                   //调用函数检测密码,选择输出语句
            System.out.println("合法");
        }else{
            System.out.println("不合法");
        }

    }
    //isVaild函数用于检测密码
    public static boolean isVaild(String s){
        return isRight1(s)&&isRight2(s)&&isRight3(s);   //只有三个密码规则全部符合函数才为真
    }
    //检测密码长度函数
    public static boolean isRight1(String s){
        return s.length()>=8;
    }
    //检测密码内容函数
    public static boolean isRight2(String s){
        for(int i=0;i<s.length();i++){  //遍历密码
            char c=s.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 s){
        int digitCount=0;   //存放数字个数
        for(int i =0;i<s.length();i++){    //遍历
            char c =s.charAt(i);    
            if(isDigit(c)){  //调用检测数字函数
                digitCount++;   
            }
        }
        return digitCount>=2;   //数字个数大于2返回真
    }
}

题目:消除重复
在这里插入图片描述
代码实现:

import java.util.Arrays;
import java.util.Scanner;
class Class30{
/*
消除重复两个方法
步骤:
1、边读边消除
    1、定义数组(长度先给0,因为输出重复时,输入数字不放入数组,无法确定要读入多少个数字)
    2、提示用户输入
    3、for循环读入输入时,判断数组中是否包含这个数字(循环结束条件为i<10)
    4、若包含则不读入数组,
    5、若不包含则将数组扩容resize函数,同时将扩容的数组尾部加上该数字
    6、输出数组内容
2、读完再消除
    1、定义数组
    2、提示用户输入
    3、输入的同时将输入的数组读到数组(for循环读入)
    4、定义一个size变量表示数组的有效元素长度
    5、遍历数组,如果有重复的将后面的数向前移动一个,size减一
    5、打印输出有效元素
*/
    public static void main(String[] args){
        //边消边读
        //version1();
        //读完再消
        version2();
    }
    public static void version2(){
        int[] arr=new int[10];
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter ten number: ");
        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;j<size;){
                if(arr[i]==arr[j]){
                    for(int k=j+1;k<size;k++){
                        arr[k-1]=arr[k];
                    }
                    size--;
                }
                j++;
            }
        }
        for(int i=0;i<size;i++){
            System.out.print(arr[i]+" ");
        }
    }


    public static void version1(){
        Scanner scanner=new Scanner(System.in);
        int[] arr=new int[0];
        System.out.println("Enter ten number: ");
        for(int i=0;i<10;i++){
            int number=scanner.nextInt();
            if(!isContains(arr,number)){    //不包含时
                arr=resize(arr,arr.length+1);   //扩容
                arr[arr.length-1]=number;       //数字放入数组
            }
        }
        System.out.println(Arrays.toString(arr));
    }
    //扩容函数
    public static int[] resize(int[] arr,int newLen){   
        int[] newArr=new int[newLen];
        for(int i=0;i<arr.length;i++){
            newArr[i]=arr[i];
        }
        return newArr;
    }
    //判断数组是否包含输入的数字
    public static boolean isContains(int[] arr,int key){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                return true;
            }
        }
        return false;
    }
}

题目:是否排好序了?
在这里插入图片描述
代码实现:

import java.util.*;
class Class31{
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int[] list=new int[10];       //创建数组用于存储输入的数字
        System.out.println("Enter list: ");
        for(int i=0;i<list.length;i++){        //将读入的数字存入数组
            list[i]=scanner.nextInt();
        }
        if(isSorted(list)){            //根据isSorted函数选择输出语句
            System.out.println("The list is already sorted");
        }else{
            System.out.println("The list is not sorted");
        }
    }
    //判断是否是顺序的函数
    public static boolean isSorted(int[] list){
        for(int i=0;i<list.length;i++){       //遍历所有数组元素i
            for(int j=i+1;j<list.length;j++){   //遍历i之后的所有数组元素
                if(list[i]>list[j]){        //判断前后谁大
                    return false;           
                }
            }
        }
        return true;     //返回函数的值
    }

}

题目:四个连续相等的数在这里插入图片描述
代码实现:

import java.util.Scanner;
class Class33{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);         
        System.out.println("Enter the number of values: ");     //提示用户输入接下来要输入数字的个数
        int number=scanner.nextInt();           
        System.out.println("Enter the valus: ");    //提示用户输入数字
        int[] arr=new int[number];
        for(int i=0;i<arr.length;i++){          //将输入的数字存入数组
            arr[i]=scanner.nextInt();
        }
        if(isConsecutiverFour(arr)){            
            System.out.println("The list has consecutive fours");
        }else{
            System.out.println("The list has no consecutive fours");

        }
    }
    //函数isConsecutiverFour用于判断数组中是否有连续相等的四个数
    public static boolean isConsecutiverFour(int[] values){
        boolean flag=true;        //定义一个标志,默认开始数组都是符合要求的
        for(int i=0;i<values.length-3;i++){     //遍历从角标0到values.length-3位置的元素
            for(int j=i+1;j<i+4;j++){           //遍历元素后三个位置的元素
                if(values[i]!=values[j]){       //对比两者,若有不等标志flag为false
                    flag=false;
                }
            }
        }
        return flag;        //返回flag的值
    }
}

题目:找最小元素的下标
在这里插入图片描述
代码实现:

import java.util.Scanner;
class Home30{
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("Enter ten number: ");
        double[] arr=new double[10];       //创建数组
        for(int i=0;i<arr.length;i++){      //用户输入的数读入数组
            arr[i]=scanner.nextInt();
        }
        System.out.println(indexOfSmallestElement(arr));    //用函数indexOfSmallestElement
    }
    //函数indexOfSmallestElement实现找最小元素下标
    public static int indexOfSmallestElement(double[] array){
        double min=array[0];    //初始化:最小元素先给数组的第一个位置
        int count=0;            //记录最小元素的个数
        int n=0;      //标记,存储最小元素下标
        for(int i=0;i<array.length;i++){    //遍历数组
            if(array[i]==min){      //若有和min相等的元素count加1
                count++;
            }
            if(array[i]<min){       //若min小于数组元素
                min=array[i];       //给min筹重新赋值
                count=1;        //同时给count赋值为1
                n=i;        //把角标i给标记n
            }
        }
        if(count>=1){      
            return n;
        }else{
            return -1;
        }
    }
}

题目:完全相同的数组
在这里插入图片描述
代码实现:

import java.util.Scanner;
class Home31{
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        int[] list1=new int[5];
        int[] list2=new int[5];
        System.out.println("Enter list1: ");
        for(int i=0;i<list1.length;i++){
            list1[i]=scanner.nextInt();     //读取输入并存入数组list1
        }
        System.out.println("Enter list2: ");
        for(int i=0;i<list2.length;i++){
            list2[i]=scanner.nextInt();     //再次读取输入并存入数组list2
        }
        if(equals(list1,list2)){          //根据函数equals返回的布尔值,选择输出语句  
            System.out.println("Two lists are strictly identical");
        }else{
            System.out.println("Two lists are not strictly identical");
        }
    }
    //函数equal用于判断两数组是否是完全相同的
    public static boolean equals(int[] list1,int[] list2){
        for(int i=0;i<list1.length;i++){    //遍历俩数组元素
                if(list1[i]!=list2[i]){    //对比元素
                    return false;   //若不相等函数返回false
                }
        }
        return true;    //全部遍历完,返回true
    }
}

题目:合并两个有序列表
在这里插入图片描述
代码实现:

import java.util.Arrays;
import java.util.Scanner;
class Home32{
/*
麻烦点:读取用户输入,所以开始不知道一个数组长度,第二个数组放入第三个数组时角标不同
解决方案:定义index变量,
        不用arr3[i]=arr2[i];
        直接用arr3[index++]=arr1[i];
*/
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        int[] list1=new int[6];
        int[] list2=new int[4];
        int[] list3=new int[list1.length+list2.length];   //创建数组list3为list和list2合并后的新数组
        int index=0;    //定义初始化index变量,作为list3的角标
        System.out.println("Enter list1");
        for(int i=0;i<list1.length;i++){
            list1[i]=scanner.nextInt();     //读入数据存入数组      
            list3[index++]=list1[i];    //顺便将刚读入list1的数据给list3
        }
        System.out.println("Enter list2");
        for(int j=0;j<list2.length;j++){
            list2[j]=scanner.nextInt();     //给list2读入数据
            list3[index++]=list2[j];    //将刚读入list2的数据给list3
        }
        int temp=0;    //定义一个变量,方便排序
        //双for循环遍历排序
        for(int i=0;i<list3.length;i++){
            for(int j=i+1;j<list3.length;j++){
                if(list3[i]>list3[j]){   //对比前后元素,借用临时变量排序
                    temp=list3[i];
                    list3[i]=list3[j];
                    list3[j]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(list3)); //调用Arrays类的toString方法,输出新数组
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值