目录
一、Scanner类
Scanner类和Random类参考视频:https://live.csdn.net/v/282798https://live.csdn.net/v/282798
用户与控制台程序交互,就需要使用Scanner类。类和对象后面会详细讲解,暂时知道如何使用Scanner类即可。
Scanner类属于java.util包中,需提前导入该包才能使用。包的内容,后续也会详细讲解。
Scanner类使用步骤:
1. 使用import,导入java.util.Scanner包
2. 创建Scanner类的对象,Scanner scan = new Scanner(System.in);
3. Scanner对象调用如下方法,不同数据类型,使用不同的方法
scan.nextInt(); 用于接收键盘输入的整形数据
scan.next();用于接收键盘输入的字符串类型数据
scan.nextDouble();用于接收键盘输入的浮点型数据
scan.nextBoolean();用于接收键盘输入的布尔类型数据
案例一:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
//与用户交互,就是程序要接受用户使用键盘输入的值
//System.in表示标准的输入设备。默认的standard input device就是键盘。
//Scanner是一个类,input是Scanner类的对象
Scanner input = new Scanner(System.in);
//nextInt(),next()方法来说,程序运行到这种方法时
//会停止运行(阻塞状态),等待用户从console输入值,用户输入值后,
//按enter键,input.nextInt(),input.next()可以获得用户输入的值
//会将输入的值赋值给option变量。然后程序继续执行。
// System.out.println("请输入一个数字:");
// int option = input.nextInt();
// System.out.println(option);
System.out.println("打印输出用户名字:");
String name = input.next();
System.out.println(name);
}
}
案例二:
import java.util.Scanner
public class Test{
public static void main(String[] args) {
//第一步创建键盘输入对象
Scanner input = new Scanner(System.in);
System.out.println("请输入年龄:");
/*
* 接受键盘输入的数据
* 整型:nextInt()
* 浮点型:nextDouble()
* 字符串:next()
*/
String age = input.nextInt();
//输出接收到的值
System.out.println("您输入的年龄"+age);
}
}
案例三:键盘输入两个数,在控制台打印两个数的和
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个数");
double number1 = input.nextDouble();
System.out.println("请输入第二个数");
double number2 = input.nextDouble();
System.out.println("两个数的和是"+(number1 + number2));
}
}
案例四:键盘输入两个男生身高和两个女生身高,在控制台打印男生平均身高比女生平均身高差
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入第一个男生身高");
double firstBoy = input.nextDouble();
System.out.println("请输入第二个男生身高");
double secondBoy = input.nextDouble();
System.out.println("请输入第一个女生身高");
double firstGirl = input.nextDouble();
System.out.println("请输入第二个女生身高");
double secondGirl = input.nextDouble();
double avgBoy = (firstBoy+secondBoy)/2;
double avgGirl = (firstGirl+secondGirl)/2;
System.out.println(avgBoy-avgGirl);
}
}
案例五:超市搞活动,输入四位会员卡号;如果四位会员卡号的和大于20并且第三位数为6的会员,将其定义为幸运用户,奖励棒棒糖一个。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入四位会员卡号:");
int cardNum = input.nextInt();
//拆分卡号1234
int g = cardNum%10;
int s = cardNum/10%10;
int b = cardNum/100%10;
int q = cardNum/1000;
int sum = g+s+b+q;
System.out.println(sum>20&&s==6?"幸运用户,奖励泡泡堂一个":"很遗憾");
}
}
二、产生随机数
有两种方式可以产生指定范围内的随机数。一种是Random类;另一种是Math类。
1. Random类
Scanner类和Random类参考视频(通Scanner类):https://live.csdn.net/v/282798https://live.csdn.net/v/282798
Random类,位于java.util包中,使用前必须要引入。
Random类中nextInt(value)方法,可随机产生0 - value-1区间的值。
使用时,必须创建Random类对象,即Random rand = new Random(),使用rand.nextInt(value)产生随机数。
案例:
/*
* Random类就是用于产生随机数的。可以使用Random类的对象产生随机数。
*/
public class Test {
public static void main(String[] args) {
Random rand = new Random();
for(int i = 0; i < 10; i++){
// rand.nextInt(n)
// 表示可以产生随机的整数,范围在[0 ~ n-1]
System.out.println(rand.nextInt(100));
}
}
}
2. Math类
Math类中,包含很多日常和数学相关的有用方法,主要处理算术运算。
Math类中包含一个random()方法,用于产生大于等于0.0,小于1之间的随机数,随机数类型为double。
Math类中所有方法都是静态方法(先知道这个概念,以后会讲解),因此直接使用Math类调用方法即可。如Math.random()。
如果想产生[min_value, max_value)之间的随机数,可使用公式:Math.random()*(max-min)+min
案例一:
public class Test {
public static void main(String[] args) {
// 0到1之间的随机数
double num1 = Math.random();
System.out.println(num1);
// 0到10之间的随机整数,必须强制转换成int,会将小数截尾
int num2 = (int) (Math.random() * 10);
System.out.println(num2);
// 3到7之间的随机数
int num3 = (int) (Math.random() * 4 + 3);
System.out.println(num3);
// 随机产生一个[5,10)之间的随机整数
int num = (int) (Math.random() * 5 + 5);
System.out.println(num);
}
}
案例二:模拟彩票系统,输入一个[3,10)之间的数,如果和系统产生的随机数相同,中奖5000万,否则再来一张,至少回个本。
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个[3,10)之间的数");
int num = input.nextInt();
int number = (int) (Math.random() * 7 + 3);
System.out.println("随机数为" + number);
if (num == number) {
System.out.println("中奖5000万");
} else {
System.out.println("再来一张,至少回个本");
}
}
}
三、流程控制语句
流程控制语句,和我们的人生一样。从生到死,就是顺序执行;在人生中,面临各种各样的选择,平时吃什么,喝什么,择校,上大学,都需要我们选择;在人生阶段性时间内,大部分生活,学习,工作,都遵循循环模式。Java中流程控制语句包含顺序流程,选择流程,循环这几种。
1、顺序流程
顺序流程参考视频:https://live.csdn.net/v/282796https://live.csdn.net/v/282796
顺序流程,直白的说,就是程序一行行执行,直到结束。
2、选择流程
选择流程参考视频:https://live.csdn.net/v/282797https://live.csdn.net/v/282797
选择流程有如下三种场景。
2.1 if语句
语法格式:
if( 判断的条件) {
判断成立后应该执行的动作;
}
说明:
这里的判断条件最后必须是一个boolean值,如果判断条件是true,则执行if后面的{}中的内容;如果判断条件是false,则跳过大括号中的内容,向下继续执行其他内容。
如果if语句后只有一条语句,可将if后的大括号省略,执行结果不受影响,但是一般不省略。
案例一:
/*
* 小明考试,如果及格,就允许玩游戏
*/
public class Test {
public static void main(String[] args) {
int score = 61;
if(score>=60){
System.out.println("允许玩游戏");
}
System.out.println("if语句块外面代码");
}
}
案例二:
/*
* 小键盘输入一个数,如果大于50且个位为3,就输出幸运号码
*/
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数");
int num = input.nextInt();
int g = num%10;
if(num>50&&g==3){
System.out.println("幸运号码");
}
}
}
2.2 if...else...语句
语法格式:
if( 判断的条件 ){
判断条件成立后执行的语句;
}else {
判断不成立后执行的语句;
}
说明:
判断条件必须是一个boolean值,如果判断条件是true,则执行if后面的{}中的内容;如果判断条件是false,则执行else后面大括号中的内容。
如果if语句块,else语句块只有一行语句,可不写{},不建议这种方式。
案例一:比较两个数大小并输出
public class Test {
public static void main(String[] args) {
int x = 10;
int y = 5;
if(x > y){
System.out.println(x + ">" + y);
}else{
System.out.println(x + "<=" + y);
}
System.out.println("语句块下面的代码");
}
}
案例二:键盘输入一个数,判断该数是否为奇数
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数");
int num = input.nextInt();
if (num % 2 == 0) {
System.out.println("该数为偶数");
} else {
System.out.println("该数为奇数");
}
}
案例三:输入小明的数学以及语文成绩,如果其中一门成绩为100并且另一门成绩大于99, 就可以去旅游,否则继续学习。
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入语文成绩");
int chinese = input.nextInt();
System.out.println("请输入数学成绩");
int math = input.nextInt();
if (chinese == 100 && math >= 99 || chinese >= 99 && math == 100) {
System.out.println("旅游");
} else {
System.out.println("继续学习");
}
}
}
2.3 if...else if.....else语句
语法格式:
if( 判断的条件 ){
判断成立后执行的语句;
} else if( 判断的条件 ){
判断成立后执行的语句;
}
............
else{
上述的所有判断都不成立之后执行的语句;
}
说明:
当在程序中有多个条件的时候,每个if只能列出其中的一种可能条件,这时在else中就会隐含其他的所有条件,对剩余的条件,还要进行更加具体的细化,这时可以在else 后面继续使用if,区分出其他的各种情况。
对于该判断方式,要么遵循从小到大的顺序,要遵循从大到小的顺序。如果顺序改变,程序执行会出现错误,所以要特别注意。
执行过程如下图:
案例一:通过键盘输入学生的学号,根据学号打印输出名字。1,张三;2,李四;3,王五;其他,不存在。
import java.util.Scanner;
/*
* 通过键盘输入学生的学号,根据学号打印输出名字。
* 1,张三;2,李四;3,王五;其他,不存在。
*/
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入学生的学号,范围[1-4]:");
// 接收学生学号
int id = input.nextInt();
if (id == 1) {
System.out.println("张三");
} else if (id == 2) {
System.out.println("李四");
} else if (id == 3) {
System.out.println("王五");
} else if (id == 4) {
System.out.println("赵柳");
} else {
System.out.println("您输入的学号为" + id + "不存在");
}
}
}
案例二:获取键盘输入的分数,根据以下条件打印输出。
[90, 100],输出A;
[80, 90), 输出B;
[70, 79), 输出C;
[60, 69),输出D;
[0, 60),输出D。
public class Test {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
int score=scan.nextInt();
if(score>=90 && score<=100){
System.out.println("A");
}else if(score>=80 && score<=89){
System.out.println("B");
}else if(score>=70 && score<=79){
System.out.println("C");
}else if(score>=60 && score<=69){
System.out.println("D");
}else{
System.out.println("E");
}
}
}
2.4 if语句嵌套
语法格式:
以上三种if语句,根据业务逻辑需要,每个语句块中,仍可以使用if语句。其中一种定义格式如下:
if(boolean类型的表达式){
表达式为true执行的结果
If(){
表达式为true执行的结果
}else{
表达式为false执行的结果
}
}else{
表达式为false执行的结果
}
案例一:100米跑步比赛,如果成绩在12秒,进入决赛。输入性别,如果性别为男,进入男子组,否则进入女子组。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入时间:");
double time = input.nextDouble();
if (0 < time && time <= 10) {
System.out.println("恭喜你进入决赛");
System.out.println("请输入性别");
String sex = input.next();
System.out.println(sex);
if (sex.equals("男")) {
System.out.println("你进入男子组");
} else {
System.out.println("进入女子组");
}
} else {
System.out.println("你的职业生涯到此结束");
}
}
}
案例二:请输入高考分数,如果分数大于650,上一本。如果分数大于700, 上王牌专业,否则普通专业。如果分数大于550,上二本, 如果分数大于450,上三本,如果分数大于300,上大专,否则回家搬砖。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入分数:");
double score = input.nextDouble();
if(score>0 && score<=750){
if(score>=650 && score<=750){
if(score>700){
System.out.println("恭喜你考上一本,并且可以选择王牌专业");
}else{
System.out.println("哎呦,不错,可以上一个一本的普通转移");
}
}else if(score>550){
System.out.println("考上二本");
}else if(score>450){
System.out.println("考上三本");
}else if(score>300){
System.out.println("考上大专");
}else {
System.out.println("回家搬砖");
}
}else{
System.out.println("输入错误");
}
}
}
案例三:编写一个彩票系统添加一个登录界面
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("----------登录----------");
System.out.println("请输入用户名");
String name = input.next();
System.out.println("请输入密码");
String password = input.next();
System.out.println(name+password);
if(name.equals("岩石") && password.equals("123456")){
System.out.println("————————欢迎来到反赌彩票网——————");
System.out.println("请输入一个[3,10)之间的数");
int num = input.nextInt();
int number = (int) (Math.random()*7+3);
System.out.println("随机数为"+number);
if(num == number){
System.out.println("中奖5000万");
}else{
System.out.println("再来一张,至少回个本");
}
}else{
System.out.println("帐号密码不匹配");
}
}
}
3、分支流程
switch语句参考视频:https://live.csdn.net/v/282799https://live.csdn.net/v/282799
分支流程也是选择语句的一种,也称为switch语句。
语法格式:
switch( 表达式 ) {
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
case 常量3:
语句3;
break;
........
default :
语句;
[break;];//可有可无
}
说明:
1. 表达式类型只能是byte,short,char, int类型,JDK5.0后可用enum类型,JDK7.0后可用String类型。
2. case子句后面的常量值类型保持和表达式类型一致或兼容
3. case语句块中,根据实际情况,使用break。一般在每个case语句块中都会加上break。break语句用于跳出switch语句块。
4. default子句,当表达式与case后的常量不匹配的时候,会执行default子句。一般default子句位于最后。default子句后,break语句可有可无。
5. 多个case子句和default子句没有顺序限制。如果default子句不在最后,则必须加上break语句。一般不会这么写。
6. switch语句只能比较离散的数值。if(条件表达式)语句中,条件表达式可以表示一段范围。
案例一:
/*
* switch
* option及case之后的常量类型,必须为byte, short, char, int.JDK1.5之后
* 枚举类型,JDK1.7之后,String
*/
public class Test {
public static void main(String[] args) {
// long x = 10L;
// switch(x){
// case 10L:
// System.out.println("===");
// }
String value = "aaa";
switch(value){
case "aaa":
System.out.println("aaa");
break;
default:
System.out.println("default...");
}
int option = 1;
switch(option){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3:
System.out.println("3");
break;
case 4:
System.out.println("4");
break;
default:
System.out.println("default");
}
System.out.println("在switch语句块之外的代码");
}
}
案例二:根据指定月份,打印该月份所属的季节。
3,4,5为春季 6,7,8为夏季
9,10,11为秋季12,1,2为冬季
用switch-case完成需求。
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入月份");
int month = input.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("输入错误");
}
}
}
案例三:超市举行活动,满就送!要求用switch完成
购物满300,送330ml可乐一瓶
购物满500,送5斤大米
购物满1000,送鼠标一个
购物满1500,送机械键盘一个
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入购物金额");
double money = input.nextDouble();
int num = (int) (money / 100);
switch (num) {
case 0:
case 1:
case 2:
System.out.println("你太抠门了");
break;
case 3:
case 4:
System.out.println("送330ml可乐一瓶");
break;
case 5:
case 6:
case 7:
case 8:
case 9:
System.out.println("送5斤大米");
break;
case 10:
case 11:
case 12:
case 13:
case 14:
System.out.println("送鼠标一个");
break;
default:
System.out.println("送机械键盘一个");
break;
}
}
}