十三.Java API文档
Java类的组织形式:
JDK——>包——>接口,类,异常,枚举——>字段,构造器(构造方法),成员方法(方法)
十四.运算符
算数运算符,赋值运算符,关系运算符(比较运算符),逻辑运算符,位运算符,三元运算符。
-
算数运算符
复合赋值运算符会进行类型转换
byte b = 3; b += 2;//等价b = (byte)(b + 2); b++;
-
三元表达式
int a = 10; int b = 99; int result = a < b ? a++ : b--; System.out.println(a); //11 System.out.println(b); //99 System.out.println(result); //10
int a = 3; int b = 4; int c = a > b ? (int)1.1 :(int)3.4; //只能进行强制转换 double d = a > b ? a : b + 3; //ok,满足int -> double int n1 = 55; int n2 = 33; int n3 = 44; int max1 = n1 > n2 ? n1 : n2; int max2 = n3 > max1 ? n3 : max1; System.out.println("三个数据=中的最大的数为:" +max2); int max3 = n3 > (n1 > n2 ? n1 : n2) ? n3 : (n1 > n2 ? n1 : n2); System.out.println("三个数据=中的最大的数为:" +max2);
运算符的优先级
https://img-blog.csdnimg.cn/3c34063d109548cfa9c53576e834a05b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQxMzA2ODQ5,size_16,color_FFFFFF,t_70
标识符的命名规则和规范:
- 由26个英文字母大小写,0~9,_或¥组成
- 数字不可以开头。int 3ab = 1; //错误
- 不可以使用关键字或保留字,但包含关键字和保留字
- java中严格区分大小写,长度无限制。
- 标识符不能包含空格 int a b = 90; //报错
- 包名:多单词组成时所有字母都小写:aaa.bbb.vvv
- 类名.接口名:多单词组成时,所有单词的首字母大写
- 变量名.方法名:多单词组成时,第一个单词首字母小写,第二个单词开始都是使用大写。
- 常量名:所有字母都大写:多单词时每个单词用下划线连接:XXX_YYY_ZZZ;
原码,反码,补码
- 计算机运算的的皇后,都是以补码的形式来运算
- 在看结果的时候,要看它的原码
- 二进制位是符号位,0表示正数,1表示负数
- 正数三码合一(原码,补码,反码)
- 负数的补码=反码+1,负数的反码=负数的补码-1
- 负数的反码=原码符号位不变,其他位取反
- 0的反码,补码都为0
- java没有无符号数,java 中的数都是有符号的
十五.流程控制语句
if-else语句
嵌套最好不要超过3层,不然代码的可读性比较差。
import java.util.Scanner;
public class demo11 {
public static void main(String[] args) {
Scanner myScanner = new Scanner(System.in);
System.out.println("请输入年龄");
int age = myScanner.nextInt();//键盘录入
if (age > 18) {
System.out.println("你的年龄大于18岁");
} else {
System.out.println("你的年龄小于等于18");
}
System.out.println("程序还在在继续执行");
}
}
//求两个数量的最大和
package mypackage1;
import java.util.Scanner;
public class demo11 {
public static void main(String[] args) {
Scanner S = new Scanner(System.in);
System.out.println("请输入两个double类型的变量:");
double s1 = S.nextDouble();
double s2 = S.nextDouble();
if (s1 > s2){
System.out.println("最大的数为:"+s1);
}
else {
System.out.println("最大的数为:"+s2);
}
}
}
//输入一个分数,如果分数为100的时候,输出极好
//分数为(80,99]时,输出优秀
//分数为(60,80]时,输出一般
//其他的情况均输出不及格
package mypackage1;
import java.util.Scanner;
public class demo11 {
public static void main(String[] args) {
Scanner sss = new Scanner(System.in);
System.out.println("请输入[0,100]的一个分数");
double s1 = sss.nextDouble();
if (s1 <= 100 || s1 >= 0) {
if (s1 == 100) {
System.out.println("极好");
} else if (s1 > 80 && s1 <= 99) {
System.out.println("优秀");
} else if (s1 > 60 && s1 <= 80) {
System.out.println("一般");
} else {
System.out.println("不及格");
}
} else {
System.out.println("输入的您输入的数值错误,请重新输入");
}
}
}
//参加歌手比赛,如果初赛成绩大于8.0则进入决赛
//否则提示淘汰,并且要根据性别提示进入男子组和女子组
//输入成绩和性别,进行判断和输出信息
package mypackage1;
import java.util.Scanner;
public class demo11 {
public static void main(String[] args) {
Scanner sss = new Scanner(System.in);
System.out.println("请输入歌手的成绩");
double score = sss.nextDouble();
if (score > 8.0) {
System.out.println("请输入性别:");
char sex = sss.next().charAt(0);//将字符串转换成字符
if (sex == '男') {
System.out.println("进入男子组");
} else if (sex == '女') {
System.out.println("进入女子组");
} else {
System.out.println("性别输入错误");
}
} else {
System.out.println("你被淘汰");
}
}
}
switch语句
default类型可以写,没有匹配case的时候,执行default,如果没有default子句,则没有任何匹配,不做任何输出。
如果没有写break的话,会直接从匹配的位置一直执行到程序的结尾(穿透)
switch(表达式)中表达式的返回值必须是:(byte,short,int,char,enum,String)
case中的值必须是常量,不能是变量。
//该程序可以接收一个字符,比如,a,b,c,d,e,f,a表示星期一,b表示星期二,以此类推。
package mypackage1;
import java.util.Scanner;
public class demo11 {
public static void main(String[] args) {
Scanner sss = new Scanner(System.in);
System.out.println("请输入一个小写字符");
char ccc = sss.next().charAt(0);
switch (ccc) {
case 'a':
System.out.println("星期一");
break;
case 'b':
System.out.println("星期二");
break;
case 'c':
System.out.println("星期三");
break;
case 'd':
System.out.println("星期四");
break;
case 'e':
System.out.println("星期五");
break;
case 'f':
System.out.println("星期六");
break;
case 'g':
System.out.println("星期日");
break;
default:
System.out.printf("输入的字符不正确");
//break;//这里break没有必要写,因为已经在最后了,无论写不写都会跳出
}
System.out.println("退出了switch,继续执行程序");
}
}
//输入一个成绩,输出是否合格
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入一个成绩");
double score = sc1.nextDouble();
if (score <=100 && score >=0){
switch ((int)(score/60)){
case 1:
System.out.println("合格");
break;
case 0:
System.out.println("不合格");
break;
}
}else{
System.out.println("您输入的成绩要在[0,100]");
}
//输入月份,输出是哪个季节
Scanner sc1 = new Scanner(System.in);
System.out.println("请输入一个月份");
int month = sc1.nextInt();
switch (month){
case 3:
case 4:
case 5:
System.out.println("这是春季");
break;
case 6:
case 7:
case 8:
System.out.println("这是夏季");
break;
case 9:
case 10:
case 11:
System.out.println("这是秋季");
break;
case 12:
case 1:
case 2:
System.out.println("这是冬季");
break;
default:
System.out.println("你输入的月份不对(1-12)");
}
switch和if的比较:
- 如果判断的具体的数值不多,而且符合byte,short,int,char,enum,String这6种类型,虽然两个语句都可以使用,但是使用switch语句更好。
- 其他情况:对区间判断,结果为boolean类型判断,使用if,if的使用返回更广。
for循环控制
- 循坏条件是返回一个布尔值的类型
int i = 1;
for (;i<=10;){
System.out.println(i);
i++;
}
for(;;){//无线循环
System.out.println("ok");
}
//打印1~100之间所有是9的倍数的整数,统计个数,以及总和
int k = 0;
System.out.println("所有9的倍数如下:");
for (int i =1;i <= 100;i++){
if (i%9==0){
System.out.println(i);
k++;
}
}
System.out.println("9的倍数的总数为:"+k);
while循环
//打印40~200之间的所有的偶数(while循环)
int i = 40;
System.out.println("40~100之间的所有偶数如下:");
while (i <= 100){
if(i%2==0){
System.out.println(i);
}
i++;
}
do…while循环
int i = 1;
int count = 0;
System.out.println("1--200之间所有能被5整除但是不能被3整除的个数为:");
do {
if (i % 5 == 0 && i % 3 != 0) {
count++;
}
i++;
} while (i <= 200);
System.out.println(count);
//如果李四不换还钱,则张三就会说不行,知道李四说还钱为止
Scanner lll = new Scanner(System.in);
char answer = ' ';
do {
System.out.println("是否还钱,y/n");
answer = lll.next().charAt(0);
System.out.println("他的回答是:"+answer);
}while (answer != 'y');
多重循环控制
for循环一般使用两层,最多都不要超过三层,不然代码的可读性很差。
//统计三个班的成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分(学生的成绩从键盘键入)
//统计三个班的及格人数,每个班有5名同学
Scanner lll = new Scanner(System.in);
double sum = 0;
int count = 0;
for (int i = 1; i <= 3; i++) {
System.out.println("开始输入第" + i + "个班级的成绩");
for (int j = 1; j <= 5; j++) {
System.out.println("请输入第" + j + "名同学的成绩");
double score = lll.nextDouble();
sum += score;
if (score >= 60) {
count++;
}
}
System.out.println("第" + i + "个班级的平均分为:" + sum / 5);
}
System.out.println("所有班级的平均分为:" + sum / 15);
System.out.println("所有班级成绩合格的人数为:" + count);
//金字塔层数的问题
Scanner lll = new Scanner(System.in);
System.out.println("请输入您要输入的金字塔的层数:");
int num = lll.nextInt();
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= num - i;j++ ){
System.out.print(" ");
}
for (int k =1; k <= 2*i - 1 ;k++){
System.out.print("*");
}
System.out.println();
}
//空心金字塔问题
canner lll = new Scanner(System.in);
System.out.println("请输入您要输入的金字塔的层数:");
int num = lll.nextInt();
for (int i = 1; i <= num; i++) {
for (int j = 1; j <= num - i; j++) {
System.out.print(" ");
}
for (int k = 1; k <= 2 * i - 1; k++) {
if (k == 1 || k == 2 * i - 1 || i == num) {
System.out.print("*");
}else {
System.out.print(" ");
}
}
System.out.println();
跳转控制语句
1.break语句,跳出循环
细节说明:
- 可以通过标签指明要种终止的哪块代码块。
- 在实际的开发过程中尽量不用使用标签(并且基本没人用)。
- 如果没有指定break,默认退出最近的循环体。
- break可以指定退出到哪一层。
2.contiune语句,跳出本次循环,继续执行之后的语句
3.return语句,如果return写在main方法中,则直接结束main方法。
//1~100以内的数求和,求出当第一次大于20的当前的数
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
if (sum > 20){
break;
}
}
System.out.println("第一次大于20的数为:"+sum);
}
//实现登录验证,有3次机会,如果用户名为”丁一“,密码为”666“提示登录成功,否则提示还有几次机会
Scanner lll = new Scanner(System.in);
String name = "";
String passwd = "";
for (int i = 1; i <= 3; i++) {
System.out.println("请输入用户名:");
name = lll.next();
System.out.println("请输入密码:");
passwd = lll.next();
if(passwd == "666"){
System.out.println("登录成功");
}else {
System.out.println("密码错误,您还有"+(3-i)+"次机会");
}
}
//某人有100000元,每经过一次路口,需要缴费,规则如下:
//当现金>50000时,每次缴5%
//当现金<=500000时,每次缴1000;
//计算该人可以经过多少次路口,要求:使用while完成
double money = 100000;
int count = 0;
while (money >= 0) {
if (money > 50000) {
money *= 0.95;
count++;
} else if (money <= 50000 && money > 1000){
money -= 1000;
count++;
}else {
//System.out.println("你是个穷B,没钱了");
break;
}
}
System.out.println("这个人可以经过"+count+"次路口");
//经典水仙花,这题都做烂了
Scanner lll = new Scanner(System.in);
System.out.println("请输入一个三位数");
int num = lll.nextInt();
int a = num % 100;
int b = num % 10 - a * 10;
int c = num - a * 100 - b * 10;
if (num >= 100 && num <= 999) {
if (a * a * a + b * b * b + c * c * c == num) {
System.out.println("满足水仙花");
}else {
System.out.println("不满足水仙花");
}
} else {
System.out.println("您输入的数不正确!");
}
//输出1-100之间的不能被5整除的数,每5个一行
int i = 0;
for (int j = 1; j <= 100; j++) {
if (j % 5 != 0){
System.out.print(j+" ");
i++;
if(i%5==0){
System.out.println("");
}
}
}
//输出小写的a-z以及大写的Z-A
System.out.println("小写字母为:");
for(char c1 = 'a';c1 <= 'z';c1++){
System.out.print(c1+" ");
}
System.out.println("");
System.out.println("小写字母为:");
for(char c2 = 'A';c2 <= 'Z';c2++){
System.out.print(c2+" ");
}
//求出1-1/2+1/3-1/4.....1/100的和
double num1 = 0;
double num2 = 0;
double num = 0;
for (int i = 1; i <= 100; i++) {
if (i % 2 == 0) {
num1 -= 1 / i;
}
if (i % 2 != 0) {
num2 += 1 / i;
}
}
num = num1 + num2;
System.out.println(num);
//求1+(1+2)+(1+2+3)+....+(1+2+...100)的结果
int sum = 0;
for (int i = 1; i <= 100; i++) {
for (int j = 1; j <= i; j++) {
sum += j;
}
}
System.out.println(sum);