Scanner对象
之前学习的基本语法中无法实现程序和人的交互,于是便有了Scanner类来辅助我们获取用户的输入。
基本语法:
ini
scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般还需要用hasNext()与hasNextLine()判断是否还有输入的数据。
next()
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才能将其后面输入的空白座位分隔符或者结束符
- next()不能得到带有空格的字符串
csharp
//next方法接收
//如果输入的信息之间有空格,则只会输出空格前的内容
if (scanner.hasNext()){
String out=scanner.next();
System.out.println("输出的内容为:"+ out);
}
nextLine()
- 以Enter为结束符,也就是说nextLine()返回的事输入回车之前的所有字符
- 可以获得空白
scss
//nextLine接收
if (scanner.hasNextLine()){
String out2 = scanner.nextLine();
System.out.println("输出的内容为:"+ out2);
}
//凡是IO相关的,都会占用资源,用完之后最好都关闭
scanner.close();
其他
如果一个main方法里面出现了多个next()或者nextLine(),反馈结果如下:
- 先next(),后nextLine()
只允许输入一次
若只有一段,则都为next()的输出,nextLine()输出为无;
若有多段,第一段为next()的输出,剩下的都是nextLine()的。
- 先nextLine(),后next()
允许输入两次
前面一次作为nextLine()的输出,后面一次作为next()的输出。
- 两次都是next()
允许输入一次或两次
若第一次输入的内容中不含有空白符,则算为第一次的输出,然后开始第二次的输入;
若输入的是带有空白符的内容,则第一段为第一个next()的输出,第二段为第二个next()的输出,不管有多少段,只会用到前面两段。
- 两次都是nextLine()
允许输入两次
第一次为第一个nextLine()的输出,第二次为第二个nextLine()的输出。
拓展:整数和小数的输出
整数用hasNextInt()和nextInt();
小数用hasNextFloat()和nextFloat()。
用法如下:
ini
Scanner scanner = new Scanner(System.in);
//这里是与整数和浮点数相关的输入
int i = 0;
float f = 0.0f;
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("输出为:"+ i );
}
else{
System.out.println("这不是整数数据");
}
if(scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("输出为:"+ f);
}
else{
System.out.println("这不是浮点数据");
}
顺序结构
- Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
- 顺序结构是最简单的算法结构
- 语句与语句之间,框与框之间是按从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成的,它是任何一个算法都离不开的一种基本算法结构。
if选择结构
单if选择结构
只使用一个if()来完成结构。
java
if(scanner.hasNextLine()){
i=scanner.nextLine()
}
双if选择结构
使用if()和else{}完成结构。
java
//equals判断输入是否相等
if(s.equals("Hello!")){
System.out.println("密码正确");
}
else{
System.out.println("密码错误");
}
多if选择结构
使用if(),else if(),else{}来完成结构。
java
if(i == 100){
System.out.println("S级");
}
else if(i<100&&i>=90){
System.out.println("A级");
}
else if(i<90&&i>=80){
System.out.println("B级");
}
else if(i<80&&i>=70){
System.out.println("C级");
}
else if(i<70&&i>=60){
System.out.println("D级");
}
else if(i<60&&i>=0){
System.out.println("废物!!!!!");
}
else{
System.out.println("成绩不合法");
}
注意点:
- if语句至多有1个else语句,else语句在所有的else if 语句之后。
- if语句可以有若干个else if语句,它们必须在else语句之前。
- 一旦其中一个else if 语句检测到true,其他的else if以及else语句都将跳过执行。
嵌套if结构
在if()里面加入其他if()结构。
Switch多选择结构
多选择结构的另外一种实现方式:switch case语句。
switch case语句判断一个变量与一系列值中某个值是否相等,每个值成为一个分支。
java
//用于匹配一个具体的值,方便于if语句
switch (grade){
case 'A':
System.out.println("优秀");
break;
//break用于解决case穿透现象,如果不使用,只要完成了当前语句的条件,后面的所有结果都会输出
case 'B':
System.out.println("良好");
break;
case 'C':
System.out.println("一般");
break;
case 'D':
System.out.println("及格");
break;
case 'E':
System.out.println("不及格");
break;
default://相当于else
System.out.println("未知成绩");
循环结构
while循环
while是最基本的循环,它的结构为:
java
while(布尔表达式){
//循环内容
}
- 只要布尔表达式为true,循环就会一直下去。
- 我们大多数情况是会让循环停止下来的,我们需要一个让表达式失效的方式来结束循环。
- 少部分情况需要循环一直执行,比如服务器的请求响应监听等。
- 循环条件一直为true就会造成无限循环[死循环],会影响程序性能或者造成程序卡死崩溃。
do...while循环
对于while语句而言,如果不满足条件,则不能进入循环。但有时候我们需要即便不满足条件,也至少执行一次。
do...while循环和while循环相似,不同的是,do...while至少会执行一次。
结构为:
java
do{
//代码语句
}while(布尔表达式);
While和do_while的区别:
- while先判断后执行,do_while是先执行后判断.
- do...while总是保证循环体会被至少执行一次 (这是他们的主要区别)
For循环
For循环语句是支持迭代的一种通用结构,是最有效、最灵活的循环结构。
For循环执行的次数是在执行前就确定的。
结构为:
java
for(初始化;布尔表达式;更新){
//代码语句
}
关于for循环:
- 最先执行初始化步骤,可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
- 然后,检测布尔表达式,如果为true,循环体被执行。如果是false,循环被终止,开始执行循环体后面的语句。
- 执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)
- 再次检测布尔表达式,循环执行上面的过程。
- 计算0-100的奇数和偶数的和.
java
//练习1:计算0-100的奇数和偶数的和.
int oddSum= 0;
int evenSum= 0;
for (int i= 0; i <= 100; i++) {
if (i%2!=0)//判断奇偶
{
oddSum+=i;//奇数
}
else{
evenSum+=i;//偶数
}
}
System.out.println("奇数和为:"+oddSum);
System.out.println("偶数和为:"+evenSum);
- 用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个.
java
//练习2:用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个.
for (int f = 0; f < 1000; f++) {
if (f%5==0){
System.out.print(f+"\t");
}
if (f%(5*3)==0){
System.out.print("\n");
//也可以是使用System.out.println();
}
//print和println的区别:
//print输出完后不会换行
//println输出完后自动换行
3.打印九九乘法表
java
//练习3:打印九九乘法表
/*
1.先打印第一列
2.把固定的1再用一个循环包起来
3.去掉重复项,m<=n
4.调整样式
*/
for (int n = 1; n <= 9; n++) {
for (int m = 1; m <=n; m++) {
System.out.print(n+"*"+m+"="+(n*m)+"\t");}
System.out.println();
}
增强For循环
语法格式如下:
scss
for(声明语句:表达式)
{
//代码句子
}
-
声明语句: 声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循环语句块,其值与此时数组元素的值相等。
-
表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
javaint[] numbers={10,20,30,40,50}; //遍历数组的元素 for (int x:numbers){ System.out.println(x); }
break和continue
- break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环, 不执行循环中剩余的语句。(break语句也在switch语句中使用)
- continue 语句用在循环语句体中,用于终止某次循环过程, 即跳过循环体中尚未执行的语句接着进行下一次是否执行循环的判定。
- 简而言之,一个请假一个辞职
java
int i = 0;
while(i<100){
i++;
if(i%10==0){
System.out.println();
continue;
}
System.out.print(i+"\t");
打印三角形
java
for (int i = 0; i < 5; i++) {
for (int j=5;j>=i;j--){
System.out.print(" ");
}
for (int j=0;j<=i;j++){
System.out.print("*");
}
for (int j=0;j<i;j++){
System.out.print("*");
}
System.out.println();