一.键盘录入数据
开发步骤:
1)导包
2)创建文本扫描器对象
3)提示并录入数据(“回车”,录入)
4)接收并使用数据 (根据 具体的需求)
Scanner类: JDK5以后提供的:录入数据的 (无法直接录入char)
录入字符串: String nextLine() /String next();
录入int类型数据:int nextInt()
录入的类型一定和接收的类型匹配:否则报错: java.util.InputMismatchException
//需求:
录入学生姓名,语文成绩,数学成绩,分数排序! (排序算法+面向对象的基础)
语文/数学—都是int类型:为了方便统一,都是使用String
姓名:String
语文/数学:String-- Integer(int类型包装类型) —>int
*/
import java.util.Scanner;
class Test{
public static void main(String[] args){
//创建文本扫描器
Scanner sc = new Scanner(System.in) ;
//录入两个int类型:没有问题
/*
System.out.println("请输入第一个数据:") ;
int a = sc.nextInt() ;
System.out.println("请输入第二个数据:") ;
int b = sc.nextInt() ;
*/
//录入两个字符串 :String nextLine() :都可以接收到
/*
System.out.println("请输入第一个数据:") ;
String a = sc.nextLine() ;
System.out.println("请输入第二个数据:") ;
String b = sc.nextLine() ;
*/
//先录入String,在录入int (没有问题:都可以接收到)
/*
System.out.println("请输入第一个数据:") ;
String a = sc.nextLine() ;
System.out.println("请输入第二个数据:") ;
int b = sc.nextInt() ;
*/
//先录入int,在录入字符串 (有问题)
//原因: "回车"符号---->"字符" :当前录入完int类型,
//下一个String "回车本身字符串",直接将第二个值漏掉
//解决方案1:在录入String类型之前,在创建一个扫描器对象
System.out.println("请输入第一个数据:") ;
int a = sc.nextInt() ;
//在录入String类型之前,在创建一个扫描器对象
Scanner sc2 = new Scanner(System.in) ;
System.out.println("请输入第二个数据:") ;
String b = sc2.nextLine() ; //"较为正式的用法:nextLine()"//String--->底层由"字符"组成的
//方式2:
//public String next(): 自己使用的可以 next方法, 开发中:nextLine()
String b = sc2.nextLine() ;
System.out.println("a:"+a+",b:"+b) ;
}
}
二.流程控制语句-顺序结构语句
顺序结构语句(最基本的语句)
当前xxx.java文件—jvm 编译 -----> 类名.class(字节码文件)
执行程序: java 类名.class; (编译+运行: 底层原理是一种反射:Java高级部分)
后期:反射贯彻于JavaEE
jvm调用main方法:代码从上而下依次加载(源顺序)
class Demo{
public static void main(String[] args){
System.out.println("程序开始了...") ;
int a = 10 ;
System.out.println("a的结果是:"+a ) ;
myTest() ; //自定义方法
System.out.println("程序结束了...") ;
}
public static void myTest(){
System.out.println("执行了myTest方法...") ;
}
}
三.流程控制语句-选择结构语句
选择结构语句:if语句和switch语句
if语句:三种格式
第一种格式
应用场景:针对单个条件进行判断
格式:
if(表达式){
语句;
}
执行流程:
首先判断表达式是否成立,如果成立,则执行语句;否则不成立,不会执行!
注意事项:
1)if的后面不能有;( 分号),if(表达式);{} 错误语法
有左大括号的地方不能有分号;有分号的地方不能有左大括号
2)如果使用if格式1,里面的语句是条语句,{}是可以省略的!,不建议省略!
使用场景:用户输入验证码,需要和服务端的验证码对比,验证码匹配才能登录
//导包
import java.util.Scanner ;
class IfDemo1{
public static void main(String[] args){
//文本扫描器对象
Scanner sc = new Scanner(System.in) ;
//提示并录入
System.out.println("请您录入一个x的值:") ;
int x = sc.nextInt() ;
//if语句格式1
/*if(x >= 10){
System.out.println("x大于等于10") ;
}
*/
//if语句没有意义
if(x >= 10);
//局部代码块 :在方法定义中定义{}:作用:限定变量的生命周期
{
int a = 10 ;
System.out.println("x大于等于10") ;
System.out.println(a) ;
}
//System.out.println(a) ;//java:54: 错误: 找不到符号
if(x>=5)
System.out.println("x大于等于5") ;
System.out.println("over") ;
}
}
第二种格式:
if(表达式){
语句1;
}else{
语句2;
}
执行流程:
首先判断表达式是否成立,
如果成立,执行语句1;
否则,执行语句2
应用场景:针对两种情况进行判断
应用场景:
键盘录入一个字符串 username 以及密码 password
使用这个用户名以及密码和已知存在用户名和密码进行匹配,
如果一致,提示"用户登录成功",否则"登录失败!"
练习:
判断输入的用户名和密码是否匹配
import java.util.Scanner ;
class IfDemo2{
public static void main(String[] args){
//已经存在用户名和密码
String name = "admin" ;
String pwd = "admin" ;
System.out.println("---------------欢迎访问xxx系统---------------------") ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提供并录入数据
System.out.println("请输入用户名:") ;
String username = sc.nextLine() ;
System.out.println("请输入密码:") ;
String password = sc.nextLine() ;
//判断:if...else...
if(name.equals(username) && pwd.equals(password)){
System.out.println("登录成功...") ;
}else{
System.out.println("对不起,登录失败!...") ;
}
/*
while(true){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提供并录入数据
System.out.println("请输入用户名:") ;
String username = sc.nextLine() ;
System.out.println("请输入密码:") ;
String password = sc.nextLine() ;
//判断:if...else...
if(name.equals(username) && pwd.equals(password)){
System.out.println("登录成功...") ;
break;
}else{
System.out.println("对不起,登录失败,重新输入!") ;
}
}
*/
}
}
第三种格式:
场景:针对多个情况进行判断
格式
if(表达式1){
语句1;
}else if(表达式2){
语句2;
}else if(表达式3){
语句3;
...
}else{
语句n+1 ;
}
流程:
首先,判断表达式1是否成立,成立,执行语句1
否则,判断表达式2是否成立,成立,执行语句2
否则,判断表达式3是否成立,成立,执行语句3
…
如果上述都没有匹配的结果:执行else的语句;
练习:
1.键盘录入三个数据,求三个数据中的最大值,使用if语句格式嵌套完成和三元分别完成
(1)
import java.util.Scanner; //导入Scanner扫描文本的包
class Traning{ //创建一个Traning的类
public static void main(String[] args){
Scanner sc = new Scanner(System.in); //建立一个新的文本扫描对象sc
System.out.println("请输入第一个数据");
int num1 = sc.nextInt(); // 键盘录入数字1
System.out.println("请输入第二个数据");
int num2 = sc.nextInt(); // 键盘录入数字2
System.out.println("请输入第三个数据");
int num3 = sc.nextInt(); // 键盘录入数字3
if(num1>num2){ //比较num1和num2之间的最大值,然后跟num3比较
if(num1>num3){
System.out.println("三个数字最大值为"+num1);
}
else{
System.out.println("三个数字最大值为"+num3);
}
}
else{
if(num2>num3){ //比较num2和num3之间的最大值,得出最大值
System.out.println("三个数字最大值为"+num2);
}
else{
System.out.println("三个数字最大值为"+num3);
}
}
}
}
(2)
import java.util.Scanner; //导入Scanner扫描文本的包
class Traning{ //创建一个Traning的类
public static void main(String[] args){
Scanner sc = new Scanner(System.in); //建立一个新的文本扫描对象sc
System.out.println("请输入第一个数据");
int num1 = sc.nextInt(); // 键盘录入数字1
System.out.println("请输入第二个数据");
int num2 = sc.nextInt(); // 键盘录入数字2
System.out.println("请输入第三个数据");
int num3 = sc.nextInt(); // 键盘录入数字3
int a = (num1>num2)?num1:num2; //将num1和num2之间的较大值赋值给变量a
int b = (a>num3)?a:num3; //将a与num3之间的较大值赋值给变量b
System.out.println("三个值的最大值是"+b);
}
}
2.键盘录入两个数据,比较两个数据是否相等(if语句)
import java.util.Scanner; //导入Scanner扫描文本的包
class Traning{ //创建一个Traning的类
public static void main(String[] args){
Scanner sc = new Scanner(System.in); //建立一个新的文本扫描对象sc
System.out.println("请输入第一个数据");
int num1 = sc.nextInt(); // 键盘录入数字1
System.out.println("请输入第二个数据");
int num2 = sc.nextInt(); // 键盘录入数字2
if (num1==num2){
System.out.println("两个数据相等");
}
else{
System.out.println("两个数据不相等");
}
}
}
3.键盘录入一个数据,判断这个数据是否是偶数(if语句完成!)
import java.util.Scanner; //导入Scanner扫描文本的包
class Traning{ //创建一个Traning的类
public static void main(String[] args){
Scanner sc = new Scanner(System.in); //建立一个新的文本扫描对象sc
System.out.println("请输入一个数据");
int num1 = sc.nextInt(); // 键盘录入数字1
if (num1%2==0){
System.out.println("这个数是偶数");
}
else{
System.out.println("这个数不是偶数");
}
}
}
4.需求:键盘录入一个月份的值:判断季节
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12,1,2 冬季
import java.util.Scanner ;
class ifDemo3{
public static void main(String[] args){
Scanner sc = new Scanner(System.in) ;
//录入数据
System.out.println("请您输入学生的成绩:") ;
int socre = sc.nextInt() ;
if(socre >100 || socre <0){
System.out.println("对不起,数据不合法!") ;
}else if(socre >= 90 && socre<=100){
System.out.println("优秀") ;
}else if(socre >= 80 && socre<90){
System.out.println("较好") ;
}else if(socre >=70 && socre <80){
System.out.println("良好") ;
}else if(socre >=60 && socre<70){
System.out.println("及格") ;
}else{
System.out.println("不及格") ;
}
}
}
switch语句
格式:
switch(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break;
...
default:
语句n+1;
break ;
}
switch(表达式):最基本的类型:int,byte,char,
jdk5以后:可以跟枚举类(enum)
jdk7以后:String类型
case:后面必须接常量,例如:整数 1
执行流程:
首先表达式接收一个值
然后和case语句 值1比较,如果成立,执行语句1,break 结束switch
值1不匹配,判断和值2是否匹配,如果匹配成功,执行语句2,结束switch
…
上面case 语句都不成立,
执行default语句,执行语句n+1,结束switch!
switch语句的注意事项
1)case语句的后面只能是常量 (Java是一个强类型语言)
前端:javascript :switch语句的case后面可以常量也可以变量
2)break语句:不要轻易省略掉, 会造成case 穿透现象(此时,如果跟某个case已经匹配,但是没有语句break,下面的case就不会对比,直接执行语句)
break:结束,中断 :结束switch
3)switch语句的结束条件
a)语句break结束
b)程序默认执行的到末尾!
4)default语句可以在switch语句中的任何位置,不影响执行流程!
当前case后面的都匹配,执行default语句
如果default语句在语句中的话,break语句 不能省略!
如果default语句在switch末尾的话,break语句是可以省略!
需求:
1.键盘录入一个数据,判断星期
1 星期一
2 星期二
3 星期三
4 星期四
5 星期五
6 星期六
7 星期日
import java.util.Scanner;
class SwitchDemo{
public static void main(String[] args){
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请您输入一个数据(1-7):");
int week = sc.nextInt() ;
/*
switch(表达式){
case 值1:
语句1;
break ;
case 值2:
语句2;
break;
...
default:
语句n+1;
break ;
}
*/
switch(week){
case 1:
System.out.println("星期一") ;
break ;
case 2:
System.out.println("星期二") ;
break ;
case 3:
System.out.println("星期三") ;
break ;
case 4:
System.out.println("星期四") ;
break ;
case 5:
System.out.println("星期五") ;
break ;
case 6:
System.out.println("星期六") ;
break ;
case 7:
System.out.println("星期日") ;
break ;
default:
System.out.println("对不起,没有该星期") ;
break ;
}
}
}
2.看程序,写结果
class Test{
public static void main(String[] args){
int a = 3 ;
int b = 4 ;
switch(a){
default:
b++ ; //1) b++ 5
case 4:
b++ ; //2) b++ 6
case 5:
b ++ ; //3)b++ 7
}
//b的值是多少
System.out.println(b) ;
System.out.println("---------------------------") ;
int x = 3 ;
int y = 4 ;
switch(x){
default:
y++ ;
break ;
case 3:
y++ ; //y++ 5
case 4:
y ++ ; //y++ 6
}
//y的值是多少
System.out.println(y) ;
}
}
3.将键盘录入一个月份,判断季节 (利用case穿透)
3,4,5 春季
6,7,8 夏季
9,10,11 秋季
12,1,2 冬季
import java.util.Scanner ;
class SwitchTest{
public static void main(String[] args){
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请输入一个数据(1-12):") ;
int month = sc.nextInt() ;
//使用switch来判断
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("对不起,您输入的数据不合法") ;
break ;
}
}
}
4.模拟一个单项选择题
键盘录入一个数据,输出一个"正确答案 A B C D "
Scanner类:不能够录入char类型,间接去利用这个字符对应的ASCII码表的值 (int)
‘A’---- 65
‘B’---- 66
‘C’---- 67
‘D’---- 68
1)导包并创建文本扫描器对象
给出一些选项
<<我们结婚吧>>电视剧中的"杨桃"谁演的?
输出语句("65 ")
2)录入int类型
int choiceNumber = 文本扫描器对象.nextInt();
//将choinceNumber int类型强制转换为char类型
char choice = (char)choiceNumber ;
import java.util.Scanner ;
class SwitchTest2{
public static void main(String[] args){
//提供几个选项
System.out.println("<<我们结婚吧>>电视剧中的 杨桃谁扮演的?") ;
System.out.println("65 刘亦菲") ;
System.out.println("66 高圆圆") ;
System.out.println("67 张佳宁") ;
System.out.println("68 朱茵") ;
System.out.println("================进入选择======================") ;
//创建键盘录入对象
Scanner sc = new Scanner(System.in) ;
//提示并录入数据
System.out.println("请输入您的选项:") ;
int choiceNumber = sc.nextInt() ;
//强制类型转换
char choice = (char)choiceNumber ;
//switch语句来判断
switch(choice){
case 'A':
System.out.println("对不起,您输入答案有误!");
break ;
case 'B':
System.out.println("恭喜您,答案正确!");
break ;
case 'C':
System.out.println("对不起,您输入答案有误!");
break ;
case 'D':
System.out.println("对不起,您输入答案有误!");
break ;
}
}
}