Lecture:波哥
Java
是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java
虚拟机,Java
仍是企业和开发人员的首选开发平台。
之前我们书写的程序,数据都是固定不变得,也就是我们都是使用的常量,在实际的开发过程中,数据肯定是动态的而不是固定的,所以我们需要把固定的数据变更为键盘录入。通过Scanner模拟实际情况。
为了便于管理我们的Java文件,我们可以通过创建package的方式来处理,package其实就是文件夹
我们可以选择对应的package下创建 Java Class,也可以在创建JavaClass的同时去指定package
在IDEA中,主方法可以在创建类的时候在菜单中勾选,也可以在创建好的Java文件手动敲,也可以通过 main 关键字快速生成
/**
* 通用快捷键和设置
* psvm:快速创建main方法
* main:也可以快速创建main方法
* sout:可以快速的生成 输出语句
* "xxx".sout:可以快速生成输出语句和内容
* 变量.soutv:可以快速生成输出语句和变量=值的格式
*/
public class HelloWorld {
public static void main(String[] args) {
System.out.println("HelloWorld");
String name = "张三";
System.out.println("name = " + name);
}
}
在Java项目中,默认会引入java.lang.*下面的所有的类型,我们在使用lang包下的所有类型都不用导包,但是当我们要使用其他包下的类型的时候我们就需要通过import
关键字来实现包的引入,同意可以通过alt
+ /
方式快捷导入 也可以通过ctrl
+ 1(感叹号1)
package com.bobo.scanner;
import java.util.Scanner;
/**
* Scanner案例 键盘输入案例
* 在Java中会自动导入 java.lang.*
* @author dpb
*
*/
public class ScannerDemo {
public static void main(String[] args) {
// 1.获取一个Scanner 对象
Scanner input = new Scanner(System.in);
System.out.println("请输入姓名:");
String name = input.next(); // 阻塞 等待用户输入姓名
System.out.println("name = " + name);
System.out.println("请输入年龄:");
int age = input.nextInt();// 阻塞等待用户输入年龄
System.out.println("age = " + age);
}
}
如果接受的类型和实际键盘录入的类型不一致会出现如下的错误
Java中我们执行main方法中的代码的时候是有执行的先后顺序的,之前所写的代码都从上往下一行行执行了,没有遗落,除非报错,这种执行顺序我们叫顺序结构
,最简单的结构。
程序从上到下一行一行的执行代码,没有判断和中转,写在前面的代码先执行,写在后面的代码后执行
分支结构又称为选择结构,根据判断的结果判断某些条件,根据判断的结果来控制程序的流程,在这个结构中代码有可能执行一次,也有可能一次也不执行,在Java中分支结构的具体实现有if语句
和switch语句
if语句 switch语句
在满足循环条件的情况下,反复执行特定的代码,特定的代码有可能一次也不执行,也有可能执行了很多遍
for循环 while循环 do while 循环
为什么要用分支结构?
如果小明考试成绩大于90分,周末去海底世界游玩,这样的场景我们应该怎么来实现?
语法结构
if ( 关系表达式 ) { // 语句体 }
针对语法结构的说明:
执行的流程:
案例:
package com.bobo.ifdemo;
import java.util.Scanner;
public class IfDemo01 {
/**
* if语句
* 需求:如果小明考试成绩大于90分,周末去海底世界游玩,
* 这样的场景我们应该怎么来实现?
* @param args
*/
public static void main(String[] args) {
// 获取一个Scanner对象
Scanner in = new Scanner(System.in);
System.out.println("请输入小明的考试成绩: " );
int score = in.nextInt();
if (score > 90) {
System.out.println("周末去海底世界游玩....");
}
System.out.println("-------------------");
}
}
面试题:
int i = 99;
if ( i > 100); {
System.out.println("HelloWorld");
}
这段程序有没有问题?如果有问题什么原因?如果没有问题那么输出的结果是什么?
public static void main(String[] args) {
int i = 99;
if ( i > 100)
; // 这是一行代码
// 这是一个代码块
{
System.out.println("HelloWorld");
}
}
不会报错,输出的结果是 HelloWorld
课堂练习
张三Java成绩大于98分,而且音乐成绩大于80分,老师给他奖励,或者 Java成绩大于等于100分,音乐成绩大于70分,老师也可以给奖励
package com.bobo.ifdemo;
import java.util.Scanner;
public class ifdemo03 {
/**
* 张三Java成绩大于98分,而且音乐成绩大于80分,老师给他奖励,
* 或者 Java成绩大于等于100分,音乐成绩大于70分,老师也可以给奖励
* @param args
*/
public static void main(String[] args) {
// 获取 Scanner对象
Scanner in = new Scanner(System.in);
System.out.println("请输入张三的Java成绩:");
int javaScore = in.nextInt();
System.out.println("请输入张三的音乐成绩:");
int music = in.nextInt();
// 表达式可以很简单也可以很复杂,但是最终要求的结果的类型必须是boolean
// 复杂的表达式 最好通过() 括起来增强可读性
if( ( javaScore > 98 && music > 80 )
|| (javaScore >= 100 && music > 70)
) {
System.out.println("奖励一个苹果");
}
System.out.println("*************");
}
}
如果小明考试成绩大于90分,周末去海底世界游玩,否则在家打扫卫生。这样的场景我们应该怎么来实现?
if-else语句的语法格式:
if(条件表达式){ // 代码块1 }else{ // 代码块2 }
执行顺序:
案例:
package com.bobo.ifdemo;
import java.util.Scanner;
public class IfDemo04 {
/**
* 如果小明考试成绩大于90分,周末去海底世界游玩,否则在家打扫卫生。
* @param args
*/
public static void main(String[] args) {
// 获取一个Scanner对象 shift+Tab
Scanner in = new Scanner(System.in);
System.out.println("请输入小明的考试成绩: " );
int score = in.nextInt();
/*if (score > 90) {
System.out.println("周末去海底世界游玩..");
}
if (score <= 90) {
System.out.println("周末在家打扫卫生...");
}*/
if (score > 90) {
System.out.println("周末去海底世界游玩..");
}else{
System.out.println("周末在家打扫卫生...");
}
// 三目运算符适合比较简单的场景
String prize = score > 90 ? "周末去海底世界游玩.." : "周末在家打扫卫生...";
System.out.println("*********" + prize);
}
}
课堂练习:
提示:生成随机数的方法 int random = (int)(Math.random()*10);
package com.bobo.ifdemo;
import java.util.Scanner;
public class IfDemo05 {
/**
* 输入四位数字的会员号的百位数字等于产生的随机数字即为幸运会员,
* 提示恭喜您中奖了,否则没中奖
* Math.random(); 获取一个0~1.0 不包含1.0的小树
* 5678
* 8 5678%10
* 7 5678/10%10 5678%100/10
* 6 5678/100%10 5678%1000/100
* @param args
*/
public static void main(String[] args) {
// 生成一个个位数的随机值
// System.out.println(Math.random());
int random = (int)(Math.random()*10);
System.out.println("random:" + random);
Scanner in = new Scanner(System.in);
System.out.println("请输入一个四位数的整数:");
int code = in.nextInt();
if(code >= 1000 && code <= 9999){
// 1000 < code < 9999 5678
int i = code/100%10; //5678/100%10
if(i==random){
System.out.println(random + " 恭喜您成为幸运的会员");
}
}else{
System.out.println("请输入合法的数字...");
}
/*System.out.println(5678%10);
System.out.println(5678/10%10);
System.out.println(5678%100/10);*/
}
}
有这样一个场景:
老师在批改试卷,成绩在90分以上的为优秀,成绩在80-90分之间为良好,成绩在60-80分之间的为合格,60分以下的为差,这个应该要怎么来实现?
多重if-else语句语法:
if (条件1) {
// 代码1
}else if(条件2){
// 代码2
}else if(条件3){
// 代码3
}...{
}else{
// 代码N
}
执行顺序:
注意:
案例:
package com.bobo.ifdemo;
import java.util.Scanner;
public class IfDemo06 {
/**
* 老师在批改试卷,成绩在90分以上的为优秀,
* 成绩在80-90分之间为良好,
* 成绩在60-80分之间的为合格,
* 60分以下的为差,
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入考试成绩:" );
int score = in.nextInt();
String info = "";
if (score >= 90) {
info = "成绩优秀";
}else if(score >=80 ){
info = "成绩良好,继续加油";
}else if (score >= 60) {
info = "成绩刚好及格,努力加油";
}else {
info = "成绩很差,明天叫家长过来....";
}
System.out.println(info);
}
}
课堂练习:
键盘输入一个月份值,然后输出对应的季节
package com.bobo.ifdemo;
import java.util.Scanner;
public class IfDemo07 {
/**
* 键盘输入一个月份值,然后输出对应的季节
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入一个月份");
int month = in.nextInt();
if(month >= 1 && month <= 12){
if( month <= 3){
// 表示是春季
System.out.println(month + "月份对应的是春季");
}else if(month <= 6){
System.out.println(month + "月份对应的是夏季");
}else if(month <= 9){
System.out.println(month + "月份对应的是秋季");
}else{
System.out.println(month + "月份对应的是冬季");
}
}else{
System.out.println("请输入一个合法的月份...");
}
}
}
语法结构:
if(条件1){
if(条件2){
// 代码1
}else{
// 代码2
}
}else{
// 代码3
}
执行流程:
switch语句是根据表示的不同的值做出不同的执行的,针对特定的值来出来
语法格式:
switch(表达式){
case 值1:
代码1;
break;
case 值2:
代码2:
break;
....N
default:
默认语句;
break;
}
注意:
案例:
package com.bobo.switchdemo;
import java.util.Scanner;
public class SwitchDemo01 {
/**
* 模拟:拨打中国电信客户的案例
* 按1:办理快带业务
* 按2:办理手机业务
* 按3:办理投诉业务
* 按4:转人工服务
* 没有上面的选项: 对不起您的输入有误
* @param args
*/
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
System.out.println("请输入您服务编号:");
int num = in.nextInt();
switch (num) {
case 1:
System.out.println("办理快带业务");
break;
case 2:
System.out.println("办理手机业务");
break;
case 3:
System.out.println("办理投诉业务");
break;
case 4:
System.out.println("转人工服务");
break;
default:
System.out.println("对不起您的输入有误");
break;
}
}
}
if语句
switch语句
选择语句的选取
若a和b均是整型变量并已正确赋值,正确的switch语句是( )。 A) switch(a+b); { … } B) switch( a+b*3.0 ) { … } C) switch a { … } D) switch ( a%b ) { … }
设int 型变量 a、b,float 型变量 x、y,char 型变量 ch 均已正确定义并赋值,正确的switch语句是( )。 A) switch (x + y) { … } B) switch ( ch + 1 ) { … } C) switch ch { … } D) switch ( a + b ); { … }
下列语句序列执行后,k 的值是( )。
int x = 6, y = 10, k = 5;
switch (x % y) {
case 0:
k = x * y;
case 6:
k = x / y;
case 12:
k = x - y;
default:
k = x * y - x;
}
A) 60 B) 5 C) 0 D) 54
下列语句序列执行后,k 的值是( )。
int i = 10, j = 18, k = 30;
switch (j - i) {
case 8:
k++;
case 9:
k += 2;
case 10:
k += 3;
default:
k /= j;
}
A) 31 B) 32 C) 2 D) 33
下列语句序列执行后,r 的值是( )
char ch = '8';
int r = 10;
switch (ch + 1) {
case '7':
r = r + 3;
case '8':
r = r + 5;
case '9':
r = r + 6;
break;
default:
r = r + 8;
}
A) 13 B) 15 C) 16 D) 18
下面语句运行结果为:()
switch (5) {
default:
System.out.println(5);
break;
case 0:
System.out.println(0);
break;
case 1:
System.out.println(1);
break;
case 2:
System.out.println(2);
break;
}
A) 0 B) 1 C) 2 D) 5
下面语句运行结果为:()
switch (5) {
default:
System.out.print(5);
case 0:
System.out.print(0);
case 1:
System.out.print(1);
break;
case 2:
System.out.print(2);
break;
}
A) 1 B) 5 C) 0 D) 501