2.2 Java流程控制
sacnner对象
scanner实现程序和人的交互,用它来获得用户的输入
-
基本语法
Scanner scanner = new Scanner(System.in);
scanner.next和scanner.nextLine的区别
- scanner.next
package com.kuang.scanner;
import java.util.Scanner;
public class Demo1 {
public static void main(String[] args) {
//创建扫描器对象
Scanner scanner = new Scanner(System.in);
System.out.println("使用next接受: ");
//判断用户有没有输入字符串
if(scanner.hasNext()==true){
String str = scanner.next();
System.out.println("输入的内容为: "+str);
}
//用完scanner之后关掉,节省资源,凡是IO流
scanner.close();
}
}
fig1

- scanner.nextLine
package com.kuang.scanner;
import java.sql.SQLOutput;
import java.util.Scanner;
public class Dome2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("使用next Line的方式接受");
//判断是否还有输入
if(scanner.hasNextLine()){
String str =scanner.nextLine();
System.out.println("输出的内容为: "+str);
}
scanner.close();
}
}
fig2

-
next()输入有效字符后,将其后面的空白作为分割符或结束符,故next()不能得到带有空格的字符串。
-
nextLine以Enter为结束符,nextLine()返回的是输入回车前的所有字符。
-
package com.kuang.scanner; import java.util.Scanner; public class Demo4 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); //从键盘接受数据 int i = 0; float j = 0.0f; System.out.println("请输入整数: "); if(scanner.hasNextInt()) { i = scanner.nextInt(); System.out.println("整数数据:"+i); }else { System.out.println("您输入的不是整形数据"); } // scanner.close(); // Scanner scanner = new Scanner(System.in); System.out.println("请输入小数: "); if(scanner.hasNextFloat()) { j = scanner.nextFloat(); System.out.println("小数数据:"+j); }else { System.out.println("您输入的不是小数数据"); } scanner.close(); //存疑。当整型错误输入时,直接跳过接下来的小数输入 } }
引入DecimalFormat 类来控制输出小数点的位数
decimal: 1.十进制
2.小数
package com.kuang.scanner;
import java.text.DecimalFormat;
import java.util.Scanner;
public class Demo5 {
//输入多个数字,求和与平均数,每输入一个数字用回车确认,输入非数字来结束
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//引入类decimal控制输出的小数点位数,几位小数点后跟几个零
DecimalFormat df = new DecimalFormat("0.00");
// 和||求平均数用的计数
double sum = 0;
int m = 0;
//通过hasNextDouble判断循环是否结束
System.out.println("请输入数字:\n");
while(scanner.hasNextDouble()){
sum+=scanner.nextDouble();
m++;
}
System.out.println(m+"个数的和为"+sum);
System.out.println(m+"个数的平均值为"+df.format(sum/m));
}
}
if/else 结构
package com.kuang.struct;
import java.util.Scanner;
public class Demo2_if_else {
public static void main(String[] args) {
System.out.println("Write down the score: ");
Scanner scanner = new Scanner(System.in);
// String str = scanner.nextLine();
while (scanner.hasNextShort()){
int score = scanner.nextInt();
if (score == 100){
System.out.println("Unbelieved");
}else if (score >= 90 && score < 100){
System.out.println("Amazing");
}else if (score >= 80 && score < 90){
System.out.println("Nice");
}else if (score >= 70 && score < 80){
System.out.println("Good");
}else if (score >= 60 && score < 70){
System.out.println("Survived");
}else if (score < 60 && score >= 0){
System.out.println("Dead");
} else{
System.out.println("False input, try again:");
}
}
System.out.println("Are you kidding me?");
}
}
switch case 多选择结构
基本结构
switch(expression){
case value :
eat();
break;
case value:
sleep
}switch(expression){
case value :
eat();
break;
case value:
sleep();
break;
default;
}
package com.kuang.struct;
public class Demo3_switch {
public static void main(String[] args) {
// char grade = 'f';
String name = "永仪时刻i";
//jdk 1.7之后支持表达式匹配字符串
//字符的本质还是数字 ''表示字符 ""表示字符串 .equal判断是否相等
/**
* 反编译 正常.java->.class
* 直接project struct 里面找到class文件,用ide打开
*/
//case穿透 不加break会剩下的case全部输出
switch (name){
case "sdf":
System.out.println("A");
break;
case "永仪时刻i":
System.out.println("bingo");
break;
default:
System.out.println("unknown");
}
}
}
字节码.class文件
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.kuang.struct;
public class Demo3_switch {
public Demo3_switch() {
}
public static void main(String[] args) {
String name = "永仪时刻i";
byte var3 = -1;
switch(name.hashCode()) {
case 113717:
if (name.equals("sdf")) {
var3 = 0;
}
break;
case 442996498:
if (name.equals("永仪时刻i")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("A");
break;
case 1:
System.out.println("bingo");
break;
default:
System.out.println("unknown");
}
}
}
循环结构 while /do...while /for、
package com.kuang.struct;
public class Demo4_while {
public static void main(String[] args) {
//输出1~100
int i = 0;
int sum = 0;
while ( i < 100){
i++;
sum += i;
// System.out.println(i);
}
System.out.println(sum);
}
}
package com.kuang.struct;
public class Demo4_dowhile {
public static void main(String[] args) {
int i = 0;
int sum = 0 ;
do{
i++;
sum+=i;
}while(i<100);
System.out.println(sum);
}
}
package com.kuang.struct;
public class Demo4_for {
public static void main(String[] args) {
int i;
int sum;
for (i = 0,sum=0 ; i <= 100 ; i++ )
{
sum += i;
}
System.out.println(sum);
}
}
-
区别:do...while 至少能保证被执行一次,while 则不然
odd 奇数 even 偶数
package com.kuang.struct;
public class Demo5_odd_even_sum {
public static void main(String[] args) {
int oddsum = 0;
int evensum = 0;
for (int i = 0; i <= 100; i++) {
if(i%2 == 0){
evensum += i;
}else if(i%2 == 1)
oddsum += i;
}
System.out.println("oddsum:"+oddsum);
System.out.println("evensum:"+evensum);
}
}
-
print 和println的区别:前置不换行,后者换行
package com.kuang.struct;
public class Demo5_5_1000 {
public static void main(String[] args) {
for (int i = 1; i <= 1000; i++) {
if(i%5 == 0){
//直接去掉ln,变为print,既不是自动换行了
System.out.print(i+"\t");
}
if(i%15 == 0){
System.out.println();
}
}
}
}
-
multiplication 乘法
package com.kuang.struct;
public class Demo5_multiplication {
public static void main(String[] args) {
for (int i = 1 ;i <= 9 ; i++){
for (int j = 1; j <= i ; j++){
System.out.print( j+ "*"+ i+"="+j*i+ "\t");
}
System.out.println();
}
}
}
package com.kuang.struct;
public class Demo5_for_plus {
public static void main(String[] args) {
int[] number = {1,2,3,4,5};
//遍历数组中的元素
// for (int i = 0; i<5 ;i++)
// System.out.println(number[i]);
for(int x:number)
System.out.println(x);
}
}
-
break continue 可以用于任何循环语句的主体部分
- break强行退出,不执行剩余语句。
package com.kuang.struct; public class Demo6_break { public static void main(String[] args) { for (int i = 0; i < 100; i++) { System.out.println(i); if(i == 40) break; } } }- continue 用在循环语句中,用于终止某次循环过程,跳过循环体中未执行的语句,接着执行下一次是否循环的判定。
package com.kuang.struct; public class Demo6_continue { public static void main(String[] args) { for (int i = 0; i < 100; i++) { if (i==6){ System.out.println("surivived!"); continue; } System.out.println(i); } } } -
goto关键字: goto是java的一个保留字,但未在语言中得到使用,带标签的break和continue
标签:后面跟一个冒号的标识符。eg:label:
Java中唯一用到标签就是在循环语句之前,用处:嵌套循环
运算符的优先级:

Java流程控制练习题:打印三角形

package com.kuang.struct;
public class demo7_triangle {
public static void main(String[] args) {
//打印三角形 思路拆分成3部分(我居然还以为是4部分)
//只设置了一个j,实现第2个和第3个for如循环
// System.out.println("Please print the triangle");
for (int i = 0; i < 5; i++) {
for (int j = 5; j > i; j--) {
System.out.print(" ");
}
for (int j = 0; j <= i-1; j++) {
System.out.print("*");
}
for (int j = 0; j < i-1; j++) {
System.out.print("*");
}
System.out.println();
}
}
}

浙公网安备 33010602011771号