每天一考

1.& 和 &&的异同

相同点1:& 与 && 的运算结果相同
相同点2:当符号左边是true时,二者都会执行符号右边的运算
不同点:当符号左边是false时,&继续执行符号右边的运算。&&就不再执行符号右边的运算。
开发中,推荐使用&&

3.定义三个int型变量并赋值,使用三元运算符或者if-else获取这三个数中的较大数的实现

int num1 = 10,num2 = 21,num3 = -21;
int max;
if(num1 >= num2 && num1 >= num3){
    max = num1;
}else if(num2 >= num1 && num2 >= num3){
    max = num2;
}else{
    max = num3;
}
System.out.println("三个数中的最大值为:" + max);

4.编写程序,声明2个double型变量并赋值。判断第一个数大于10.0,且第二个数小于20.0,打印两数之和。否则,打印两数之

double d1 = 12.3;
double d2 = 32.1;
if(d1 > 10.0 && d2 < 20.0){
    System.out.println("两数之和为:" + (d1 + d2));
}else{
    System.out.println("两数之差为:" + (d1 - d2));
}

5.交换两个变量值的代码的实现

String s1 = "北京";
String s2 = "南京";

String temp = s1;
s1 = s2;
s2 = temp;
Scanner类

如何从键盘获取不同类型的变量:需要使用Scanner类

具体实现步骤:
1.导包:import java.util.Scanner;
2.Scanner的实例化
3.调用Scanner类的相关方法,来获取指定类型的变量

注意:
需要根据相应的方法,来输入指定类型的值。如果输入的数据类型与要求的数据类型不匹配时,会报异常:InputMisMatchException

对于char型的获取,Scanner没有提供相关的方法。只能获取一个字符串
System.out.println("请输入你的性别:(男/女)");
String gender = scan.next();
char genderChar = gender.charAt(0);//获取索引为0位置上的字符
System.out.println(genderChar);

练习

1

岳小鹏参加Java考试,他和父亲岳不群达成承诺:
如果:
成绩为100分时,奖励一辆BMW;
成绩为(80,99]时,奖励一台iphone xs max;
当成绩为[60,80]时,奖励一个 iPad;
其它时,什么奖励也没有。
请从键盘输入岳小鹏的期末成绩,并加以判断

说明:
1.else结构是可选的。
2.针对于条件表达式:
如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句在上面还是下面,无所谓。
如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。
如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会

import java.util.Scanner;
class IfTest{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		
		System.out.println("请输入岳小鹏的期末成绩:(0-100)");
		double score = scan.nextDouble();
		
		if(score == 100){
			System.out.println("奖励一辆BMW");
		}else if(score > 80 && score <= 99){
			System.out.println("奖励一台iphone xs max");
		}else if(score >= 60 && score <= 80){
			System.out.println("奖励一个 iPad");
		}else{
			System.out.println("什么奖励也没有");
		}
	}
}

2

编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,
对它们进行排序(使用 if-else if-else),并且从小到大输出。

说明:
if-else结构可以嵌套使用
2.如果if-else中的执行语句只有一句时“{}”可以省略,但是,不建议省略。

import java.util.Scanner;
class IfTest1{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		/*System.out.println("请输入三个整数");
		int num1 = scan.nextInt();
		int num2 = scan.nextInt();
		int num3 = scan.nextInt();
		if(num1 >= num2 && num1 >= num3 && num2 >= num3){
			System.out.println("从小到大为:" + num3 + " " + num2 + " "+ num1);
		}else if(num1 >= num2 && num1 >= num3 && num3 >= num2){
			System.out.println("从小到大为:" + num2 + " " + num3 + " " + num1);
		}else if(num2 >= num1 && num2 >= num3 && num1 >= num3){
			System.out.println("从小到大为:" + num3 + " " + num1 + " " + num2);
		}else if(num2 >= num1 && num2 >= num3 && num3 >= num1){
			System.out.println("从小到大为:" + num1 + " " + num3 + " " + num2);
		}else if(num3 >= num1 && num3 >= num2 && num1 >= num2){
			System.out.println("从小到大为:" + num2 + " " + num1 + " " + num3);
		}else if(num3 >= num1 && num3 >= num2 && num2 >= num1){
			System.out.println("从小到大为:" + num1 + " " + num2 + " " + num3);
		*///复杂(个人写的)	
		
