JavaSE基础总结(1)

笔记 专栏收录该内容
5 篇文章 0 订阅

1.标识符

	可以简单的理解为一个名字。在Java中,我们需要标识代码的很多元素,
	包括类名、方法、字段、变量、包名等。我们选择的名称就称为标识符,
	并且遵循以下规则:
	 1. 标识符可以由字母、数字、下划线(_)、美元符($)组成,但不能包含 @、%、空格等
	 其它特殊字符。  
	 2. 不能以数字开头。譬如:123name 就是不合法; 标识符是严格区分大小写的。 所以一定
	 要分清楚 imooc 和 IMooc
	 3. 是两个不同的标识符。 标识符的命名最好能反映出其作用,做到见名知意。

2.关键字

	关键字时在java语言中,已经被赋予特定意义的一些单词。他们不能被用作标识符如:

3.数据类型

3.1基本数据类型(8种)

在这里插入图片描述

3.1.1 Java支持的数据类型有哪些?什么是自动拆装箱?(面试题)

	8种基本数据类型:
	byte(1) ,short(2) ,int(4) ,long(8) ,float(4) ,double(8) ,char(2) ,boolean(1)
	自动装箱:
	是java编译器在基本数据类型和对应的对象包装类型之间做的一个转换
	int ----->Integer(自动装箱)
	Integer---->int(自动拆箱) 

3.2练习

3.2.1代码实现最大值最小值

package com.test;

public class Test_Max_Min {
	public static void main(String[] args) {
		byte b1 = -128;
		byte b2 = 127;
		System.out.println("byte=["+b1+","+b2+"]");
		//左边用的是基本数据类型,右边是包装类型
		short b3 = Short.MAX_VALUE;
		short b4 = Short.MIN_VALUE;
		System.out.println("byte=["+b3+","+b4+"]");
		int b5 = Integer.MAX_VALUE;
		int b6 = Integer.MIN_VALUE;
		System.out.println("byte=["+b5+","+b6+"]");
		//其他的跟上面类似
		//字符型 遵照的是ASCALL码表
		char b7 = 'a';
		char b8 = 97;
		System.out.println(b7);
		System.out.println(b8);
	}
}

3.2.2输入个人信息

小薛今年23岁,月薪10000.0,感概JAVA是世界上最好的语言。

package com.test;

public class Test_Infomation {
	public static void main(String[] args) {
		String name = "小薛";
		int age = 23;
		double salary = 10000.0;
		String str = name+"今年"+age+"岁,月薪"+salary+",感慨JAVA是世界上最好的语言";
		System.out.println(str);		
	}
}

3.2.3圆形面积

package com.test;

import java.util.Scanner;

public class Test_Circle_Area {
	public static void main(String[] args) {
		System.out.println("请输入半径");
		int r = new Scanner(System.in).nextInt();
		System.out.println(3.14*r*r);
	}
}

3.2.4变量交换
在这里插入图片描述
因为两个变量不能直接交换,所以要借助中间变量t,就好比两只手,左手拿着苹果,右手拿着梨,我想要左右手中的东西交换,可两只手现在都占着,这是就需要一个能放任意一个水果的容器或者其他,咱这里就用盘子,左右手中任意一个水果放入盘子,就会空出一只手,这时进行交换。

package com.test;

import java.util.Scanner;

public class Test_Change {
	public static void main(String[] args) {
		System.out.println("请输入整数a:");
		int a = new Scanner(System.in).nextInt();
		System.out.println("请输入整数b:");
		int b = new Scanner(System.in).nextInt();
		//开始交换
		//1.将a的值传给t
		int t = a;
		//2.b的值传给空的a
		a = b;
		//3.t的值传给空的b
		b = t;
		System.out.println(a);
		System.out.println(b);
	}
}

3.3运算规则

3.3.1计算结果的数据类型,与最大类型一致

	3/2的结果是1,因为3和2都是int类型,所以结果也为int类型。
	3d/2的结果是1.5,因为int占4字节,而double占8字节,故结果为double类型。

3.3.2byte,short,char三种比int小的整数,运算时会自动转换成int类型

	byte a = 2;
	byte b = 3;	
	int c = a+b;

