第一周易错、经典题目总结

第一周易错、经典题目总结

数据类型的转换

byte b1 = 1;//1为int类型的数字字面量,但是1在byte类型的取值范围里,所以可以直接赋值
byte b2 = 128;//报错原因:128为int类型的数字字面量,但是128不在byte类型的取值范围里,所以必须强转
//128 -- int -- 4字节 -- 32位
//0000,0000,0000,0000,0000,0000,1000,0000
//(byte)128 -- byte -- 1字节 -- 8位
//1000,0000
byte b2 = (byte)128;
System.out.println(b2);//-128

int i = 12345678901;//报错原因:12345678901为int类型的数字字面量,但是该数字超过了int类型的取值范围所以报错
long i = 12345678901L;//12345678901L为long类型的数字字面量,该数字没有超过了long类型的取值范围所以不报错	

i++、++i的区别

int a = 8;
int b = (a++)+(++a)+(a*10);// b = 8 + 10 + 10*10
System.out.println(b);//118
		
int i = 0;   
i = i++;  
System.out.println(i);//0

int num = 10;
num++;
System.out.println(num);//11
//注意两道题的区别

赋值运算符

short s = 1; 
s = s+1; //会报错,s+1的结果是int类型
short s = 1; 
s += 1;// s = (short)(s+1); -- 底层实现有个强转的过程
//注意:不同类型数据之间赋值会报错
//经验:凡是赋值运算,先看两侧数据类型是否相同、
//算数运算符,注意两数的数据类型和最终结果的数据类型
//注意:+=,-=,*=、/=、%= 内含强转

三目运算符