			System.out.println("请输入第一个整数");
			int num1 = scan.nextInt();
			System.out.println("请输入第二个整数");
			int num2 = scan.nextInt();
			System.out.println("请输入第三个整数");
			int num3 = scan.nextInt();
			
			if(num1 >= num2){
				if(num3 >= num1){
					System.out.println("从小到大为:" + num2 + " " + num1 + " "+ num3);
				}else if(num3 <= num2){
					System.out.println("从小到大为:" + num3 + " " + num2 + " "+ num1);
				}else{
					System.out.println("从小到大为:" + num2 + " " + num3+ " "+ num1);
				}
			}else{
				if(num3 >= num2){
					System.out.println("从小到大为:" + num1 + " " + num2 + " "+ num3);
				}else if(num3 <= num1){
					System.out.println("从小到大为:" + num3 + " " + num1 + " "+ num2);
				}else{
					System.out.println("从小到大为:" + num1 + " " + num3+ " "+ num2);
				}
			}
		
		}
	}

3

import java.util.Scanner;
class IfExer{
	public static void main(String[] args){
		int x = 4;
		int y = 1;
		if (x > 2) {
			if (y > 2) 
				System.out.println(x + y);
				//System.out.println("atguigu");
			} else//就近原则
				System.out.println("x is " + x);
				
				
				
		//课后练习3:
		/*
		我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每
		一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗
		相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁.
		*/
		int dogAge = 5;
		if(dogAge > 2){
			//double peopleAge = 2 * 10.5 + (dogAge - 2) * 4;
			System.out.println("相当于人类的" + (2 * 10.5 + (dogAge - 2) * 4) + "岁");
		}else if(dogAge >= 0 && dogAge <=2){
			double peopleAge = dogAge * 10.5;
			System.out.println("相当于人类的" + peopleAge + "岁");
		}else{
		System.out.println("狗还未出生");
		}
		
		//课后练习4:如果获取一个随机数:10 - 99
		int value1 = (int)(Math.random() * 90 + 10);//[0.0,1.0) --> [0.0,90.0) --> [10.0,100.0) --> [10,99]
		System.out.println(value1);
		//公式:[a,b] : (int)(Math.random() * (b - a + 1) + a
		
		//彩票问题
		int value = (int)(Math.random() * 90)+ 10;
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入一个两位整数:");
		int number = scan.nextInt();
		
		int valueShi = value / 10;
		int valueGe = value % 10;
		int numberShi = number / 10;
		int numberGe = number % 10;
		
		if(number == value){
			System.out.println("奖金10 000美元");
		}else if(numberGe == valueShi && numberShi == valueGe){
			System.out.println("奖金 3 000美元");
		}else if(numberShi == valueShi || numberGe == valueGe){
			System.out.println("奖金 1 000美元");
		}else if(numberShi == valueGe || numberGe == valueShi){
			System.out.println("奖金 500美元");
		}else{
			System.out.println("彩票作废");
		}
		System.out.println("中将号码为:" + value);
	}   
}

4.next()和nextLine()的区别

nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。

next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。

(简单点说,next我只要字,nextLine我啥都要)

Day05_数据类型
(输入时,两个单词前后各有4个空格)

next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。

nextLine()方法的结束符只是Enter键

交换上述两个字符串的next和nextLine

运行结果图

Day05_数据类型_02

(输入时,两个单词前后各有4个空格)

nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。

经过验证,其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。

Day05_有效字符_03

解决的办法是:

在每一个 next()、nextDouble() 、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。(顽皮点说,因为nextLine啥都要,所以有时候要错了空格,等不到所需输入)

Day05_数据类型_02

(输入时,两个单词前后各有4个空格)

nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。

经过验证,其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。

Day05_有效字符_03

解决的办法是:

在每一个 next()、nextDouble() 、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。(顽皮点说,因为nextLine啥都要,所以有时候要错了空格,等不到所需输入)

运行结果图

Day05_字符串_06
(输入时,两个单词前后各有4个空格)

5

