Java流程控制
目录注:本系列学习自狂神说(Java):
当前的目标是建造自己的网页!
俺的博客:startsmaple
1.scanner对象
用于实现程序和人之间的交互
Java在JDK5引入的新特性java.util.Scanner 通过Scanner获得用户的输入
工具类java.util
1. 语法
Scanner s = new Scanner(System.in);
package com.starsmaple.scanner;
import java.sql.SQLOutput;
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();
}
}
2. next 和 nextLine()
- next():
- 一定要读取到有效字符后才会结束输入,会跳过空白字符,所以一直输入回车键时程序会等你输入字符
- 不能得到带有空格的字符串
- newxLine():
- 以Enter为结束符,即:返回的是输入回车之前的所有字符
- 可以获得空格
3. 更多的输入判断hasNextInt,Double
package com.starsmaple.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("你输入的不是整数数据!");
}
if(scanner.hasNextFloat()) {
f = scanner.nextFloat();
System.out.println("小数数据:"+f);
}else {
System.out.println("你输入的不是小数数据!");
}
scanner.close();
}
}
4. 应用
package com.starsmaple.scanner;
import java.util.Scanner;
public class Demo05 {
public static void main(String[] args) {
//应用
//输入多个数求和、平均数
Scanner scanner = new Scanner(System.in);
//和
double sum = 0;
//计算输入了多少个数字
int m = 0;
System.out.println("请输入数字");
while(scanner.hasNextDouble()){
double x = scanner.nextDouble();
//
m++;
sum+=x;
}
System.out.println(m + "所有数的和为:" + sum);
System.out.println(m + "所有数的平均数为:" + sum/m);
scanner.close();
}
}
2.结构
1. 顺序结构
即程序自上而下运行的基本算法结构
2. 选择结构
if,else
package com.starsmaple.struct;
import java.util.Scanner;
public class IfDemo03 {
public static void main(String[] args) {
//考试分数大于60及格
Scanner scanner = new Scanner(System.in);
System.out.println("请输入成绩:");
int score = scanner.nextInt();
if(score==100){
System.out.println("nice");
}else if(score>=60 && score<100){
System.out.println("pass");
}else if(score>=0 && score<60){
System.out.println("failed");
}else{
System.out.println("成绩不合法");
}
scanner.close();
}
}
switch
package com.starsmaple.struct;
public class SwithchDemo01 {
public static void main(String[] args) {
char grade = 'C';
switch(grade){
case 'A':
System.out.println("great");
break;
case 'B':
System.out.println("nice");
break;
case 'C':
System.out.println("good");
break;
case 'D':
System.out.println("pass");
break;
case 'E':
System.out.println("failed");
break;
default:
System.out.println("???");
}
}
}
JDK7开始switch开始支持String
package com.starsmaple.struct;
public class SwitchDemo02 {
public static void main(String[] args) {
//从JDK7开始,switch支持String了
//反编译 java---class(字节码文件)-----反编译(idea)
String name = "kuangshen";
switch (name){
case "kuangshen":
System.out.println("kuangshen");
break;
case "qinjiang":
System.out.println("qinjiang");
break;
default:
System.out.println("你弄啥嘞!");
}
//反编译 java---class(字节码文件)-----反编译(idea)
}
}
对其进行反编译
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//
package com.starsmaple.struct;
public class switchDemo02 {
public switchDemo02() {
}
public static void main(String[] args) {
String name = "kuangshen";
byte var3 = -1;
switch(name.hashCode()) {
case 1062649326:
if (name.equals("kuangshen")) {
var3 = 0;
}
break;
case 1318002853:
if (name.equals("qinjiang")) {
var3 = 1;
}
}
switch(var3) {
case 0:
System.out.println("kuangshen");
break;
case 1:
System.out.println("qinjiang");
break;
default:
System.out.println("你弄啥嘞!");
}
}
}
对比可以发现"kuangshen"被替换为1062649326,和对应哈希值有关
idea反编译
- 打开项目结构Crtl+Alt+Shift+S
- 复制项目编译后输出的路径
- 打开该路径,找到该路径下的SwitchDemo02.class
- 打开当前项目文件夹,将上述class文件拷贝到这里
3. 循环结构
while
语法
package com.starsmaple.struct;
public class WhileDemo01 {
public static void main(String[] args) {
//输出1-100;
int i = 0;
while (i<100){
i++;
System.out.println(i);
}
}
}
死循环
package com.starsmaple.struct;
public class WhileDemo02 {
public static void main(String[] args) {
//死循环
while(true)
{
//监听用户内容(实时接收消息
}
}
}
应用
package com.starsmaple.struct;
public class WhileDemo03 {
// 计算1+2+3+。。+100;
public static void main(String[] args) {
int i = 0;
int sum = 0;
while(i<=100){
sum+=i;
i++;
}
System.out.println(sum);
}
}
doWhile
语法
和while区别:就算不满足条件,也要让他至少执行一次
package com.starsmaple.struct;
public class DoWhileDemo01 {
//使用情况,就算不满足条件,也要让他至少执行一次
public static void main(String[] args) {
int i = 0;
int sum = 0;
do{
sum+=i;
i++;
}while(i<=100);
System.out.println(sum);
}
}
应用
package com.starsmaple.struct;
public class DoWhileDemo02 {
public static void main(String[] args) {
int a = 0;
while(a < 0){
System.out.println(a);
a++;
}
System.out.println("================");
do{
System.out.println(a);
a++;
}while(a<0);
}
}
for
语法
package com.starsmaple.struct;
public class ForDemo03 {
public static void main(String[] args) {
//输出1-100之间被5整除的数并且每行输出三个
for (int i = 0; i < 1000; i++) {
if(i%5==0){
System.out.print(i+"\t");
}
if(i%(5*3)==0)
System.out.println();
//或者System.out.print("\n");
//println输出完会换行
}
}
}
快捷键
fori
for (int i = 0; i < ; i++) {
}
10.for
for(int i = 0;i<10;i++){
}
应用---九九乘法表
package com.starsmaple.struct;
//九九乘法表
public class ForDemo04 {
public static void main(String[] args) {
for (int i = 1; i < 10; i++) {
for (int j = 1; j < i+1; j++) {
System.out.print(j+"*"+i+"="+i*j);
System.out.print("\t");
}
System.out.println();
}
}
}
增强for循环
package com.starsmaple.struct;
public class ForDemo05 {
//增强for循环
public static void main(String[] args) {
int[] numbers = {10,20,30,40,50};
for (int x:numbers) {
System.out.println(x);
}
}
}
break
退出循环
package com.starsmaple.struct;
public class BreakDemo {
public static void main(String[] args) {
int i = 0;
while(i<100)
{
i++;
System.out.println(i);
if(i==20)
break;
}
}
}
continue
直接跳过当前,进行下一个判断