算法结构
顺序结构
- Java的基本结构就是顺序结构,除非特别指明,否则就按照顺序一句一句执行
- 顺序结构是最简单的算法结构
- 任何一个算法都离不开顺序结构
选择结构
-
if单选择结构
语法:
if(布尔表达式){
如果布尔表达式值为true执行代码
}
package day01.structure; import java.util.Scanner; public class ifDemo1 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容: "); String str = scanner.nextLine(); if(str.equals("Hello")){ System.out.println(str); } System.out.println("End"); scanner.close(); } }
-
if双选择结构
语法:
if(布尔表达式){
如果布尔表达式值为true执行代码
}else{
如果布尔表达式值为false执行代码
}
package day01.structure; import java.util.Scanner; public class ifDemo2 { public static void main(String[] args) { //考试分数大于60为及格,否则不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入考试成绩: "); int score = scanner.nextInt(); if(score>60){ System.out.println("考试及格,分数: "+score); }else{ System.out.println("考试不及格,分数: "+score); } scanner.close(); } }
-
if多选择结构
语法:
if(布尔表达式1){
如果布尔表达式值1为true执行代码
}else if(布尔表达式2){
如果布尔表达式值2为true执行代码
}else if(布尔表达式3){
如果布尔表达式值3为true执行代码
}else{
如果以上布尔表达式都不为true执行代码
}
package day01.structure; import java.util.Scanner; public class ifDemo3 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入考试成绩: "); int score = scanner.nextInt(); if(score==100){ System.out.println("恭喜满分 "); }else if(score < 100 && score >=90){ System.out.println("A级 "); }else if(score < 90 && score >=80){ System.out.println("B级 "); }else if(score < 80 && score >=70){ System.out.println("C级 "); }else if(score < 70 && score >=60){ System.out.println("D级 "); }else if(score < 60 && score >=0){ System.out.println("不及格 "); }else{ System.out.println("成绩不合法"); } scanner.close(); } }
-
嵌套的if结构
语法:
if(布尔表达式1){
// 如果布尔表达式值1为true执行代码
if(布尔表达式2){
//如果布尔表达式值2为true执行代码
}
}
-
switch多选择结构
- 多选择结构还有一个实现方式就是switch case语句。
- switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支。
- switch 语句中的变量类型可以是:
- byte、short, int 或者char.
- 从JavaSE7开始,switch支持字符串String类型了
语法:
switch(expression){
case value:
//语句
break; //可选
case value:
//语句
break; //可选
//你可以有任意数量的case语句
default: //可选
//语句
}
package day01.structure;
public class switchDemo2 {
public static void main(String[] args) {
String name = "狂神";
//JDK7的新特性,表达式结果可以是字符串!!!
//字符的本质还是数字
//反编译 java-----class(字节码文件)------反编译(IDEA)
switch (name){
case "秦疆":
System.out.println("秦疆");
break;
case "狂神":
System.out.println("狂神");
break;
default :
System.out.println("弄啥嘞! ");
}
}
}
反编译的class文件
在项目结构中找到class文件的路径,然后把class文件复制到java文件存在的路径下,再在IDEA中点开,就可以看到完整的反编译文件。
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package day01.structure;
public class switchDemo2 {
public switchDemo2() {
}
public static void main(String[] args) {
String name = "狂神";
byte var3 = -1;
switch(name.hashCode()) {
case 941788:
if (name.equals("狂神")) {
var3 = 1;
}
break;
case 997472:
if (name.equals("秦疆")) {
var3 = 0;
}
}
switch(var3) {
case 0:
System.out.println("秦疆");
break;
case 1:
System.out.println("狂神");
break;
default:
System.out.println("弄啥嘞! ");
}
}
}
循环结构
-
while循环
语法:
while(布尔表达式){
//循环内容
}
package day01.structure; public class whileDemo2 { public static void main(String[] args) { //计算1+2+3+......+100 int i = 0; int sum = 0; while(i<=100){ sum += i; i++; } System.out.println(sum); } }
-
do…while循环
语法
do{
//代码语句
}while(布尔表达式)
package day01.structure; public class DoWhileDemo1 { public static void main(String[] args) { //计算1+2+3+......+100 int i = 0; int sum = 0; do{ sum += i; i++; }while(i<=100); System.out.println(sum); } }
-
while和do-while的区别
while先判断后执行。do-while先执行后判断
do-while总是保证循环体至少会被执行一次,这就是他们的主要差别。
package day01.structure; public class DoWhileDemo2 { 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); } } //输出的结果是============ 0;while里面不会被执行,do-while里执行了一次
-
-
for循环
语法:
for(初始化;布尔表达式;更新){
//代码语句
}
练习1:计算0-100之间的奇数和偶数的和
package day01.structure; public class ForDemo2 { 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){ oddsum+=i; }else{ evensum+=i; } } System.out.println("奇数的和是: "+oddsum); System.out.println("偶数的和是: "+evensum); } }
练习2:用while或者for循环输出1-1000之间能被5整除的数,并且每行输出3个
package day01.structure; public class ForDemo3 { public static void main(String[] args) { int num = 0; for (int i = 1; i <= 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); num+=1; if(num%3==0){ System.out.print("\n");//System.out.println()也可以 } } /* 或者 if(i%(5*3)==0){ System.out.print("\n"); } */ } } }
练习3:打印九九乘法表
package day01.structure; public class ForDemo4 { public static void main(String[] args) { /* 1.先打印第一列 2.把固定的1再用一个循环包起来 3.把重复性去掉 4.调整样式 */ for (int i = 1; i < 10; i++) { for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+"\t"); } System.out.println(); } } }
-
在java5中引入了一种主要用于数组的增强型for循环
-
这里我们先只是见一面,做个了解,之后数组我们重点使用
-
Java5引入了一种主要用于数组或集合的增强型for循环。
-
Java增强for循环语法格式如下:
for(声明语句:表达式) {
//代码句子
}
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循
环语句块,其值与此时数组元素的值相等。 - 表达式:表达式是要访问的数组名,或者是返回值为数组的方法。
package day01.structure; public class ForDemo5 { public static void main(String[] args) { int[] numbers = {10,20,30,40,50}; //定义了一个数组 //遍历数组的元素 for (int x: numbers){ System.out.println(x); } } }
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用域限定在循
-
break continue
-
break在任何循环语句的主体部分,均可用break控制循环的流程。break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
-
continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定。
-
关于goto关键字
goto关键字很早就在程序设计语言中出现。尽管goto仍是Java的一个保留字,但并未在语言中得到正式使用; Java没有goto。然而,在break和continue这两个关键字的身上,我们仍然能看出一些goto的影子——带标签的break和continue.
-
“标签” 是指后面跟一个冒号的标识符,例如: label:
-
对Java来说唯一 用到标签的地方是在循环语句之前。 而在循环之前设置标签的唯一理由是:我们希望在其中嵌套另一个循环,由于break和continue关键字通常只中断当前循环,但若随同标签使用,它们就会中断到存在标签的地方。
package day01.structure; public class LabelDemo { public static void main(String[] args) { //打101- 150之问所有的质数 //质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数 //不建议使用! 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+" "); } } }
-