大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出
一定的条件:高:180cm以上;富:财富1千万以上;帅:是。
如果这三个条件同时满足,则:“我一定要嫁给他!!!”
如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”
如果三个条件都不满足,则:“不嫁!”

next()与nextLine()的区别
nextLine()方法返回的是Enter键之前的所有字符,它是可以得到带空格的字符串的。
next()会自动消去有效字符前的空格,只返回输入的字符,不能得到带空格的字符串。
(简单点说,next我只要字,nextLine我啥都要)

import java.util.Scanner;
class IfExer1{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入您的身高:(cm)");
		int height = scan.nextInt();
		System.out.println("请输入您的财富:(千万)");
		double wealth = scan.nextDouble();
		
		//方式一
		/*System.out.println("您帅吗?(true/false)");
		boolean isHandsome = scan.nextBoolean();
		if(height >= 180 && wealth >= 1 && isHandsome == true){
			System.out.println("我一定要嫁给他!!!");
		}else if(height >= 180 || wealth >= 1 || isHandsome == true){
			System.out.println("嫁吧,比上不足,比下有余。");
		}else{
			System.out.println("不嫁!");
		}
		*/
		//方式二
		System.out.println("您帅吗?(是/否)");
		String isHandsome = scan.next();
		if(height >= 180 && wealth >= 1 && isHandsome.equals("是")){
			System.out.println("我一定要嫁给他!!!");
		}else if(height >= 180 || wealth >= 1 || isHandsome.equals("是")){
			System.out.println("嫁吧,比上不足,比下有余。");
		}else{
			System.out.println("不嫁!");
		}
	}
}
switch-case

1.格式:
switch(表达式){
case 常量1:
语句1;
// break;
case 常量2:
语句2;
// break;
… …
case 常量N:
语句N;
// break;
default:
语句;
// break
}

  1. 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。
    当调用完执行语句以后,则仍然向下执行其他case结构中的执行语句,知道遇到break关键字或此switch-case结构末尾结束为止。

break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构

switch结构中的表达式,只能是如下6种数据类型之一:byte、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)

case之后只能声明常量。不能声明范围。

break关键字是可选的。

default:相当于if-else结构中的else
default结构是可选的。

1

对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。

说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。

import java.util.Scanner;
class SwitchCaseTest1{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入学生成绩");
		int score = scan.nextInt();
		switch(score / 10){
		case 0:
		case 1:
		case 2:
		case 3:
		case 4:
		case 5:
			System.out.println("不及格");
			break;
		case 6:
		case 7:
		case 8:
		case 9:
		case 10:
			System.out.println("及格");
			break;
		//更优的解决方案
		/*
		switch(score / 10){
		case 0:
			System.out.println("不及格");
			break;
		case 1:
			System.out.println("及格");
			break;	
		}
		*/
		}
	}
}

2

编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。

说明:break在switch-case中是可选的

import java.util.Scanner;
class SwitchCaseTest2{
	public static void main(String[] args){
		Scanner scan = new Scanner(System.in);
		System.out.println("请输入month");
		int month = scan.nextInt();
		System.out.println("请输入day");
		int day = scan.nextInt();
		//定义一个变量来保存总天数
		int sumDays = 0;
		
		
		
		//方式一:冗余
		/*
		if(month == 1){
			sumDays = day;
		}else if(month == 2){
			sumDays = 31 + day;
		}else if(month == 3){
			sumDays = 31 + 28 + day;
		}
		//...
		else{//month == 12;
			//sumDays = ...... + day;
		}
		*/
		
		//方式二:冗余
		/*switch(month){
		case 1:
			sumDays = day;
			break;
		case 2:
			sumDays = 31 + day;
		}...
		*/
		
		switch(month){
		case 12:
			sumDays += 30;
		case 11:
			sumDays += 31;
		case 10:
			sumDays += 30;
		case 9:
			sumDays += 31;
		case 8:
			sumDays += 31;
		case 7:
			sumDays += 30;
		case 6:
			sumDays += 31;
		case 5:
			sumDays += 30;
		case 4:
			sumDays += 31;
		case 3:
			sumDays += 28;
		case 2:
			sumDays += 31;
		case 1:
			sumDays += day;
		}
		System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");
	}
}