zoukankan      html  css  js  c++  java
  • javaSE_Java第一周总结:有难度题目集合

    第一周练习总结
    说明:尽量采用多种做法解决
    1.使用三种方法实现变量交换

    public class Test1Change{
        public static void main(String[] args){
            //1.使用三种方法实现变量交换
            int a=1;
            int b=2;
    
            //1)第三方变量实现交换
            /*
            int c=a;
            a=b;
            b=a;
            */
            //2)数学运算实现交换
            /*
            a=a+b;
            b=a-b;
            a=a-b;
            */
            //3)位运算实现交换
    
            a=a^b;
            b=a^b;
            a=a^b;
    
            System.out.println("a="+a);
            System.out.println("b="+b);
        }
    }
    

    2.设计一个实验证明&和&&的区别

    public class Test2Prove{
        public static void main(String[] args){
            //设计一个实验证明&和&&的区别
    
            //方法一:使用自增自减实现
            int a=2;
            int b=3;
            //若后面运算了,那么a应该为3,若为2,说明未运算
            System.out.println(a>b&&a++>b);
            System.out.println(a);
            //若后面运算了,那么b应该为4,若为3,说明未运算
            System.out.println(a>b&a>b++);
            System.out.println(b);
    
    
            //方法二:用分母不为0做
            //若后面运行则会报错:Exception in thread "main" java.lang.ArithmeticException: / by zero,意思是分母不能为0
            //若后面不运行,则不会报错
            System.out.println(1>2&&2>(5/0));
            System.out.println(1>2&2>(5/0));
        }
    }
    

    3.从键盘录入输入3 个数a,b,c,按从大到小进行输出

    public class Test3Sort{
        public static void main(String[] args){
            //3.从键盘录入输入3 个数a,b,c,按从大到小进行输出
            int a=3,b=6,c=5;
    
            //方法一:
            int max=a>b?a:b;
            max=max>c?max:c;
    
            int min=a<b?a:b;
            min=min<c?min:c;
    
            //获取mid方法一
            /*
            int mid=(a+b+c)-max-min;
            */
            //获取mid方法二
            int mid;
            if(a<max&&a>min){
                mid=a;
            }else{
                mid=(b<max&&b>min)?b:c;
            }
    
    
            System.out.println("a,b,c三个数由大到小排列为:"+max+" "+mid+" "+min);
    
            //方法二:不需要定义三个变量,但过程复杂,穷举法
            if(a>=b){
                if(b>=c){
                    //a>=b b>=c
                    System.out.println("三个数从大到小排列:"+a+"   "+b+"    "+c);
                }else{
                    //a>=b c>=b
                    if(a>=c){
                        System.out.println("三个数从大到小排列:"+a+"   "+c+"    "+b);
                    }else{
                        //a>=b c>=a
                        System.out.println("三个数从大到小排列:"+c+"   "+a+"    "+b);
                    }
                }
            }else{
                //b>=a
                if(a>=c){
                    //b>=a a>=c
                    System.out.println("三个数从大到小排列:"+b+"   "+a+"    "+c);
                }else{
                    //b>=a c>=a
                    if(b>=c){
                        //b>=c c>=a
                        System.out.println("三个数从大到小排列:"+b+"   "+c+"    "+a);
                    }else{
                        //c>=b c>=a b>=a
                        System.out.println("三个数从大到小排列:"+c+"   "+b+"    "+a);
    
                    }
                }
            }
    
            //方法二改版:最外层先获取最大值,第二层再获取第二大值,更好理解,穷举法
            if(a>=b&&a>=c){
                if(b>=c){
                    System.out.println("三个数从大到小排列:"+a+"   "+b+"    "+c);
                }else{
                    System.out.println("三个数从大到小排列:"+a+"   "+c+"    "+b);
                }
            }else if(b>=a&&b>=c){
                if(a>=c){
                    System.out.println("三个数从大到小排列:"+b+"   "+a+"    "+c);
                }else{
                    System.out.println("三个数从大到小排列:"+b+"   "+c+"    "+a);
                }
            }else{
                if(a>=b){
                    System.out.println("三个数从大到小排列:"+c+"   "+a+"    "+b);
                }else{
                    System.out.println("三个数从大到小排列:"+c+"   "+b+"    "+a);
                }
            }
    
        }
    }
    

    4.模拟ATM取款机的三次密码校验,当天达到3次输入密码错误,则提示“账号被冻结”,其他情况则提示还有多少次输入机会
    注意:如果3次均输错,提示:账号已被冻结
    如果1次或2次输错后退出,提示:欢迎下次再来
    如果输对了密码,提示:随便取款

    import java.util.*;
    
    public class Test4ATM{
        public static void main(String[] args){
            //4.模拟ATM取款机的三次密码校验,当天达到3次输入密码错误,
            //则提示“账号被冻结”,其他情况则提示还有多少次输入机会
            Scanner input=new Scanner(System.in);
            int count=3;//剩余的机会
            String str;
            do{
                System.out.println("请输入密码:");
                int password=input.nextInt();
                if(password==1234){
                    System.out.println("密码正确,请随便取款!");
                    break;
                }else{
                    count--;
                    if(count<1){
                        System.out.println("账号已被冻结,请携带身份证去银行办理");
                        break;
                    }else{
                        System.out.println("密码错误,还剩余"+count+"次机会。如果继续请输入y,退出请按其他任意键:");
                        str=input.next();
                        if(!str.equals("y")){
                            System.out.println("欢迎下次再来!");
                            break;
                        }
                    }   
                }
            }while(str.equals("y"));
        }
    }
    

    5.做一个剪刀石头布的对战小程序

    import java.util.*;
    
    public class Test5Game{
        public static void main(String[] args){
            //5.做一个剪刀石头布的对战小程序
            Scanner input=new Scanner(System.in);
            System.out.println("经典游戏:剪刀石头布");
            System.out.println("游戏规则:1代表剪刀,2代表石头,3代表布");
            int computer=(int)(Math.random()*3)+1;
            //问题核心:剪刀与布的比较
            //方法一:穷举法
            System.out.println("请出拳:");
            int me=input.nextInt();
            switch(me){
                case 1:
                    if(computer==1){
                        System.out.println("你们战平了,电脑出的剪刀!");
                    }else if(computer==2){
                        System.out.println("你输了,电脑出的石头!");
                    }else{
                        System.out.println("你赢了,电脑出的布!");
                    }
                    break;
                case 2:
                    if(computer==1){
                        System.out.println("你赢了,电脑出的剪刀!");
                    }else if(computer==2){
                        System.out.println("你们战平了,电脑出的石头!");
                    }else{
                        System.out.println("你输了,电脑出的布!");
                    }
                    break;
                case 3:
                    if(computer==1){
                        System.out.println("你输了,电脑出的剪刀!");
                    }else if(computer==2){
                        System.out.println("你赢了,电脑出的石头!");
                    }else{
                        System.out.println("你们战平了,电脑出的布!");
                    }
                    break;
            }
    
            //方法二
            if(computer==1&&me==3||computer==3&&me==1){
                if(computer==1&&me==3){
                    System.out.println("你输了,电脑出的"+computer+"!");
                }else{
                    System.out.println("你赢了,电脑出的"+computer+"!");
                }
            }else if(computer==me){
                System.out.println("你战平了,你们出的一样!");
            }else{
                if(computer<me){
                    System.out.println("你赢了,电脑出的"+computer+"!");
                }else{
                    System.out.println("你输了,电脑出的"+computer+"!");
                }
            }
        }
    }

    6.素数也叫质数.是除了1和其本身,不能被其他正整数整除的正整数.1不是素数.
    a)例如:2,3,5,7,11,13,17,19,23…..
    a)写一个方法判断该数是否为素数(设计成一个方法 返回类型boolean)
    b)输出某个范围内的所有素数,比如100-200之间。

    public class Test2SuShu{
        public static void main(String[] args){
            /*
            if(false){
                System.out.println("搞不定");
            }
            */
            /*
            for(int i=1;i<=20;i++){
                //如果是素数,就把他打印出来
                //if(isSuShu(i) == true){
                if(isSuShu(i)){
                    System.out.print(i+" ");
                }
            }
            */
            showSuShu(20,1);
        }
    
        public static void showSuShu(int start,int end){
            //start>end 交换
            for(int i=start;i<=end;i++){
                //如果是素数,就把他打印出来
                //if(isSuShu(i) == true){
                if(isSuShu(i)){
                    System.out.print(i+" ");
                }
            }
        }
    
        public static boolean isSuShu(int n){
            //素数也叫质数.是除了1和其本身,
            //不能被其他正整数整除的正整数.
            //1不是质数也不是合数
            if(n == 1){
                return false;
            }
            //6 2-5
            //在2到当前数-1的范围内
            for(int i=2;i<=n-1;i++){
                //只要有一个数能被整除
                if(n%i == 0){
                    //说明不是素数
                    return false;
                }
            }
            //遍历结束之后
            //还是没有其他的数可以被整除
            //说明是素数
            return true;
        }
    }

    7.数组的查找(两种:普通法,二分法);.数组排序(两种:冒泡排序,选择排序)

    import java.util.Arrays;
    public class Test6Search{
        public static void main(String[] args){
            //7.数组的查找(两种:普通法,二分法)
            int[] arr={2,6,1,5,9,23};
            int num=6;
            //普通法查找
            for(int i=0;i<arr.length;i++){
                if(num==arr[i]){
                    System.out.println("要查询的数"+num+"是数组中的第"+(i+1)+"个");
                }
            }
    
            //二分法查找:必须是有序数组
    
    
            //8.数组排序(两种:冒泡排序,选择排序)
            //冒泡排序
            /*
            for(int j=0;j<arr.length-1;j++){
                for(int i=0;i<arr.length-1-j;i++){
                    if(arr[i]>arr[i+1]){
                        arr[i]=arr[i+1]+arr[i];
                        arr[i+1]=arr[i]-arr[i+1];
                        arr[i]=arr[i]-arr[i+1];
                    }
                }
            }
            */
    
    
            //二分法查找
            int max=arr.length-1;
            int min=0;
            int mid=(max+min)/2;
    
            for(int i=1;i<arr.length;i++){
                if(arr[mid]==num){
                    System.out.println("要查询的数"+num+"是数组中的第"+(mid+1)+"个");
                    break;
                }else if(arr[mid]>num){
                    max=mid-1;  
                }else{
                    min=mid+1;
                }
                mid=(max+min)/2;
            }
    
            //选择排序
            /*
            for(int j=0;j<arr.length-1;j++){
                int index=j;
                for(int i=j+1;i<arr.length;i++){
                    if(arr[index]>arr[i]){
                        index=i;
                    }
    
                }
    
                int temp=arr[j];
                arr[j]=arr[index];
                arr[index]=temp;
            }
            */
    
            System.out.println(Arrays.toString(arr));
        }
    }
  • 相关阅读:
    angular 中同级元素交替样式
    Type反射遍历类的属性
    对路径“xxxxx”的访问被拒绝。
    判断文件路径和文件是否存在
    List集合删除方法
    .NET 树型递归
    AngularJS使用ngMessages进行表单验证
    Windows 端口占用查询
    小程序页面高度控制
    如何理解多个域名解析到同一个服务器空间上?
  • 原文地址:https://www.cnblogs.com/TCB-Java/p/6770152.html
Copyright © 2011-2022 走看看