【JAVASE】JAVASE基本习题(1)

关于++操作:

1、如下代码的计算结果是:
    int i = 1;
    i *= 0.2;  
    i++;
    System.out.println("i=" + i);
答案:
    i=1
分析:自始至终i都是int类型

======================================
如下代码的运算结果是:
int i = 2;
i *= i++;  分析;i=(i*i)++

int j = 2;
j *= j+1;  分析:j=j*(j+1)

int k = 2;
k *= ++k;  分析:k=k*(1+k)

System.out.println("i=" + i); //答案: i=4
System.out.println("j=" + j); //答案: i=6
System.out.println("k=" + k); //答案: i=6

关于位移:

	public static void main(String[] args) {
		int a = 8, b = 3;

		System.out.println(a>>>b);    //答案:1
        分析:
         1111>>>3=0001


		System.out.println(a>>>b | 2);    //答案:3
        分析:
         1111>>>3=0001

		 0001
         0010
         0011=2+1=3
	}

小学数学题:

1.输出100以内质数

public class Water {
    public static void main(String[] args) {
        wFunction00();
        wFunction01();
    }

    private static void wFunction00() {
        //输出100以内质数
        boolean isFlag=true;
        //获取当前时间距离1970-01-01 00:00:00的毫秒数
        long s = System.currentTimeMillis();
        for (int i = 2; i < 20; i++) {
            for (int j = 2; j < Math.sqrt(i); j++) {//针对质数有效
                if(i%j==0){
                    isFlag=false;
                    break;//仅对非质数的自然数有效
                }
            }
            if (isFlag==true){
                System.out.println(i);
            }
            isFlag=true;
        }

        long e = System.currentTimeMillis();
        System.out.println("当前用时"+(s-e));
    }

    private static void wFunction01() {
        //输出100以内质数
        boolean isFlag=true;
        //获取当前时间距离1970-01-01 00:00:00的毫秒数
        long s = System.currentTimeMillis();
        lable:for (int i = 2; i < 20; i++) {
            for (int j = 2; j < Math.sqrt(i); j++) {//针对质数有效
                if(i%j==0){
                   continue lable;
                }
            }
            if (isFlag==true){
                System.out.println(i);
            }
            isFlag=true;
        }

        long e = System.currentTimeMillis();
        System.out.println("当前用时"+(s-e));
    }

}

2.判断三角形

public class Triangle {
	double a;
	double b;
	double c;

	// 判断是否是一个直角三角形
	boolean isRightTriangle() {
		// 判断值合法
		if (a > 0 && b > 0 && c > 0) {
			// 判断是否是三角形
			if (a + b > c && a + c > b && b + c > a) {
				if (a * a + b * b == c * c || b * b + c * c == a * a || a * a + c * c == b * b) {
					return true;
				}
			}
		}
		return false;
	}

	boolean isIsoscelesTriangle() {
		// 判断值合法
		if (a > 0 && b > 0 && c > 0) {
			// 判断是否是三角形
			if (a + b > c && a + c > b && b + c > a) {
				// 判断是否是等腰三角形
				if (a == b || b == c || a == c) {
					return true;
				}
			}
		}
		return false;
	}

	boolean isEquilateralTriangle() {
		// 判断值合法
		if (a > 0 && b > 0 && c > 0) {
			// 判断是否是三角形
			if (a + b > c && a + c > b && b + c > a) {
				// 判断是否是等边三角形
				if (a == b && b == c) {
					return true;
				}
			}
		}
		return false;
	}

	double getArea() {
		// 判断值合法
		if (a > 0 && b > 0 && c > 0) {
			// 判断是否是三角形
			if (a + b > c && a + c > b && b + c > a) {
				double p = (a + b + c) / 2;
				return Math.sqrt(p * (p - a) * (p - b) * (p - c));
			}
		}
		return 0;
	}

	double getLength() {
		// 判断值合法
		if (a > 0 && b > 0 && c > 0) {
			// 判断是否是三角形
			if (a + b > c && a + c > b && b + c > a) {
				return a + b + c;
			}
		}
		return 0;
	}
}


public class Test {
	public static void main(String[] args) {
		Triangle t = new Triangle();
		t.a = 3;
		t.b = 4;
		t.c = 5;
		
		System.out.println("是否是直接三角形:" + t.isRightTriangle());
		System.out.println("是否是等腰三角形:" + t.isIsoscelesTriangle());
		System.out.println("是否是等边三角形:" + t.isEquilateralTriangle());
		System.out.println("三角形的面积:" + t.getArea());
		System.out.println("三角形的周长:" + t.getLength());
	}
}

3.数字处理

public class MathTools {
	static int add(int a, int b) {
		return a + b;
	}