在控制台输入三个数字,由小到大输出(1<2<3Scanner scan = new Scanner(System.in);
		System.out.println("请输入第一个数字:");
		int a = scan.nextInt();
		System.out.println("请输入第二个数字:");
		int b = scan.nextInt();
		System.out.println("请输入第三个数字:");
		int c = scan.nextInt();
		//最大值
		int max = (a>b)?a:b;
		max = (max>c)?max:c;
		//最小值
		int min = (a<b)?a:b;
		min = (min<c)?min:c;
		//中间值
		int mid = a+b+c-max-min;
		//输出
		System.out.println(min + "<" + mid + "<" + max);
//此种题型注意中间值的算法

		int a = 5;
		System.out.println((a<5)?10.9:9);//9.0
				
		char x = 'x';//ASCII - 120
		int i=10;
		System.out.println(false?i:x);//120
						
		char x = 'x';//ASCII - 120
		System.out.println(false?100:x);//x
		System.out.println(false?65536:x);//120
/*
注意:
三目运算符的返回值规则:
值1和值2都是常量的情况:输出结果后,要将结果的数据类型转型成取值范围较大的那个数据的数据类型
值1和值2都是变量的情况:输出结果后,要将结果的数据类型转型成取值范围较大的那个数据的数据类型
值1和值2一个是常量一个是变量的情况:
如果值1在值2类型的取值范围内:就按照值2的类型进行返回数据
如果值1不在值2类型的取值范围内:就按照值1的类型进行返回数据	
*/

位运算符

byte b2 = -18;//1110,1110
System.out.println(b2>>3);//-3 - 1111,1101		

byte b2 = -18;//byte - 1110,1110
//int  - 1111,1111,1111,1111,1111,1111,1110,1110
//>>>3 - 0001,1111,1111,1111,1111,1111,1111,1101
System.out.println(b2>>>3);//536870909
			
System.out.println((int)(char)(byte)-1);//65535
//int -1:1111,1111,1111,1111,1111,1111,1111,1111
//(byte):1111,1111
//(char):1111,1111,1111,1111(考点:char没有负数,所以向上转型用0补位)
//(int) :0000,0000,0000,0000,1111,1111,1111,1111

if嵌套

//需求:百米赛跑,跑入15秒内的同学进入到总决赛,根据性别分别输出"恭喜进入到男子组决赛"或者是"恭喜进入到女子组决赛"
import java.util.Scanner;
public class Test{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);	
		System.out.println("请输入成绩:");
		double second = scan.nextDouble();
		if(second > 0 && second < 15){
			System.out.println("请输入性别:");
			String sex = scan.next();//输入字符串
			if(sex.equals("男")){//判断两个字符串是否相等
				System.out.println("恭喜进入到男子组决赛");
			}else if(sex.equals("女")){//判断两个字符串是否相等
				System.out.println("恭喜进入到女子组决赛");
			}else{//用户可能乱输入性别
				System.out.println("性别异常");
			}
		}else if(second >= 15){
			System.out.println("重在参与");
		}else{//用户可能输入负数
			System.out.println("成绩异常");
		}

for循环

//循环录入5次int类型的数字,输出最大值
import java.util.Scanner;
public class Test09{
	public static void main(String[] args){
			Scanner scan = new Scanner(System.in);	
			System.out.println("请输入第1个数字:");
			int max = scan.nextInt();//把第一个数字认为是最大值	
			for(int i = 2;i<=5;i++){
				System.out.println("请输入第" + i + "个数字:");
				int num = scan.nextInt();
				if(num > max){//说明用户输入的数字比max更大
					max = num;
				}
			}
			System.out.println("最大值为:" + max);
	}
}
//此类型题目,可把输入的第一个值当成最大值
//最值,总和,个数用for循环

打印图形

public class Test01{
	public static void main(String[] args){
				*		i=0
				**		i=1
				***		i=2
				****	i=3
				*****	i=4
				for(int i = 0;i<5;i++){
					for(int j = 0;j<=i;j++){
						System.out.print("*");
					}
					System.out.println();
				}
        
				*****
				****
				***
				**
				*
				for(int i = 0;i<5;i++){
					for(int j = 0;j<5-i;j++){
						System.out.print("*");
					}
					System.out.println();
				}        
        
				*****
				 ****
				  ***
				   **
				    *
				for(int i = 0;i<5;i++){
					for(int k = 0;k<i;k++){
						System.out.print(" ");
					}
					for(int j = 0;j<5-i;j++){
						System.out.print("*");
					}
					System.out.println();
				}
        
 				   *
				  **
			     ***
			    ****
			   *****
				for(int i = 0;i<5;i++){
					for(int k = 0;k<4-i;k++){
						System.out.print(" ");
					}
					for(int j = 0;j<i+1;j++){
						System.out.print("*");
					}
					System.out.println();
				}
        
				   *	  i=0   i*2+1
				  ***     i=1   i*2+1
				 *****    i=2   i*2+1
				*******   i=3   i*2+1
				for(int i = 0;i<4;i++){
					for(int k = 3;k>i;k--){
						System.out.print(" ");
					}
					for(int j = 0;j<i*2+1;j++){
						System.out.print("*");
					}
					System.out.println();
				}
        

				*******
				 *****
				  ***
				   *
				for(int i = 0;i<4;i++){
					for(int k = 0;k<i;k++){
						System.out.print(" ");
					}
					for(int j=0;j<7-2*i;j++){
						System.out.print("*");
					}
					System.out.println();
				}
        
 				   *
				  * *
				 *   *
				*******
			for(int i = 0;i<4;i++){
				for(int k = 3;k>i;k--){
					System.out.print(" ");
				}
				for(int j = 0;j<i*2+1;j++){
					//第一行、最后一行、每一行的第一列、每一行的最后一列
					if(i==0 || i==3 || j==0 || j==i*2){
						System.out.print("*");
					}else{
						System.out.print(" ");
					}
				}
				System.out.println();
			}
        

				*******
				 *   *
				  * *
				   *
			for(int i = 0;i<4;i++){
				for(int k = 0;k<i;k++){
					System.out.print(" ");
				}
				for(int j=0;j<7-2*i;j++){
					//第一行、最后一行、每一行的第一列、每一行的最后一列
					if(i==0 || i==3 || j==0 || j==7-2*i-1){
						System.out.print("*");
					}else{
						System.out.print(" ");
					}
				}
				System.out.println();
			}
        
打印空心菱形
		for(int i = 0;i < 5;i++){	//i表示空心菱形上半部分行数;类似于金字塔行数
			for(int j = 0;j < (5-1-i);j++){//j控制每行"*"前面的空格数
				System.out.print(" ");
			}
			for(int k = 0;k < (2*i+1);k++){	//k控制要打印的"*"的个数
				if(i == 0){//如果是第一行则将"*"全部打印
					System.out.print("*");
				}else if(k == 0||k == (2*i)){//如果要打印的"*"是第一个或最后一个则    								//打印出来
					System.out.print("*");
				}else{//如果要打印的"*"不是第一个或最后一个则打印空格
					System.out.print(" ");
				}
			}
			System.out.println();
		}//以上打印的是空心菱形的上半部分。
		for(int i = 0;i < 4;i++){	//空心菱形的下半部分的行数比上半部分少一行;比如上半部分是5行,下半部分为4行才能构成菱形
			for(int j = 0;j < (i+1);j++){//j控制每行"*"前面的空格数
				System.out.print(" ");
			}
			for(int k = 0;k < 2*(4-i)-1;k++){	//k控制要打印的"*"的个数
				if(i == 3){//如果是最后一行则将"*"全部打印
					System.out.print("*");
				}else if(k == 0||k == 2*(3-i)){//如果要打印的"*"是第一个或最后一个则打印出来
					System.out.print("*");
				}else{//如果要打印的"*"不是第一个或最后一个则打印空格
					System.out.print(" ");
				}
			}
			System.out.println();
		}
	}
}

九九乘法表

public class Test01{
	public static void main(String[] args){
//版本1
	for(int i = 1;i<=9;i++){
		for(int j = 1;j<=i;j++){
			System.out.print(j + "x" + i + "=" + (i*j) + "\t");
		}
		System.out.println();
	}
				
//版本2
	for(int i = 1;i<=9;i++){
		for(int k = 1;k<i;k++){
			System.out.print("\t");
		}
		for(int j = i;j<=9;j++){
			System.out.print(i + "*" + j + "=" + (i*j) + "\t");
		}
		System.out.println();
	}	

for循环和break

//循环录入同学5门课的成绩并计算平均分,如果某分数录入为负,停止录入并提示。
import java.util.Scanner;
public class Test04{
	public static void main(String[] args){				
		Scanner scan = new Scanner(System.in);
			boolean flag = true;//true-正常录入 false-非正常录入
			double sum = 0;
			for(int i = 1;i<=5;i++){
				System.out.println("请输入第" + i + "门成绩:");
				double score = scan.nextDouble();
				if(score < 0){//分数为负数,结束当前循环
					flag = false;
					break;
				}
				sum += score;
			}		
			if(flag){
				double avg = sum/5;
				System.out.println("平均分为:" + avg);
			}else{
				System.out.println("录入的分数为负数,停止录入");
			}  
//注意此种题型的做法			  

for循环和continue

//循环录入5名Java课的学生成绩,统计分数大于等于80分的学生比例。	
解决方案1import java.util.Scanner;
public class Test04{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		int num = 0;//记录大于等于80分学生的人数
		for(int i = 1;i<=5;i++){
			System.out.println("请输入第" + i + "名学生的成绩:");
			double score = scan.nextDouble();
			if(score >= 80){
				num++;
			}
		}
		System.out.println("大于等于80分学生的比例为:" + num/5.0*100 + "%");
        
解决方案2Scanner scan = new Scanner(System.in);
		int num = 0;//记录大于等于80分学生的人数
		for(int i = 1;i<=5;i++){
			System.out.println("请输入第" + i + "名学生的成绩:");
			double score = scan.nextDouble();
			if(score < 80){
				continue;
			}
			num++;
		}
		System.out.println("大于等于80分学生的比例为:" + num/5.0*100 + "%");
//注意运用continue的反向思维
//注意此题中num/5.0和num/5的区别

lable

public class Test06{
	public static void main(String[] args){
		/**
			知识点:lable
			
			含义:给循环做标记
			
			需求:
				嵌套循环,外层循环5次,内层循环4次
				当外层循环到第3次时,在内层循环中结束掉外层循环
		*/
		a:for(int i = 1;i<=5;i++){
			for(int j = 1;j<=4;j++){
				System.out.println(i + " -- " + j);
				if(i == 3){
					break a;
				}
			}
		}
	}

万年历

import java.util.Scanner;
public class Test07{
	
	public static void main(String[] args){
		/**
			需求:万年历
			
			输入一个年份,再输入一个月份,把那个月的日历打印出来
			(1900年1月1日是星期一)
		*/
		
		//输入年和月
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入年份:");//2021
		int year = scan.nextInt();
		System.out.println("请输入月份:");//12
		int month = scan.nextInt();
		
		//计算1900年到输入年的总天数
		int allDayOfYear = 0;
		for(int i = 1900;i<year;i++){
			if(i%4==0&&i%100!=0 || i%400==0){//闰年
				allDayOfYear += 366;
			}else{//平年
				allDayOfYear += 365;
			}
		}
		
		//计算1月到输入月的总天数
		int allDayOfMonth = 0;
		for(int i = 1;i<month;i++){
			switch(i){
				case 1:case 3:case 5:case 7:case 8:case 10:case 12:
					allDayOfMonth += 31;
				break;
				case 4:case 6:case 9:case 11:
					allDayOfMonth += 30;
				break;
				case 2:
					if(year%4==0&&year%100!=0 || year%400==0){//闰年
						allDayOfMonth += 29;
					}else{//平年
						allDayOfMonth += 28;
					}
				break;
			}
		}
		
		
		//计算总天数
		int allDay = allDayOfYear + allDayOfMonth + 1;
		
		//计算星期
		int week = allDay%7;
		if(week == 0){//说明输入月的第一天是星期天
			week = 7;
		}
		
		//获取当月的天数
		int day = 0;
		switch(month){
			case 1:case 3:case 5:case 7:case 8:case 10:case 12:
				day = 31;
			break;
			case 4:case 6:case 9:case 11:
				day = 30;
			break;
			case 2:
				if(year%4==0&&year%100!=0 || year%400==0){//闰年
					day = 29;
				}else{//平年
					day = 28;
				}
			break;
		}
		
		//打印日历
		
		//打印日历 -- 头部信息
		System.out.println("--- " + year + "年" + month + "月 ---");
		System.out.println("一\t二\t三\t四\t五\t六\t日");
		
		//打印日历 -- 空格
		int num = 0;
		for(int i = 1;i<week;i++){
			System.out.print("\t");
			num++;
		}
		
		//打印日历 -- 日期
		for(int i = 1;i<=day;i++){
			System.out.print(i + "\t");
			num++;
			if(num % 7 == 0){
				System.out.println();//换行
			}
		}
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值