Java流程控制
用户交互Scanner
顺序结构
选择结构
循环结构
break&continue
练习
Scanner对象
通过Scanner类来获取用户的输入
语法
Scanner s = new Scanner (System.in);//system.in输入out输出
通过hasNext()或者hasNextLine()判断是否还有输入的数据
通过next()或者nextLine()获取输入的字符串,其中next不能得到带有空格的字符串,忽略有效字符前遇到的空格,有效字符后的空格座位分隔符或结束符.
nextLine输入一行以Enter为结束符,可以获得空格
Scanner scanner = new Scanner(System.in);
if(scanner.hasnext()){
//会等待用户输入,
String str = scanner.next();
System.out.println("输入内容位",str);
}
//***凡是属于IO流的类如果不关闭就会一直占用资源,用完要关闭,写scanner就先也把关闭写上***
scanner.close;
其他方法
hasNextInt(),nextInt();
应用
输入多个数字,求总和平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出结果
Scanner scanner = new Scanner(System.in);
//和用double标识,可以接收整数小数,后面也用hasnextDouble来判段,非数字停止
double sum = 0;
//输入个数
int m = 0;
while(scanner.hasNextDouble()){
sum+=scanner.nextDouble();
m++;
}
System.out.println(m + "个数的和为"+sum);
System.out.println(m + "个数的平均值为" + sum/m);
scanner.close();
三种结构
顺序结构--java的基本结构就是顺序结构,从上到下
选择结构--if-else,switch (注意程序要严谨,考虑输入越界情况)
switch 语句中的变量类型可以是byte,short,int或者char.
从JDK7开始switch支持字符串String类型,case标签必须为字符串常量或字面量
每个case后要有break,否则会出现case穿透现象匹配后面都执行了
扩展--字符的本质还是数字的
反编译 java---class 用IDEA就可以反编译class文件(直接把class文件丢到IDEA里)
IDEA里打开工程键,可以看到项目输出的class文件保存的位置。
在IDEA里打开文件夹直接打入class文件,文件图标上显示01会自动反编译。可以看到case里原本循环的字符串都对应一个hashcode数字值。
循环结构--while/do...while/for (java5中引入数组的增强型for循环)
while(true)死循环,一直运行用于服务器监听等待客户端连接,定时检查
for循环高效灵活,在执行前就确定了执行次数,在IDEA里直接可以100.for写出循环100次的for循环
for(;;)初始化,判断条件和迭代都可以时空,此时为死循环
应用1:
0到100之间的奇数和,偶数和
int evenSum = 0;
int oodSum = 0;
for(int i = 0; i<=100;i++){
if (i%2 == 0){
evenSum+=i;
}else{
oodSum+=i;
}
}
应用2:
用while或for循环输出1-1000之间能被5整除的数,并且每行输出3个 [%(5*3]
for(int i = 0; i <= 1000; i++){
if(i%5 ==0){
System.out.print(i+"\t");
}
if (i%(5*3)==0){
System.out.println();//或者print("\n")换行
}
}
应用3打印99成分表:
/* 拆分问题1.先打印出第一列
2.外面嵌套循环打印出来多行
3.去掉重复的 i<=j
4.调整样式
*/
for(int j = 1; j <= 9; j++){
for(int i = 1; i <= j; i++){
System.out.print(j + "*" + i + "=" + j*i + "\t")
}
}
增强for循环
jdk5引入,主要用于数组或者集合的增强型for循环,简化for循环为了偷懒,把数组或者集合里的值依次复制给前面的变量进行循环.
int[] numbers ={10m20,30,40,50};
for(int x:numbers){
System.out.println(x);
}
5.break & continue
break强制退出循环,continue跳过当前这次循环,继续下次循环
6.goto
java基本不用,使用label:+continue来完成
打印101-150之间所有质数
outer:for(int i = 101; i < 150; i++){
for (int j = 2; j < i/2; j++){
//如果非质数,跳出循环到label outer处,继续执行下一次循环
if(i%j==0){
continue outer;
}
}
System.out.print(i+ "\t");
7.练习打印一个5行的三角形
思路三角形分成两半打印,然后想象三角形外面有个正方形,先从多到少打印空格,然后在打印*左边的直角三角形。
最后再打印右边的三角形
for(int i = 1; i<=5; i++){
for(int j = 1; j <= 5; 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();
}