3.3.3整数运算溢出

	整数运算,类似于一个圆,转到尾部时会转回到头部`

3.3.4浮点数的特殊值

	Infinity 无穷大
	System.out.println(3.14/0);
	NAN  not a number  
	System.out.println(Math.sqrt(-1));

4.基本类型的转换

4.1小类型转大类型

在这里插入图片描述

4.2大类型转小类型

	都需要强制类型转换
	int x = 2;
	byte y = (int) x;

4.3浮点数转成整数,小数直接舍弃

	不管是0.1还是0.9,都直接舍弃。

5.运算符

5.1概述

在这里插入图片描述

5.2练习

5.2.1平年闰年

	输入年号,判断是否是闰年。两个条件:
	1、能被4整除,并且不能被100整除
	2、或者能被400整除
package com.test;

import java.util.Scanner;

public class Test_Common_And_Leap_Year {
	public static void main(String[] args) {
		System.out.println("请输入年号:");
		int y = new Scanner(System.in).nextInt();
		String str = "平年";
		if(y%4==0&&y%100!=0||y%400==0) {
			str="闰年";
		}else {
			str="平年";
		}
		System.out.println(y+"年是"+str);
	}
}

5.2.2自增自减

	int a = 5;
	System.out.println(a++);//结果为5
	System.out.println(++a);//结果为6
	a++是在执行程序之后a的值进行自加1
	++a是先a的值先自加1,再执行程序。

5.2.3三个数的最大值

	a>b?a:b
	三元运算符也称三目运算符,如果a>b为真,则为a,否则为b
package com.test;

import java.util.Scanner;

public class Test_Max_Of_Number {
	public static void main(String[] args) {
		System.out.println("请输入第一个数");
		int a = new Scanner(System.in).nextInt();
		System.out.println("请输入第二个数");
		int b = new Scanner(System.in).nextInt();
		System.out.println("请输入第三个数");
		int c = new Scanner(System.in).nextInt();
		int max = a>b ? a : b;
		max = max>c ? max : c;
		System.out.println(max);
	}
}

6.流程控制

6.1 If

	全场购,满500打9折。满1000打8折。满2000打7折。满5000打5折。
package com.test;

import java.util.Scanner;

public class Test_If {
	public static void main(String[] args) {
		System.out.println("请输入所购物货款:");
		int m = new Scanner(System.in).nextInt();
		if(m<0) {
			System.out.println("您输入的货款格式不正确");
		}else if(m>=5000) {
			System.out.println("您需要支付"+m*0.5+"元");
		}else if(m>=2000) {
			System.out.println("您需要支付"+m*0.7+"元");
		}else if(m>1000) {
			System.out.println("您需要支付"+m*0.8+"元");
		}else if(m>=500) {
			System.out.println("您需要支付"+m*0.9+"元");
		}else {
			System.out.println("您需要支付"+m+"元");
		}
	}
}
	BMI 指数
	公斤     米
	体重 / (身高平方)
	过轻:低于 18.5
	正常:18.5到22.9
	偏胖:23到24.9
	肥胖:25到29.9
	重度肥胖:>=30
	极度肥胖:高于40
	bmi = 体重 / (体重*身高);
package com.test;

import java.util.Scanner;

public class Test_BMI {
	public static void main(String[] args) {
		System.out.print("请输入体重:");
		//获得输入的值,再保存到变量 
		//局部变量,作用域在他定义的代码块内有效
		double w = new Scanner(System.in).nextDouble();
		System.out.print("请输入身高:");
		double h = new Scanner(System.in).nextDouble();
		//调用 f() 方法,根据 w 和 h 的值,求出 bmi 指数
		f(w, h);
	}//main结束
	static void f(double weight, double height) {
		double bmi = weight / (height*height);
		String r = ""; //用来保存最终结果的变量
		//根据 bmi 指数范围,来给r重新赋值
		if(bmi < 18.5) {
			r = "过轻";
		} else if(bmi <= 22.9) {
			r = "正常";
		} else if(bmi <= 24.9) {
			r = "偏胖";
		} else if(bmi <= 29.9) {
			r = "肥胖";
		} else if(bmi <= 40) {
			r = "重度肥胖";
		} else {
			r = "极度肥胖";
		}
		System.out.println("BMI指数:"+bmi);
		System.out.println("您的体重属于:"+r);
	}
}

6.2 Switch

	手机选号:尾数8,50,尾数4,免费,其他,20。
package com.test;

import java.util.Scanner;

public class Test_Select {
	public static void main(String[] args) {
		System.out.println("请输入手机号码:");
		String s = new Scanner(System.in).nextLine();
		//调用方法,将s传给f()方法,计算价格
		f(s);
	}
	//执行手机选号
	private static void f(String s) {
		if(s.length()!=11) {
			System.out.println("您输入的号码格式不正确!");
			return;//结束方法,返回到调用位置再继续执行
		}
		//取第11位的数字
		int c = s.charAt(10);
		int price = 0;
		switch(c) {
		case 4:price=0;
		case 8:price=50;
		default:price=20;
		}
		System.out.println("价格:"+price);
	}
}

6.3 For

6.3.1鸡兔同笼

	鸡兔共35只,共94只脚,鸡和兔各几只?
package com.test;

public class Test_For {
	public static void main(String[] args) {
		//j表示鸡的个数,t表示兔的个数
		for(int j=0,t=35;t<35;j++,t--) {
			if(j*2+t*4==94) {
				System.out.println("鸡:"+j+"只,"+"兔:"+t);
			}
		}
	}
}

6.3.2求阶乘

package com.test;

import java.util.Scanner;

public class Test_Mul {
	public static void main(String[] args) {
		System.out.println("输入整数,求阶乘:");
		int n = new Scanner(System.in).nextInt();
		f(n);
	}
	//求阶乘
	private static void f(int n) {
		if(n<0) {
			System.out.println("无");
			return;//方法结束,返回调用位置
		}
		if(n==0) {
			System.out.println("0的阶乘为:1");
		}
		long r = n;
		for(int i=n-1;i>=1;i--) {
			r *= i;
		}
		System.out.println(n+"的阶乘为:"+r);
	}
}

7.循环嵌套

7.1 99乘法表

package com.test;

public class Test_99Mul {
	public static void main(String[] args) {
		//i表示行,j表示列
		for(int i=1;i<=9;i++) {
			for(int j=1;j<=i;j++) {
				//"\t"表示水平制表符
				System.out.print(j+"*"+i+"="+(i*j)+"\t");
				if(j==i) {
					System.out.println();
				}
			}
		}
	}
}

7.2 Break和Continue

	Break:中断、跳出Switch和循环。
	Continue:继续进入循环下一轮执行。
package com.test;

public class Test_Break_Continue {
	public static void main(String[] args) {
		f1();
		f2();
	}
	private static void f1() {
		//i用来计数
		for(int i=1;;i++) {
			//随机浮点数
			double d = Math.random();
			if(d>0.999) {
				System.out.println("第"+i+"次:"+d);
				break;//满足条件直接结束方法
			}
		}
	}
	//打印1到100,跳过尾数3,5,7
	private static void f2() {
		//从1到100进行遍历
		for(int i = 1; i<=100;i++) {
			//求尾数(取模)
			int y = i%10;
			if(y==3 || y==5 || y==7) {
				continue;
			}	
			System.out.print(i+",");		
		}
	}
}

8.数组

8.1概述

package com.test;

import java.util.Arrays;

public class Test_Array {
	public static void main(String[] args) {
		f1();
		f2();
		f3();
	}
	private static void f1() {
		//新建3个长度的String[]数组,再把数组地址存到变量a
		String[] a = new String[3];
		System.out.println(a);
		//将数组中的值连接成字符串
		System.out.println(Arrays.toString(a));
		a[0]="aaa";
		System.out.println(Arrays.toString(a));
		a[1]="bbb";
		System.out.println(Arrays.toString(a));
		a[2]="ccc";
		System.out.println(Arrays.toString(a));
	}
	private static void f2() {
		//创建int[]数组
		//方式1
		int[] a = {2,3,5,6,9,7,8,1};
		//输出地址
		System.out.println(a);
		//输出数组的值
		System.out.println(Arrays.toString(a));
		//方式2
		a = new int[] {6,2,3};
		//输出地址
		System.out.println(a);
		//输出数组的值
		System.out.println(Arrays.toString(a));
		//输出数组中第二个数
		System.out.println(a[1]);
	}
	private static void f3() {
		//创建int[]数组
		int[] a = {1,2,4,5,7};
		//将数组下标为1和3位置交换
		int t = a[1];
		a[1] = a[3];
		a[3] = t;
		System.out.println(Arrays.toString(a));
	}
}

9.循环命名

	内层循环中,控制外层循环 break 或 continue
	需要对外层循环命名

9.1判断质数

	质数又称素数,一个大于1的自然数,除1和自身之外不能再有别的因数
package com.test;

import java.util.Scanner;

public class Test_Prime_Nmuber {
	public static void main(String[] args) {
		System.out.println("请输入整数:");
		int a = new Scanner(System.in).nextInt();
		f(a);
		f1(a);
	}
	//判断输入的数是否为质数
	private static void f(int a) {
		//除1和自身外不能再有别的因数
		if(a<0) {
			System.out.println("不是质数");
		}
		//最小的质数为2
		if(a == 2) {
			System.out.println(a+"是质数");
		}
		if(a>2) {
			//若a为正整数,在a方到a+1之间至少有一个质数
			//故在判断时,对a进行开方加1
			double n = 1+Math.sqrt(a);
			for(int i = 2;i<n;i++) {
				//能找到整除的数,不是质数
				if(a%i==0) {
					System.out.println(a+"不是质数");
					return;//结束方法
				}
			}
			//找不到,是质数
			System.out.println(a+"是质数");
		}
	}
	//计算输入的整数内有多少质数
	private static void f1(int a) {
		if(a<2) {
			System.out.println("没有质数");
		}
		if(a==2) {
			System.out.println("有1个质数");
		}
		int count = 1;//有1个质数为2
		outer://for进行命名
		//从3到a遍历
		for(int i = 3;i<a;i++) {
			//i判断是否为质数
			double n = 1+Math.sqrt(i);
			for(int j = 2;j<n;j++) {
				if(i%j==0) {
					continue outer;
				}
			}
		//i是质数,count自加1
		count++;
		}
		System.out.println(a+"内有"+count+"个质数");
	}
}

10.While && do Whole

	While:先判断在执行
	do While:先执行再判断,至少执行一次
package com.test;

public class Test_While_DoWhole {
	public static void main(String[] args) {
		f1();
		f2();
	}
	//While
	private static void f1() {
		int i = 0;//i用来计数
		double d = 0;//用来保存结果
		//当d不是需要的之,继续传声新的值
		while(d>0.999) {
			//随机浮点数
			d = Math.random();
			i++;
		}
		System.out.println("第"+i+"次:"+d);
	}
	//do While
	private static void f2() {
		int i = 0;//i用来计数
		double d = 0;//用来保存结果
		//当d不是需要的之,继续传声新的值
		do {
			//随机浮点数
			d = Math.random();
			i++;
		}while(d>0.999);
		System.out.println("第"+i+"次:"+d);
	}
}

11.For和While

	for和while可以互相替代
	固定的循环次数,数据规律变化,用for

11.1猜数字

package com.test;

import java.util.Random;
import java.util.Scanner;

/**
 * 猜数字
 */
public class Guess_Nmuber {
	public static void main(String[] args) {
		while(true) {
			System.out.println("请输入猜的数字为:");
			int a = new Scanner(System.in).nextInt();
			//随机产生1000以内的整数
			int b = new Random().nextInt(1000);	
			if(a>b) {
				System.out.println("猜大了");
			}else if(a<b){
				System.out.println("猜小了");
			}else if(a==b) {
				System.out.println("猜对了");
				break;//猜对了就结束while循环
			}
		}
	}
}

11.2 猜字母

charAt()方法:
	该方法是JavaScript中的一个方法,可返回指定位置的字符。
语法:
	stringObject.charAt(index)
注意:
	字符串中第一个字符的下标是 0。如果参数 index 不在 0 与 string.length 之间,该方法将返回一个空字符串。
setCharAt()方法:
	该方法是StringBuffer中的方法,主要作用是将字符串中指定的位置的字符替换成目标字符,setCharAt(int index,char ch)index就是取代的位置 索引从0开始,ch是你要替换为的字符串。
StringBuilder:
	这里用到了StringBuilder,StringBuilder和StringBuffer一样,
都是继承了抽象类AbstractStringBulider类,是一个可变的字符序列。
两者非常相似,甚至有相互兼容的API,不过,StringBuilder线程不安全,
单线程推荐使用,速度比StringBuffer快。StringBuffer虽然线程安全,但是速度较慢。
package com.test;

import java.util.Random;
import java.util.Scanner;

public class Guess_String {
	public static void main(String[] args) {
		//调用随机方法将其存放在c
		StringBuilder c = random();
		while(true) {
			System.out.println("请输入5个字母:");
			String n = new Scanner(System.in).nextLine();
			if(n.length()!=5) {
				System.out.println("你输入的字母个数不对,请重新输入");
				continue;
			}
			//a表示猜的值和位置都正确的字母个数
			int a=0;
			//b表示猜的值正确,位置不正确的字母个数
			int b=0;
			for(int i=0;i<5;i++) {
				for(int j=0;j<5;j++) {
					if(n.charAt(i)==c.charAt(j)) {//先比对值再比对位置
						if(i==j) {
							a++;
						}else {
							b++;
						}
						break;
					}
				}				
			}
			String d = a+"T"+b+"F";
			System.out.println(d);
			if(d.equals("5T0F")) {
				System.out.println("恭喜您猜对了");
			}
		}
	}
	//随机方法产生5个随机字母
	private static StringBuilder random() {
		//将26个字母存到s
		StringBuilder s= new StringBuilder("abcdefghijklmnopqrstuvwxyz");
		for(int i=0;i<5;i++) {
			//在剩余的字母中随机下标+i的字母放在j下标位置
			int j = i+new Random().nextInt(26-i);
			//取s中i下标的字母存为t
			char t = s.charAt(i);
			//修改i下表的字母为j下标的字母
			s.setCharAt(i, s.charAt(j));
			//修改j下标的字母为t(i下标的字母)
			s.setCharAt(j, t);
		}
		//取下标为0到4的5个字母
		StringBuilder c = s.delete(5, 26);
		System.out.println(c);
		return c;
	}
}

求最大公倍数和最小公约数

	最大公约数:i能把a和b同时整除
	最小公倍数:i能同时被a和b整除
package com.test;

import java.util.ArrayList;
import java.util.Scanner;

public class Test_Z_Z {
	public static void main(String[] args) {
		System.out.println("请输入a:");
		int a = new Scanner(System.in).nextInt();
		System.out.println("请输入b:");
		int b = new Scanner(System.in).nextInt();
		int d = zdgys(a,b);
		System.out.println(d+"是最大公约数");
		long x = zxgbs(a,b);
		System.out.println(x+"是最小公倍数");
	}
	//最大公约数:
	//i能把a和b同时整除
	private static int zdgys(int a, int b) {
		int min = a<b?a:b;
		for(int i=min;i>=1;i--) {
			if(a%i==0&&b%i==0) {
				return i;
			}
		}
		return 0;
	}
	//最小公倍数:
	//i能同时被a和b整除
	private static long zxgbs(int a, int b) {
		int max = a>b?a:b;
		for(int i=max;;i+=max) {
			if(i%a==0&&i%b==0) {
				return i;
			}
		}
	}
}

百元买百鸡

package com.test;

/**
 *	 百元买百鸡
 *	 公鸡5元1只
 *	母鸡3元1只
 *	小鸡1元3只
 * @author Administrator
 *
 */
public class Test_Buy {
	public static void main(String[] args) {
		/**
		 * a:公鸡
		 * b:母鸡
		 * c:小鸡
		 * m:钱数
		 * n:只数
		 */
		for(int a=0;a<=20;a++) {
			for(int b=0;b<=33;b++) {
				for(int c=0;c<=300;c++) {
					int n=a+b+c;
					int m=5*a+3*b+c/3;
					if(n==100&&m==100) {
						System.out.println("公鸡:"+a+"只, 母鸡:"+b+"只, 小鸡:"+c+"只");
					}
				}
			}
		}
	}
}

递归求斐波那契数

package com.test;

import java.util.Scanner;

public class Test_Recursion {
	public static void main(String[] args) {
		System.out.println("请输入需要求第几个斐波那契数");
		int n = new Scanner(System.in).nextInt();
		long f = f(n);
		System.out.println(f);
		g(n);
	}
	//求第n个斐波那契数
	private static long f(int n) {
		long a = 1;
		long b = 1;
		for(int i=3;i<=n;i++) {
			b=a+b;
			a=b-a;
		}
		return b;
	}
	//递归求斐波那契数
	//效率贼低
	private static long g(int n){
		if(n==1||n==2) {
			return 1;
		}
		return g(n-1)+g(n-2);
	}
}

递归求汉诺塔

package com.test;

import java.util.Scanner;

public class Test_Hanol_Rescursion {
	public static void main(String[] args) {
		System.out.println("请输入玩几层汉诺塔:");
		int n = new Scanner(System.in).nextInt();
		f(n,"A","B","C");
	}

	private static void f(int n, String z1, String z2, String z3) {
		//最简问题
		if(n==1) {
			System.out.println(z1+"--->"+z3);
			return;
		}
		f(n-1,z1,z3,z2);
		//最底层直接从z1到z3
		System.out.println(z1+"--->"+z3);
		//z2经z1到z3
		f(n-1,z2,z1,z3);
	}
}

  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值