关于++操作:
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("没有找到");
}
}
}