Day05
每天一考
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我啥都要)
(输入时,两个单词前后各有4个空格)
②
next()在输入有效字符之后,将其后输入的空格键、Tab键或Enter键等视为分隔符或结束符。
nextLine()方法的结束符只是Enter键
交换上述两个字符串的next和nextLine
运行结果图
(输入时,两个单词前后各有4个空格)
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。
经过验证,其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。
解决的办法是:
在每一个 next()、nextDouble() 、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。(顽皮点说,因为nextLine啥都要,所以有时候要错了空格,等不到所需输入)
(输入时,两个单词前后各有4个空格)
nextLine()自动读取了被next()去掉的Enter作为他的结束符,所以没办法从键盘输入值。
经过验证,其他的next的方法,如nextDouble() ,nextFloat() ,nextInt() 等与nextLine()连用时都存在这个问题。
解决的办法是:
在每一个 next()、nextDouble() 、nextFloat()、nextInt() 等语句之后加一个nextLine()语句,将被next()去掉的Enter结束符过滤掉。(顽皮点说,因为nextLine啥都要,所以有时候要错了空格,等不到所需输入)
运行结果图
(输入时,两个单词前后各有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
}
- 根据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 + "天");
}
}