Java流程控制
用户交互Scanner
Java提供了一个工具类,可以获取用户的输入。Java.util.Scanner是Java5的新特征,我们可以通过Scanner类来获取用户的输入。
基本语法:
Scanner s = new Scanner(System.in);
通过Scanner类的next()与nextLine()方法获取输入字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判断是否还有输入的数据。
next()方法
package com.allen.scanner;
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用next方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
//使用next方式接受
String str = scanner.next();
System.out.println("输出的内容为:"+str);
}
//凡是属于IO流的类如果不关闭则会一直占用资源,要养成好习惯用完就关掉
scanner.close();
}
}
nextLine()方法
package com.allen.scanner;
import java.util.Scanner;
public class Demo02 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
System.out.println("使用nextLine方式接收:");
//判断用户有没有输入字符串
if(scanner.hasNextLine()){
String str = scanner.nextLine();
System.out.println("输出内容为:"+str);
}
scanner.close();
}
}
package com.allen.scanner;
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
//创建一个扫描器对象,用于接收键盘数据
Scanner scanner = new Scanner(System.in);
//接收数据
System.out.println("使用nextLine方式接收:");
//将数据存到字符串
String str = scanner.nextLine();
//打印收到的数据
System.out.println("输出内容为:"+str);
//关闭
scanner.close();
}
}
//在没有循环的时候没必要用if判断是否还有后续
二者区别:
next():
- 一定要读取到有效字符后才可以结束输入
- 对输入有效字符之前遇到的空白,next()方法会自动将其去掉
- 只有输入有效字符后才将其后面输入的空白作为分隔符或者结束符
- next()不能得到带有空格的字符串
nextLine():
- 以Enter为结束符,也就是说nextLine()方法返回的是输入回车之前的所有字符
- 可以获得空白
输入整数和浮点数类型时:
package com.allen.scanner;
import java.util.Scanner;
public class Demo04 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
//从键盘接收数据
int i = 0;
float f = 0.0f;
//输入整数
System.out.println("请输入整数:");
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("整数数据为:"+i);
}
else{
System.out.println("输入的数据不是整数!");
}
//输入小数
System.out.println("请输入浮点数:");
if(scanner.hasNextFloat()){
f = scanner.nextFloat();
System.out.println("浮点数数据为:"+f);
}
else{
System.out.println("输入的数据不是浮点数!");
}
scanner.close();
}
}
案例使用:
要求可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
package com.allen.scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//要求可以输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数据:");
//和
double sum = 0;
//数字个数
int m = 0;
//通过循环判断是否还有输入,并在里面对每一次输入进行求和和统计
while (scanner.hasNextDouble()){
double x = scanner.nextDouble();
System.out.println("你输入了第"+m+"个数据"+"当前结果sum="+sum);
m++;
sum+=x;
}
System.out.println(m+"个数的和为:"+sum);
System.out.println(m+"个数的平均值为:"+sum/m);
scanner.close();
}
}
顺序结构
Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行。
顺序结构是最简单的算法结构
语句与语句之间,是按照从上到下的顺序进行的,它是由若干个依次执行的处理步骤组成,它是任何一个算法都离不开得基本算法结构。
package com.allen.struct;
public class ShunXuDemo01 {
public static void main(String[] args) {
//顺序结构
System.out.println("hello0");
System.out.println("hello1");
System.out.println("hello2");
System.out.println("hello3");
System.out.println("hello4");
System.out.println("hello5");
}
}
选择结构
if单选择结构
package com.allen.struct;
import java.util.Scanner;
public class IfDemo01 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入字符串内容:");
String s = scanner.nextLine();
//equals:判断字符串是否相等
if (s.equals("hello")){
System.out.println(s);
}
System.out.println("End");
scanner.close();
}
}
if双选择结构
一个公司收购一款软件,成功了,给人支付一百万,失败了,自己找人开发
package com.allen.struct;
import java.util.Scanner;
public class IfDemo02 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你要用多少万元收购:");
int i = scanner.nextInt();
if (i>=100){
System.out.println("收购成功");
}
else{
System.out.println("收购失败,准备自己开发");
}
scanner.close();
}
}
if多选择结构
package com.allen.struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("请输入您的成绩:");
int i = scanner.nextInt();
if (i>=90){
System.out.println("A");
}
else if (i>=80){
System.out.println("B");
}
else if (i>=70){
System.out.println("C");
}
else if (i>=60){
System.out.println("D");
}
else if (i<60 && i>=0){
System.out.println("E");
}
else {
System.out.println("输入错误");
}
scanner.close();
}
}
嵌套的if结构
switch多选择结构
switch case 语句判断某变量与一系列值中某个值是否相等,每个值称为一个分支
switch语句中的变量类型可以是:
- byte、short、int或者char
- 从Java7开始switch支持字符串string类型了
- 同时case标签必须为字符串常量或字面量
case穿透:如果在case中没有break,则若匹配这个case在执行完这个case中的语句之后会把后面的其他case中的语句都执行
char grade = 'C';
switch (grade){
case 'A':
System.out.println("优秀");
break;
case 'B':
System.out.println("良好");
case 'C':
System.out.println("及格");
case 'D':
System.out.println("不及格");
case 'E':
System.out.println("差劲");
default:
System.out.println("未知等级");
}
字符串比较
package com.allen.struct;
import java.util.Scanner;
public class SwitchDemo02 {
public static void main(String[] args) {
//String name = "魏博伦";
//字符的本质还是数字
//反编译 java编译成class文件(字节码文件),想要看懂要运用IDEA反编译成java文件
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的名字:");
String name = scanner.nextLine();
switch (name){
case "孔子":
System.out.println("孔子");
break;
case "老子":
System.out.println("老子");
break;
case "阿伦":
System.out.println("阿伦");
break;
default:
System.out.println("不知所云");
}
scanner.close();
}
}
循环结构
while循环
只要判断条件为true,循环就会一直执行下去
大多数情况下,是要求循环停止的,所以需要一个让表达式失效的方式来结束循环
package com.allen.struct;
public class WhileDemo01 {
public static void main(String[] args) {
//计算1-100的加法
int i = 0;
int sum = 0;
while(i<=100){
sum+=i;
i++;
}
System.out.println("1到100总和是:"+sum);
}
}
do……while循环
while循环先判断后执行,do-while循环先执行后判断
do-while循环总保证循环体至少被执行依次
int a = 0;
int sum1 = 0;
do {
sum1+=a;
a++;
}while(a<=100);
System.out.println("do-while循环中1到100总和是:"+sum1);
for循环
在IDEA中输入100.for可以自动生成一个for循环
计算0-100之间奇数和偶数的和
package com.allen.struct;
public class ForDemo01 {
public static void main(String[] args) {
//计算0-100之间奇数和偶数的和
int oddSum = 0;//奇数的和
int evenSum = 0;//偶数的和
for (int i = 0; i <= 100; i++) {
if(i%2 == 0) {
evenSum += i;
}else{
oddSum+=i;
}
}
System.out.println("奇数的和是:"+oddSum);
System.out.println("偶数的和是:"+evenSum);
}
}
用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个
println输出完会换行
print输出完不会换行
package com.allen.struct;
public class ForDemo02 {
public static void main(String[] args) {
//用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个
for (int i = 0; i < 1000; i++) {
if (i%5 == 0){
System.out.print(i+"\t");
}
if (i%(5*3) == 0) {//i模5是可以被5整除,再模3是每三个为一组进行换行
//换行
System.out.println();
//System.out.print("\n");
}
}
}
}
打印九九乘法表
package com.allen.struct;
public class ForDemo03 {
public static void main(String[] args) {
//打印九九乘法表
for (int j = 0; j < 9; j++) {
for (int i = 1;i<=j;i++){
System.out.print(j+"*"+i+" = "+(j*i)+"\t");
}
System.out.println();
}
}
}
在Java5中引入了一种主要用于数组的增强型for循环
在数组中会有重点使用,主要是用来遍历数组和一些集合对象
for(声明语句 : 表达式){
循环体
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型相匹配,其作用域限定在循环语句块,其值与此时数组元素值相等
表达式:表达式是要访问的数组名,或者是返回值为数组的方法
package com.allen.struct;
public class ForDemo05 {
public static void main(String[] args) {
//定义一个数组//
int[] numbers = {10,20,30,40,50,60};
for (int i = 0; i < 5; i++) {
System.out.println(numbers[i]);
}
System.out.println("=========================");
for(int x:numbers){
System.out.println(x);
}
}
}
break & continue
break在任何循环语句的主体部分,均可以用break控制循环的流程。break用于强行退出循环,不执行循环中的剩余语句。(break在switch语句中使用)
package com.allen.struct;
public class BreakDemo {
public static void main(String[] args) {
int i = 0;
while (i<100){
i++;
System.out.println(i);
if (i == 30){
break;
}
}
}
}
continue语句用在循环语句体中,用于中止某次循环过程,及跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
package com.allen.struct;
public class ContinueDemo {
public static void main(String[] args) {
int i = 0;
while(i<100){
i++;
if(i%10 == 0){
System.out.println();
continue;
}
System.out.print(i+"\t");
}
}
}
goto关键字
- java中没有goto语句,但是带标签的break和continue仍然可以看到goto语句的影子
- 标签是指后面跟一个冒号的标识符,例如:label:
- 对java来说唯一用到标签的地方是在循环语句之前,而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用它们就会中断到存在标签的地方
package com.allen.struct;
public class LableDemo {
public static void main(String[] args) {
//打印101-150之间的质数
int count = 0;
outer:for (int i = 101;i<150;i++){
for (int j = 2;j<i/2;j++){
//一个数的因数一定小于他的一半
if(i % j == 0){
continue outer;
}
}
System.out.print(i+"\t");
}
}
}
练习
打印三角形
package com.allen.struct;
public class TsetDemo {
public static void main(String[] args) {
for (int i = 1;i<=5;i++){
for (int j = 5;j>=i;j--){
System.out.print(" ");
}
for (int j = 1;j<=i;j++){
System.out.print("*");
}
for (int j = 1;j<=i;j++){
System.out.print("*");
}
System.out.println();
}
}
}
标签:Java,scanner,05,流程,System,Scanner,println,public,out
From: https://www.cnblogs.com/bolunwei/p/17056682.html