	static int subtract(int a, int b) {
		return a - b;
	}

	static int mutiply(int a, int b) {
		return a * b;
	}

	static int divide(int a, int b) {
		return a / b;
	}

	static int remainder(int a, int b) {
		return a % b;
	}

	static int max(int a, int b) {
		return a > b ? a : b;
	}

	static int min(int a, int b) {
		return a < b ? a : b;
	}

	static boolean equals(int a, int b) {
		return a == b;
	}

	static boolean isEven(int a) {
		return a % 2 == 0;
	}
	
	static boolean isPrimeNumber(int a){
		for (int i = 2; i < a; i++) {
			if(a%i == 0){
				return false;
			}
		}
		return true;
	}
	
	static int round(double d){
		return (int)(d + 0.5);
	}
}


public class Test {
	public static void main(String[] args) {
		int a = 5;
		int b = 3;
		System.out.println(a + "+" + b  + "=" + MathTools.add(a,b));
		System.out.println(a + "-" + b  + "=" + MathTools.subtract(a,b));
		System.out.println(a + "*" + b  + "=" + MathTools.mutiply(a,b));
		System.out.println(a + "/" + b  + "=" + MathTools.divide(a,b));
		System.out.println(a + "%" + b  + "=" + MathTools.remainder(a,b));
		System.out.println(a + "," + b + "的最大值:" + MathTools.max(a, b));
		System.out.println(a + "," + b + "的最小值:" + MathTools.min(a, b));
		System.out.println(a + "==" + b + "?" + MathTools.equals(a,b));
		System.out.println(a + "是偶数?" + MathTools.isEven(a));
		System.out.println(a + "是素数?" + MathTools.isPrimeNumber(a));
		System.out.println("5.4四舍五入的结果:" + MathTools.round(5.4));
		System.out.println("5.6四舍五入的结果:" + MathTools.round(5.6));
	}
}

4.日历常识

public class CommonsTools {
	static String getWeekName(int week){
		switch(week){
		case 1:
			return "Monday";
		case 2:
			return "Tuesday";
		case 3:
			return "Wednesday";
		case 4:
			return "Thursday";
		case 5:
			return "Friday";
		case 6:
			return "Saturday";
		case 7:
			return "Sunday";
		}
		return "";
	}
	
	static String getMonthName(int month){
		String[] all = {"January","February","March","April","May","June","July","August","September","October","November","December"};
		if(month >= 1 && month <= 12){
			return all[month-1];
		}
		return "";
	}
	
	static int getTotalDaysOfMonth(int year, int month){
		int[] days = {31,28,31,30,31,30,31,31,30,31,30,31};
		if(isLeapYear(year)){
			days[1]++;//闰年2月29天
		}
		if(month >= 1 && month <= 12){
			return days[month-1];
		}
		return 0;
	}
	
	static int getTotalDaysOfYear(int year){
		if(isLeapYear(year)){
			return 366;
		}
		return 365;
	}
	
	static boolean isLeapYear(int year){
		return year%4==0 && year%100!=0 || year%400==0;
	}
}

public class Test {
	public static void main(String[] args) {
		System.out.println("3月:" + CommonsTools.getMonthName(3));
		System.out.println("周三:" + CommonsTools.getWeekName(3));
		System.out.println("2022-2的总天数:" + CommonsTools.getTotalDaysOfMonth(2022, 2));
		System.out.println("2022年是否是闰年?" + CommonsTools.isLeapYear(2022) );
		System.out.println("2022年的总天数:" + CommonsTools.getTotalDaysOfYear(2022));
	}
}

关于数组:

1.基础案例


