目录
1、接收用户键盘输入Scanner类
Scanner就是一种引用类型,用于接收各种数据类型,JDK已经写好了这个类供我们直接使用。步骤有三个:
1、导包。
import java.util.Scanner;
2、创建。
Scanner sc = new Scanner(System.in);//new表示引用类型的对象。
PS:其中System.in代表从键盘输入。
3、使用。
a) 获取键盘输入的int数字:
int num = sc.nextint();
b) 获取键盘输入的字符串:
String str = sc.next();
String str = sc.nextLine();
**提示:**不建议使用nextint(),nextdouble(),nextlong()等各种数据类型。(避免输入错误,无法接收有效的值而产生异常。)
建议使用next()和nextLine(),但不能两者一起混合使用,混用建议nextLine()在next()之前。
示例:
import java.util.Scanner;
public class Demo1{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
String str1 = sc.next(); //如果先输入:Hello World,str1接收输入字符串空格之前的“Hello”
String str2 = sc.nextLine();//str2接收str1未接收的部分“ World”
System.out.println(str1); //Hello
System.out.println(str2); // World
}
}
next()和nextLine()的区别:
①next()只能接收一段文字,不能接收空格,遇回车符结束。
②nextLine()只能接收一行文字,能接收空格,遇回车符结束。
2、执行结构
概述:
1996年,计算机科学家Bohm和Jacopini证明了:任何简单或复杂的算法都可以由顺序结构、分支结构和循环结构这三种基本结构组合而成。
他们的共同点是都包含一个入口和一个出口,它们的每个代码都有机会被执行,不会出现死循环。
顺序结构:
顺序结构是一种基本的控制语句,它按照语句出现的顺序执行操作。
分支结构:
分支结构又称为选择结构,根据条件成立与否来执行操作。
循环结构:
循环结构是一种重复结构,如果条件成立,它会重复执行某一循环体,直到出现不满足的条件为止。
3、分支结构
-
if条件语句
if条件结构是根据条件判断之后再做处理
if(条件语句){… …}
if(条件语句){… …}else{… …}
if(条件语句){… …}else if(条件语句){… …}
if(条件语句){… …}else if(条件语句){… …}else{… …}
例子:用户输入学生成绩,判断成绩是否及格,判断条件为 优良:> 90、良好:81-90、中:60-80、不及格:< 60。
import java.util.Scanner; public class Demo2{ public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.print("请输入考试成绩:"); int s = input.nextInt(); if(s > 100 || s < 0){ System.out.println("抱歉,你的成绩不在分数线以内"); }else if(s >= 90){ System.out.println("你的成绩为优良"); }else if(s >= 81 && s < 90){ System.out.println("你的成绩为良好"); }else if(s >= 60 && s <= 80){ System.out.println("你的成绩为合格"); }else{ System.out.println("你的成绩为不合格"); } } }
-
switch选择语句
switch(表达式){
case 取值1:语句块1;break;
case 取值2:语句块2;break;
case 取值n:语句块n;break;
default:语句块n+1;break;
}
switch语句有关规则:
表达式的返回值必须是下述几种类型之一:
int,byte,char,short,String;
case子句中的取值必须是常量,且所有case子句中的取值应是不同的;
default子句是可选的;
break语句用来在执行完一个case分支后使程序跳出switch语句块;如果case后面没有写break则直接往下执行!
case后面的执行体可写{ }也可以不写{ }
例题:多分支月份输出天数(充分利用语句特性)
import java.util.Scanner; public class Demo3{ public static void mian(String[] args){ Scanner input = new Scanner(System.in); System.out.print("请输入一个月份(1-12):"); String month = input.next(); switch(month){ case "1": case "2": case "3": System.out.println("春季"); break; case "4": case "5": case "6": System.out.println("夏季"); break; case "7": case "8": case "9": System.out.println("秋季"); break; case "10": case "11": case "12": System.out.println("冬季"); break; } } }
4、循环语句
循环语句功能
在循环条件满足的情况下,反复执行特定代码。
循环语句分类
for 循环
while 循环
do / while 循环
-
while 循环
符合条件,循环继续执行;否则,循环 退出。
特点:先判断,再执行。(所谓当型循环)
语法:
while(条件表达式){ 语句块; } //死循环 while(1){ }
使用while循环的步骤:
①分析循环条件和循环操作;
②套用while语法写出代码;
③检查循环是否能够退出。
例题:录入班级人数和学员成绩,计算班级学员的平均成绩。
import java.util.Scanner; public class Demo4{ public static void main(String[] args){ // int i = 0; // while(i < 10){ // //更新循环变量 // i++; // System.out.println("循环在执行" + i); // } // System.out.println("循环结束"); Scanner input = new Scanner(System.in); System.out.print("请输入班级总人数:"); //使用变量studentNum记录班级总人数 int studentNum = input.nextInt(); //用于记录循环的次数,以及控制循环何时结束 int i = 0; //定义变量sum,用于统计总分数 int sum = 0; while(i < studentNum){ i++; System.out.println("请输入第" + i + "个学生的成绩:"); int s = input.nextInt(); sum += s; } System.out.println("学生的平均成绩为:" + sum / studentNum); } }
-
do-while 循环
先执行一遍循环操作,符合条件,循环继续执行;否则,循环退出。
特点:先执行,再判断。(所谓直到型循环)
语法:
do{ 语句块; }while(条件表达式); //死循环 do{ }while(1);
while循环与do-while循环的区别?
while:先判断条件,如果条件满足,再执行循环操作。
do-while:先执行一遍,然后再判断条件,如果条件满足,继续执行循环操作。
-
for 循环
语法:
for(定义循环变量;判断循环变量;更新循环变量){ 语句块; } //死循环: for(;;){ }
特殊示例:
public class Demo5{ public static void main(String[] args){ for(System.out.println(1);;System.out.println(3)){ System.out.println(2); } /** *输出结果为: *1 *2 *3 *2 *3 *2 *3 *。。。↓(无限,除非停电或死机又或者直接关闭!) */ } }
5、循环嵌套
示例1:
public class Demo6{
public static void main(String[] args){
int count = 0;
for(int i = 0;i < 10;i++){ //外层循环10次,使得有10个内层10次的循环,共计10*10个循环。
for(int j = 0;j < 10;j++){ //内层循环10次
count++;
System.out.println(count); //输出:1、2、3、。。。、100
}
}
}
}
示例2(打印十行十列星号):
public class Demo7{
public static void main(String[] args){
//外层循环控制的是行数
for(int i = 0;i < 10;i++){
//内层循环控制的是列数
for(int j = 0;j < 10;j++){
System.out.print("* ");
}
System.out.println(); //打印换行
}
//输出效果如下:
/*
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
*/
}
}
6、break与continue
示例:
public class Demo9{
/**
*break与continue语句
* break是用于终止本轮所有次循环。既不执行本次循环中的break后面的语句,直接跳出循环。
* continue是用于终止本轮本次循环。即本次循环中continue后面的代码不执行,进行下一次循环的入口判断。
*/
public static void main(String[] args){
for(int i = 0;i < 10;i++){
System.out.println(i); //打印输出:0、1、2、3、4、5(因被break直接跳出)
if(i == 5){
break;
}
}
for(int i = 0;i < 10;i++){
System.out.println(i); //打印输出:0、1、2、3、4、6、7、8、9(因被continue直接跳过)
if(i == 5){
continue;
}
}
}
}
7、如何退出多层循环
语法:
标签名:循环体1{
循环体2{
循环体n{
break 标签名;
}
}
}
//标签名:任意标识符。
//循环体:任意循环语句。
//break 标签名:break跳出指定的循环体,此循环体的标签名必须与break的标签名一致。
示例1:
public class Demo10{
public static void main(String[] args){
Loop:for(int i = 0;i < 10;i++){ //在for循环前用标签标记
for(int j = 0;j < 10;j++){
System.out.println("i = " + i + ", j = " + j);
if(i == 5 && j == 5){ //当且仅当i = 5,且j = 5时,退出外层循环
break Loop; //跳出Loop标签标记的循环体
}
}
}
//输出结果如下:
/*
i = 0, j = 0
i = 0, j = 1
i = 0, j = 2
i = 0, j = 3
i = 0, j = 4
i = 0, j = 5
i = 0, j = 6
i = 0, j = 7
i = 0, j = 8
i = 0, j = 9
i = 1, j = 0
i = 1, j = 1
i = 1, j = 2
i = 1, j = 3
i = 1, j = 4
i = 1, j = 5
i = 1, j = 6
i = 1, j = 7
i = 1, j = 8
i = 1, j = 9
i = 2, j = 0
i = 2, j = 1
i = 2, j = 2
i = 2, j = 3
i = 2, j = 4
i = 2, j = 5
i = 2, j = 6
i = 2, j = 7
i = 2, j = 8
i = 2, j = 9
i = 3, j = 0
i = 3, j = 1
i = 3, j = 2
i = 3, j = 3
i = 3, j = 4
i = 3, j = 5
i = 3, j = 6
i = 3, j = 7
i = 3, j = 8
i = 3, j = 9
i = 4, j = 0
i = 4, j = 1
i = 4, j = 2
i = 4, j = 3
i = 4, j = 4
i = 4, j = 5
i = 4, j = 6
i = 4, j = 7
i = 4, j = 8
i = 4, j = 9
i = 5, j = 0
i = 5, j = 1
i = 5, j = 2
i = 5, j = 3
i = 5, j = 4
i = 5, j = 5
*/
}
}
8、图形打印
示例1:
public class Demo11{
public static void main(String[] args){
/**
图形1:
*
***
*****
********
解决方案:
外层循环控制 行数:4
内层循环控制 列数:第一行时循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次。
*/
for(int i = 0;i < 4;i++){
for(int j = 2 * i + 1;j > 0;j--){
System.out.print("*"); //一次打印一个*号,不换行
}
System.out.println(); //换行
}
/**
图形2:
*
***
*****
*******
解决方案:
外层循环控制 行数:4
内层循环1,控制空格列数:第一行时3个空格,第二行时2个空格,第三行时1个空格,第四行时0个空格。
内层循环2,控制*号列数:第一行时循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次。
*/
for(int i = 0;i < 4;i++){
for(int j = 3 - i;j > 0;j--){
System.out.print(" "); //一次打印一个空格,不换行
}
for(int j = 2 * i + 1;j > 0;j--){
System.out.print("*"); //一次打印一个*号,不换行
}
System.out.println(); //换行
}
/**
图形3:
*
***
*****
*******
*****
***
*
解决方案:
外层循环控制 行数:7
分两种情况(if):
①当行数控制在 <= 4时;
内层循环1,控制空格列数:第一行时3个空格,第二行时2个空格,第三行时1个空格,第四行时0个空格。
内层循环2,控制*号列数:第一行是循环1次,第二行时循环3次,第三行时循环5次,第四行时循环7次。
②当行数控制在 > 4时;
内层循环1-1:第五行时1个空格,第六行时2个空格,第七行时3个空格。
内层循环1-2,第五行时循环5次,第六行时循环3次,第七行时循环1次。
*/
for(int i = 0;i < 7;i++){
if(i <= 3){
for(int j = 3 - i;j > 0;j--){
System.out.print(" "); //一次打印一个空格,不换行
}
for(int j = 2 * i + 1;j > 0;j--){
System.out.print("*"); //一次打印一个*号,不换行
}
}else{
for(int j = i - 3;j > 0;j--){
System.out.print(" "); //一次打印一个空格,不换行
}
for(int j = 13 - 2 * i;j > 0;j--){
System.out.print("*"); //一次打印一个空格,不换行
}
}
System.out.println(); //换行
}
/**
图形4:
*
* *
* *
* *
* *
* *
*
解决方案:
外层循环控制 行数:7
分两种情况(if):
①当行数控制在 <= 4时;
内层循环1,控制空格列数:第1行3个空格,第2行2个空格,第3行1个空格,第4行0个空格。
内层循环2,控制*号列数:第1行循环1次(打印1个*号),第2行循环3次(仅第1次和最后一次打印*号),第3行循环5次(同理),第4行循环7次(同理)。
②当行数控制在 > 4时;
内层循环1-1,控制空格列数:第5行1个空格,第6行2个空格,第7行3个空格。
内层循环1-2,控制*号列数:第5行循环5次(仅第1次和最后一次打印*号),第6行循环3次(同理),第7行循环1次(打印1个*号)。
*/
for(int i = 0;i < 7;i++){
if(i <= 3){
for(int j = 3 - i;j > 0;j--){
System.out.print(" "); //一次打印一个空格,不换行
}
for(int j = 2 * i + 1;j > 0;j--){
if(j > 1 && j < 2 * i + 1){
System.out.print(" "); //一次打印一个空格(受控),不换行
}else{
System.out.print("*"); //一次打印一个*号,不换行
}
}
}else{
for(int j = i - 3;j > 0;j--){
System.out.print(" "); //一次打印一个空格,不换行
}
for(int j = 13 - 2 * i;j > 0;j--){
if(j > 1 && j < 13 - 2 * i){
System.out.print(" "); //一次打印一个空格(受控),不换行
}else{
System.out.print("*"); //一次打印一个*号,不换行
}
}
}
System.out.println(); //换行
}
}
}
9、判断用户输入类型
用户输入类型可以通过hasNext类型()方法识别,包括hasNextInt(),hasNextDouble()等等。类型一致,返回true;相反,返回false。
示例:
import java.util.Scanner;
public class Demo12{
//交付标准
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("请输入一个数字:");
//在接收输入之前判断输入的类型是否为int,是,返回true,否,返回false
if(input.hasNextInt()){
int num = input.nextInt();
System.out.println("你输入的是:" + num);
}else{
System.out.println("输入类型错误!");
}
}
}