// float要加f false 类型不同 float num1 = 0.01f; double num2=0.01; System.out.println(num1==num2); false
//处理不到 double也相同 float num1 = 1.515151554f; float num2 = 1.515151555f; System.out.println(num1==num2); true
Long startTime = System.currentTimeMillis(); // 放在业务代码的最后面统计总耗时 Long endTime = System.currentTimeMillis(); Long elapsedTime = (endTime - startTime) / 1000; System.out.println("该段总共耗时:" + elapsedTime + "s");
char ch='中';int num=ch;System.out.println(num); 20013 char ch='a';int num=ch;System.out.println(num); 97 往后以此类推
char ch='A'; int num=ch; System.out.println(num); for (int i=65; i<=90; i++){ System.out.print((char)i+" "); } System.out.println(); for (int i=97; i<=125; i++){ System.out.print((char)i+" "); } //结果: 65 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z
//没有第三方的换值 面试题 int a=5; int b=6; System.out.println(a+b-a); System.out.println(a+b-b); System.out.println(a*b/a); System.out.println(a*b/b);
//个位数 十位数 百位数 千位数 Scanner input=new Scanner(System.in); System.out.println("数字:"); int num=input.nextInt(); int ge=num%10; //个位数 int shi=num/10%10; int bai=num/100%10; int qian=num/1000; System.out.println(ge+"\t"+shi+"\t"+bai+"\t"+qian);
int num1=020; //0是8进制 System.out.println(num1); int num2=0b1111; //0b是2进制 System.out.println(num2); int num3=0x2b; //代表16进制 System.out.println(num3);
&& 短路语 前面为假则后不执行 & 逻辑语 都执行 || 一个为真就可以执行 | 相同
选择结构 switch 多联开关 (等值条件判断)
switch(字段) { //字段中的类型 int short byte char 枚举 String 这几种 case 值1: 语句体1; break; case 值2: 语句体2; break; ... default: 语句体n+1; break; }
2.switch和多重if选择结构区别:
相同:
都是用来处理多分支条件的判断
不同 :
switch: 只能处理等值条件判断的情况
多重if:特别适合某个变量处于某个连续区间时的情况
3.Scanner hasNextInt()判断用户输出的是否时合法的数字 (延展)
4.byte short char 三种类型的变量做运算时,结果为int类型
三者不会相互转换,在计算时首先转换成int类型。
int val=12345; int r_right; System.out.println("反转后的整数是:"); while (val!=0){ r_right=val%10; System.out.println(r_right); val=val/10; }
数组
//定义一个数组,用控制输入语句输入一个数字,判断是否存在于定义的数组中 int [] num={8,4,2,1,23,344,12}; //定义数组数量 Scanner input=new Scanner(System.in); System.out.println("请输入一个数字:"); int num1=input.nextInt(); boolean isHave=false; //默认值没有此数 for (int i = 0; i <num.length; i++) { //判断输入的数字是否存在于定义的数组中 if (num1==num[i]){ isHave=true; break; } } if (isHave){ System.out.println("存在"); } else { System.out.println("不存在"); } } //判断最大值 (有漏洞) //nums中都是负数的话最大值为0 int[] nums = {8, 25, 32, 10, 40}; int max = 0; for (int i = 0; i < nums.length; i++) { if (max < nums[i]) { max = nums[i]; } } System.out.println("最大值是:"+max); //修改后 int[] nums = {8, 25, 32, 10, 40}; int max =nums[0]; int min=nums[0]; int sum=0; for (int i = 0; i < nums.length; i++) { if (max < nums[i]) { max = nums[i]; } if (min>nums[i]){ min=nums[i]; } sum=sum+nums[i]; } System.out.println("最大值是:"+max); System.out.println("最小值是:"+min); System.out.println("总和:"+sum); Arrays.sort(nums); // 排序 //遍历 for (int temp:nums) { System.out.println(temp+"\t"); } //排序 Arrays.sort(nums); // 排序 //遍历 for (int temp:nums) { System.out.println(temp+"\t"); }
/** *给数组插入一个数字,输出、排序、输出插入的位置 面试题类似题 */ //定义数组里的数字 int nums[]={70,60,50,40,30,20,10}; //必须降序排序 //数组复制,方便接受新数据后的数组 int []newNums=new int[nums.length+1]; for (int i = 0; i <nums.length ; i++) { newNums[i]=nums[i]; } //数组复制方法二 int []newNums= Arrays.copyOf(nums,nums.length+1); //接受数据 Scanner input=new Scanner(System.in); System.out.println("请输入新增成绩:"); int num1=input.nextInt(); //新数据插入的位置(下标) int index=newNums.length-1; for (int i = 0; i <newNums.length ; i++) { if (num1>=nums[i]){ index=i; break; } } System.out.println(); System.out.println("插入成绩的下标是:"+index); //当前位置后面的数据全部右移 for (int i = newNums.length-1; i>index; i--) { // (倒着来) newNums[i]=newNums[i-1]; //相邻的两位相移动 } //把新数据插入到指定位置 newNums[index]=num1; System.out.println("插入后数组的数据"); for (int temp:newNums) { System.out.print(temp+"\t"); }
二维数组
Arrays类提供排序,查询方法
equles 比较两个数组是否相等. sort升序排序。 tostrng 转为字符串。 void fill (array,val)将数组中的array类型改为val。 binarySearch(array,val)
//数组的复制 int []nums={100,90,80,70,60}; int[] newNums= Arrays.copyOf(nums,nums.length+2); //想加几个长度就在length后加几 System.out.println("新数组的数据:"); for (int i = 0; i <newNums.length; i++) { System.out.print(newNums[i]+"\t"); } System.out.println(); //换行 //两个数组是否相同 System.out.println("判断两个数组是否相同:"); if(Arrays.equals(nums,newNums)) System.out.println("数组相同"); }else { System.out.println("数组不相同!!"); } String arr=Arrays.toString(nums); //转换字符串 System.out.println("输入字符串:"+arr); Arrays.sort(nums);//升序排序 System.out.println(Arrays.toString(nums)); int index=Arrays.binarySearch(nums,70); //a:要搜索的数组 key:要搜索的值 System.out.println("下标"+index);
冒泡排序 相邻两两比较 小靠前 外层 n-1 内层n-1-i
int nums[] = {20, 18, 16, 14, 12}; //冒泡排序 // 外层比较几轮 for (int i = 0; i < nums.length - 1; i++) { for (int j = 0; j <= nums.length - 1; j++) { System.out.println(nums); } for (int j = 0; j <nums.length -1- i; j++) { if (nums[j]>nums[j+1]){ int temp=nums[j]; nums[j]=nums[j+1]; nums[j+1]=temp; } } } System.out.print("排序后的数组:"+ Arrays.toString(nums));
//控制语句输入数组的成绩,求平均分 Scanner input=new Scanner(System.in); int score[]=new int[5]; double sum=0; for (int i = 0; i < score.length; i++) { System.out.println("输入第"+(i+1)+"位成员的成绩:"); score[i]=input.nextInt(); sum=sum+ score[i]; } System.out.println("平均分:"+(sum/5)); }
多维数组(7.10)
二维数组的长度3行5列
int [ ] [ ]score=new int [5] [50]; //最标准的
int [ ] [ ]score=new int [5] [ ]; int [ ] [ ]score=new int [ ] [ ]; //错误的方法 语法上java支持多维数组
int [ ] [ ]score=new int [] [ ]{{ 90,85,61,20,30},{76,36,20},{87}}; int [ ] [ ]score={{ 90,85,61,20,30},{76,36,20},{87}};
Scanner input=new Scanner(System.in);int [] []score=new int[3][5]; //三个班 每个班5个成绩 int sum=0; for (int i = 0; i <score.length ; i++) { sum=0; System.out.println("输入第"+(i+1)+"个班级的成绩"); for (int j = 0; j <score[i].length; j++) { System.out.println("输入第"+(j+1)+"个同学的成绩"); score[i][j]=input.nextInt(); sum += score[i][j]; } System.out.println("第"+(i+1)+"班级的成绩:"+sum); } System.out.println("输出所有班级的成绩:"); for (int i = 0; i <score.length ; i++) { for (int j = 0; j < score[i].length; j++) { System.out.println("请输入第"+(j+1)+"学生的成绩"); System.out.println(score[i][j]+"\t"); } System.out.println(); } //第二种 Scanner input=new Scanner(System.in); int [] []score=new int[3][5]; //三个班 每个班5个成绩 int total[]=new int[3]; //存储成绩 for (int i = 0; i <score.length ; i++) { sum=0; System.out.println("输入第"+(i+1)+"个班级的成绩"); for (int j = 0; j <score[i].length; j++) { System.out.print("输入第"+(j+1)+"个同学的成绩"); score[i][j]=input.nextInt(); sum += score[i][j]; } total[i]=sum; } System.out.println("*******成绩统计成绩******* :"); for (int i = 0; i <score.length ; i++) { System.out.println("第"+(i+1)+"班的成绩:"+total[i]); }
//1. 打印一个五行的平行四边形. for (int i = 1; i <5; i++) { for (int j = 1; j <5-i ; j++) { System.out.print(" "); } for (int j = 1; j <6 ; j++) { System.out.print("*"); } System.out.println(); } } //1. 求1+1/2+2/3+3/5+5/8.....十项之和.(提示:找规律,后一项的分子等于前一项的分母,后一项分母等于前一项分子和分母之和) int a[] = new int[10]; int b[] = new int[10]; a[0]=1; a[1]=1; b[0]=1; b[1]=2; double sum = 0; for (int i=0; i<10; i++){ if(i>1){ a[i]=a[i-1]+a[i-2]; b[i]=b[i-1]+b[i-2]; } sum+= (double)a[i]/(double)b[i]; } System.out.println("sum="+sum); } //1. 打印斐波那契序列: 1 1 2 3 5 8 13 ........打印30项,每一行打印6项. int[] a = new int[30]; a[0] = 1; a[1] = 1; for (int i = 2; i < a.length; i++) { a[i] = a[i - 1] + a[i - 2]; } for (int temp : a){ if (temp % 8 == 0) { System.out.println(); } System.out.print(temp + "\t"); } //使用递归 斐波那契序列求n public static void main(String[] args) { long num=fn1(20); System.out.println("第20项:"+num); } public static int fn1(int n){ if (n==1|n==2){ return 1; }else { return fn1(n-1)+fn1(n-2); } } //不使用递归 public static void main(String[] args) { int num1=1; int num2=1; int sum=0; for (int i = 3; i <=10 ; i++) { sum=num1+num2; num1=num2; num2= sum; } System.out.println(sum); } public static int fn1(int n){ if (n==1|n==2){ return 1; }else { return fn1(n-1)+fn1(n-2); } } //杨wei三角 public static void main(String[] args) { int [] []arr=new int[6][6]; for (int i = 0; i <arr.length ; i++) { for (int j = 0; j <=i ; j++) { //每一行的第一列和最后一列都等于1;其余的数字等于它肩上的两数之和 if (j==i||j==0){ arr[i][j]=1; }else { arr[i][j]=arr[i-1][j]+arr[i-1][j-1]; } System.out.print(arr[i][j]+" "); } System.out.println(); } } 结果: 1 1 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1
递归(调用自己就是递归)
结构包括: 递归头:什么时候停止调用自身方法,没有头,将会陷入死循环 递归体:什么时候需要调用自身方法
//10的阶层 long num=1; for (int i = 1; i <=10; i++) { num=num*i; } System.out.println(num); // Scanner input = new Scanner(System.in); System.out.println("输入一个数字:"); int num1=fn1(input.nextInt()); System.out.println(num1); } public static int fn1(int num1) { if (num1 <= 10) { return num1; } else { return fn1(num1/10)+num1%10; } }
二重循环(7.7)
打印图形(正反直角三角形、正反等腰三角形、菱形和空心菱形)
空心的使用if()来做
//倒直角三角形 //外部循环是控制行数的 for (int i = 0; i <=5; i++) { for (int j = 0; j < (5-i); j++) { System.out.print("*"); } System.out.println(); } //正直角三角形 for (int i = 1; i <=5; i++) { for (int j = 1; j <=i ; j++) { System.out.print("*"); } System.out.println(); } // 1 3 5 7 for (int i = 1; i <=5 ; i++) { for (int j = 1; j <=2*i-1 ; j++) { System.out.print("*"); } System.out.println(); } //等腰三角形 for (int i = 1; i <=5; i++) { for (int j = 1; j <=15-i; j++) { System.out.print(" "); } for (int j = 1; j <=2*i-1 ; j++) { System.out.print("*"); } System.out.println(""); } //倒等腰三角形 for (int i = 1; i <=5; i++) { for (int j = 1; j <i ; j++) { System.out.print(" "); } for (int j = 1; j <=2*(5-i)+1; j++) { System.out.print("*"); } System.out.println(); } //倒等腰三角形 2 for (int i = 5; i >=1; i--) { for (int j = 1; j <=5-i; j++) { System.out.print(" "); } for (int j = 1; j <=2*i-1; j++) { System.out.print("*"); } System.out.println(); } //菱形 for (int i = 1; i <=5; i++) { for (int j = 1; j <=5-i; j++) { System.out.print(" "); } for (int j = 1; j <=2*i-1 ; j++) { System.out.print("*"); } System.out.println(""); } for (int i = 1; i <=5; i++) { for (int j = 1; j <i ; j++) { System.out.print(" "); } for (int j = 1; j <=2*(5-i)+1; j++) { System.out.print("*"); } System.out.println(); } //菱形 2 加if判断 空心 //空心菱形 进阶 for (int i = -4; i <=4 ; i++) { for (int j = 1; j <=Math.abs(i) ; j++) { System.out.print(" "); } for (int k = 1; k <=8-(Math.abs(i)*2-1) ; k++) { if (k==1||k==8-(Math.abs(i)*2-1)){ System.out.print("*"); }else { System.out.print(" "); } } System.out.println(); } //九九乘法表 for (int i = 1; i <=9 ; i++) { for (int j = 1; j <=i ; j++) { System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println(); } //打印圆形 int r = 8; //9行 for (int y = 0; y <= 2 * r; y +=2) {//y的步长为2,改变y的步长可以将圆形变成椭圆 int x = (int)Math.round(r - Math.sqrt(2*r*y-y*y)); //Math.sqrt(r * r-(r-y) *(r-y))转化得 int len = 2 * (r - x); //对称的两*之间的距离 //i行j列 for (int i = 0; i <= x; i++) { //距离控制台左边的距离 System.out.print(" "); } System.out.print("*"); for (int j = 0; j <= len; j++) { System.out.print(" "); } System.out.println("*"); } // 打印x Scanner scanner = new Scanner(System.in); while (scanner.hasNextInt()){ int a = scanner.nextInt(); for (int i = 0; i < a; i++) { //行 for (int j = 0; j < a; j++) { //列 if (i == j || i + j == a - 1) { System.out.print(" *"); }else { System.out.print(" "); } } System.out.println(); } }
在二重循环中使用continue
//第几班级 4人数 求平均分 85分以上人的数量 Scanner input=new Scanner(System.in); int count=0; //总人数 double avg=0; //平均分 double sum=0; //求和 int score=0; //总成绩 for (int i = 1; i <3; i++) { //班级 System.out.println("请输入第"+i+"个班级的成绩:"); avg=0; sum=0; for (int j = 1; j <=4 ; j++) { //学员 System.out.println("第"+j+"个学员的成绩"); score = input.nextInt(); sum=sum+score; if (score>=85){ count++; } } avg=sum/4; System.out.println("第"+i+"个班级的平均分"+avg); System.out.println("85分的人数:"+count); }
小题
int i,j,x=0; for ( i = 0; i < 2; i++) { x++; for ( j = 0; j <=3 ; j++) { if (j%2==0)continue; x++; } x++; System.out.println(x);} //结果为8