public class Array {
    public static void main(String[] args) {
        afunc00();
        afunc01();
        afunc02();
    }

//查找
    private static void afunc02() {

        //线性查找
         String[] arr=new String[]{"aa","bb","cc","dd","kk","vv","gg"};
         String dest="kk";
         boolean isFlag=true;
         for (int i = 0; i < arr.length; i++) {
             if(dest.equals(arr[i])){
                 System.out.println("找到了,位置为:"+i);
                 isFlag=false;
                 break;
            }
         }
         if(isFlag){System.out.println("没有找到");}

        //二分查找
        //前提,所要查找的数组必须要有序。
        int[] array1=new int[]{2,3,5,7,11,13,17,19};
        int dest1= 19;
        int head =0;//初始索引
        int end = array1.length-1;//初始尾索引
        boolean isFlag1=true;
        while(head<=end){
            int middle=(head+end)/2;
            if(dest1==array1[middle]){
                System.out.println("找到了,位置为:"+middle);
                isFlag1=false;
                break;
            }else if(array1[middle]>dest1){
                end=middle-1;
            }else {
                head=middle+1;
            }
        }
        if(isFlag1){System.out.println("没有找到");}
    }


//数组反转
    private static void afunc01() {
       
        String[] arr=new String[]{"aa","bb","cc","dd","kk","vv","gg"};
        //法一
        for (int i = 0; i < arr.length/2; i++) {
            String temp=arr[i];
            arr[i]=arr[arr.length-i-1];
            arr[arr.length-i-1]=temp;
        }


        //法二
        for (int i = 0,j=arr.length-1; i <j ; i++,j--) {
            String temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }

    }



/*
定义一个长度为10的整型数组,赋值一些随机数,打印此数组中的最值,和值,平均值

   随机数的生成[10,99]
   公式:(int)(Math.random()*(99-10+1)+10)
*/
    private static void afunc00() {

        int[] arr=new int[10];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=(int)(Math.random()*(99-10+1)+10);
        }

        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+"\t");
        }
        System.out.println(" ");

        //最值
        int maxValue=arr[0];
        int minValue=arr[0];
        for (int i = 1; i < arr.length; i++) {
            if(maxValue<arr[i]){
                maxValue=arr[i];
            }
            if(minValue>arr[i]){
                minValue=arr[i];
            }
        }
        System.out.println("最大值:"+maxValue);
        System.out.println("最小值:"+minValue);

        //求和
        int sum=arr[0];
        for (int i = 1; i < arr.length; i++) {
            sum=sum+arr[i];
        }

        System.out.println("和为"+sum);
        int sum1=0;
        for (int i = 0; i < arr.length; i++) {
            sum1+=arr[i];
        }
        System.out.println("和为"+sum1);

        //求均值
        double mean=sum/arr.length;
        System.out.println("均值为"+mean);
    }
}

2.判断数组中的元素值是否对称

public class Test {
	public static void main(String[] args){
		int[] arr = {1,2,3,4,4,3,2,1};
		
		//(1)先假设它是对称的
		boolean flag = true;
		
		//(2)遍历,查看数组的元素是否首尾对称
		//left表示左边的下标
		//right表示右边的下标
		for(int left=0,right=arr.length-1; left<right; left++,right--){
			if(arr[left] != arr[right]){
				flag = false;
				break;
			}
		}
		
		System.out.println(flag?"对称":"不对称");
	}
}

3.打印10行杨辉三角 


public class Arr {
    public static void main(String[] args) {
        int[][] yangHui=new int[10][];
        for (int i = 0; i < yangHui.length; i++) {
            yangHui[i]=new int[i+1];
            yangHui[i][0]=yangHui[i][i]=1;
            if(i>1){
                for(int j=1;j<yangHui[i].length-1;j++){
                    yangHui[i][j]=yangHui[i-1][j-1]+yangHui[i-1][j];
                }
            }
        }

        for (int i = 0; i < yangHui.length; i++) {
            for (int j = 0; j < yangHui[i].length; j++) {
                System.out.print(yangHui[i][j]+" ");
            }
            System.out.println();
        }
    }
}

4.统计字符:统计每个字符出现的次数并打印到控制台。

public class Test {
	public static void main(String[] args){
		char[] arr = {'a','l','f','m','f','o','b','b','s','n'};
		
		int[] counts = new int[26];//counts数组的元素,目前默认值都是0
		/*
		counts[0] 存储 'a'字母出现的次数
		counts[1] 存储 'b'字母出现的次数
		counts[2] 存储 'c'字母出现的次数
		...
		*/
		//遍历arr数组,统计每一个字母出现的次数,并且把次数存储的counts数组中
		for(int i=0; i<arr.length; i++){
			//例如:arr[0]现在是'a',那么应该counts[0]++
			//arr[1]现在是'l',那么应该counts[11]++
			//找counts[下标]其中的下标与字母'a','b'等的关系
			//例如:'a' ==》counts[0]的[0]的关系		'a'-97=97-97=0
			//例如:'l' ==》counts[11]的[11]的关系		'l'-97=108-97=11
			counts[arr[i] - 97]++;
		}
		
		//遍历counts数组显示结果
		for(int i=0; i<counts.length; i++){
			if(counts[i]!=0){
				//System.out.println(字母 + "--" + 次数);
				System.out.println((char)(i+97) + "--" + counts[i]);
			}
		}
	}
}

5.比较两个数组内容是否完全一致。

public class Test {
	public static void main(String[] args) {
		int[] arr1 = {1,2,3,4,5,6,7};
		int[] arr2 = {1,2,3,4,5,6,7};
	
		boolean flag = true;//假设一致
		if(arr1.length!=arr2.length){
			flag = false;
		}else{
			for (int i = 0; i < arr2.length; i++) {
				if(arr1[i] != arr2[i]){
					flag = false;
					break;
				}
			}
		}
		System.out.println("是否一致:" + flag);
	}
}

6.随机验证码。

public class Test {
	public static void main(String[] args) {
		String[] arr = new String[10];
		java.util.Random rand = new java.util.Random();
		for (int i = 0; i < arr.length; i++) {
			arr[i] = "";
			for (int j = 0; j < 6; j++) {
				int num;
				while(true){
					num = rand.nextInt(123);
					//数字[48,57]  大写字母[65,90]  小写字母[97,122]
					if(num>=48 && num<=57){
						break;
					}else if(num>=65 && num<=90){
						break;
					}else if(num>=97 && num<=122){
						break;
					}
				}
				arr[i] += (char)num;
			}
		}
		
		for (int i = 0; i < arr.length; i++) {
			System.out.println("随机验证码:" + arr[i]);
		}
	}
}

关于扑克牌:

1.扑克牌打印:

1)一维数组实现

public class Test{
	public static void main(String[] args){
		String[] hua = {"黑桃","红桃","梅花","方片"};
		String[] dian = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
		String[] pu = new String[hua.length*dian.length];
		for(int i=0,k=0; i<hua.length; i++){
			for(int j=0; j<dian.length; j++,k++){
				pu[k] = hua[i]+dian[j];
			}
		}
		
		for (int i = 1; i <= pu.length; i++) {
			System.out.print(pu[i-1]+" ");
			if(i%13==0){
				System.out.println();
			}
		}
	}
}

2)二维数组实现

public class Test06 {
	public static void main(String[] args){
		//1、声明一个二维数组,并确定长度
		String[][] arr = new String[2][];
		
		//2、确定第一行的列数,第一行存储花色
		arr[0] = new String[4];
		
		//3、确定第二行的列数,第二行存储点数
		arr[1] = new String[13];
		
		//4、把花色和点数放进去
		//花色
		arr[0][0] = "黑桃";
		arr[0][1] = "红桃";
		arr[0][2] = "梅花";
		arr[0][3] = "方片";
		
		//点数
		arr[1][0] = "A";
		for(int i=1; i<=9; i++){//表示第二行部分下标
			arr[1][i] = i+1+"";
		}
		arr[1][10] = "J";
		arr[1][11] = "Q";
		arr[1][12] = "K";
	
		//5、显示
		for(int i=0; i<arr[0].length; i++){//外循环循环花色
			for(int j=0; j<arr[1].length; j++){//内循环循环点数
				//arr[0][?]是花色
				//arr[1][?]是点数
				System.out.print(arr[0][i] + arr[1][j] + " ");
			}
			System.out.println();
		}
	}
}

2.模拟在一副牌中,抽取第1张,第5张,第50张扑克牌。

public class Test02 {
	public static void main(String[] args){
		String[] hua = {"黑桃","红桃","梅花","方片"};
		String[] dian = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};
		String[] pu = new String[hua.length*dian.length];
		for(int i=0,k=0; i<hua.length; i++){
			for(int j=0; j<dian.length; j++,k++){
				pu[k] = hua[i]+dian[j];
			}
		}
		
		System.out.println(pu[1-1] + " " + pu[5-1] +" " + pu[50-1]);
	}
}

关于集合辅助工具:


public class ArraysTest {
    public static void main(String[] args) {

      //1.boolean equals(int[] a,int[] b);判断两个数组是否相等
        int[] arr=new int[]{1,2,3,4};
        int[] arr1=new int[]{1,3,10,5,2,4};

        boolean isEquals = Arrays.equals(arr, arr1);
        //判断机理:先比地址,再判断是否为空,再比长度,最后比元素

        System.out.println(isEquals);//false原因:数组有顺序要求

        //2.String toString(int[] a);输出数组信息
        System.out.println(Arrays.toString(arr));
        //Arrays.toString()实现机理是使用了StringBuilder,将数组中所有元素(包含,和[])取出拼接在StringBuilder中

        //3.void fill(int[] a,int val);将指定的值填充到数组中
        Arrays.fill(arr,10);
        //实现原理:遍历赋值
        System.out.println(Arrays.toString(arr));

        //4.void sort(int[] a);对数组进行排序
        Arrays.sort(arr1);//实现原理用快排
        System.out.println(Arrays.toString(arr1));

        //5.int binarySearch(int[] a,int key);
        int[] arr2=new int[]{2,3,5,7,11,13,17,19};
        int i = Arrays.binarySearch(arr2, 17);
        if(i>=0){
            System.out.println("元素所在位置:"+i);
        }else {//只要出现小于0的数表示没有找到目标数值
            System.out.println("没有找到");
        }

    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值