顺序结构
程序从上到下逐行的执行。
分支结构
if-else语句
if-else可以嵌套使用
①单分支if结构
public class test {
public static void main(String[] args) {
int i = 1;
if(i == 1) {
System.out.println(i);
}
}
}//只有当i=1时才会输出
②双分支if结构
public class test {
public static void main(String[] args) {
//判断一个数组是奇数还是偶数,输出结果
int i = 3;
if(i % 2 == 0) {
System.out.println("偶数");
}else {
System.out.println("奇数");
}
}
}
③多分支if结构
public class test {
public static void main(String[] args) {
//如果是数字1,输出星期一,2输出星期二,3输出星期三
//如果不是1,2,3中的任何一个数字,就输出不知道星期几
int i = 4;
if(i == 1) {
System.out.println("星期一");
}else if(i == 2){
System.out.println("星期二");
}else if(i == 3){
System.out.println("星期三");
}else {
System.out.println("不知道星期几");
}
}
}
switch语句
switch (表达式) { //表达式:可以是byte,short,int,char JDK5以后可以是枚举 JDK7以后可以是字符串
case 值1:{ //case:后面的值就是要和表达式进行比较的值
语句块1; [break]; // break:表示程序到这里中断,跳出switch语句
}
case 值2:{
语句块2; [break];
}
… … …
case 值n:{
语句块n; [break];
}
[default:{
语句块n+1; //default:如果所有的情况都不匹配,就执行这里,相当于if语句中的else
}]
}
注意事项:
A:case后面只能是常量,不能是变量,而且,多个case后面的值不能出现相同的
B:default可以省略吗?
可以省略,但是不建议,因为它的作用是对不正确的情况给出提示。
C:break可以省略吗?
可以省略,但是结果可能不是我们想要的。
会出现一个现象:case穿透。
最终我们建议不要省略
D:default一定要在最后吗?
不是,可以在任意位置。但是建议在最后。
E:switch语句的结束条件
a:遇到break就结束了
b:执行到末尾就结束了
例子:
public class test {
public static void main(String[] args) {
//如果是数字1,输出星期一,2输出星期二,3输出星期三
//如果不是1,2,3中的任何一个数字,就输出不知道星期几
int i = 3;
switch(i) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
default:
System.out.println("不知道星期几");
break;
}
}
}
使用switch把小写类型的char型转为大写。只转换a,b,c,d,e.其他的输出"other"。
public class test {
public static void main(String[] args) {
char i = 'a';
switch(i) {
case 'a':
System.out.println("A");
break;
case 'b':
System.out.println("B");
break;
case 'c':
System.out.println("C");
break;
case 'd':
System.out.println("D");
break;
case 'e':
System.out.println("E");
break;
default:
System.out.println("other");
break;
}
}
}
循环结构
在某些条件满足的情况下,反复执行特定代码功能
三种循环的区别
a:do...while循环至少执行一次循环体
b:for和while必须先判断条件是否是true,然后后才能决定是否执行循环体
c:for适合于一个范围的判断
while适合次数不明确的
for循环
格式:
for(初始化语句;判断条件语句;控制条件语句){
循环体语句;
}
例子1:连续输出5次hello world
public class test {
public static void main(String[] args) {
for(int i=0;i<5;i++) {
System.out.println("hello world");
}
}
}
例子2:编写程序,从1循环到150并在每行打印一个值,另外在每个3的倍数行上打印输出"foo",在每个5的倍数行上打印输出"biz",在每个7的倍数行上打印输出"baz"。
样式如下:
… …
自己写的代码如下:
public class test {
public static void main(String[] args) {
for(int i=1;i<=150;i++) {
System.out.print(i);
if(i % 3 == 0 && i % 5 == 0 && i % 7 == 0) {
System.out.println(" foo"+" biz"+" baz");
}
else if(i % 3 == 0 && i % 5 == 0) {
System.out.println(" foo"+" biz");
}
else if(i % 3 == 0 && i % 7 == 0) {
System.out.println(" foo"+" baz");
}
else if(i % 5 == 0 && i % 7 == 0) {
System.out.println(" biz"+" baz");
}
else if(i % 3 == 0) {
System.out.println(" foo");
}
else if(i % 5 == 0) {
System.out.println(" biz");
}
else if(i % 7 == 0) {
System.out.println(" baz");
}
else {
System.out.print("\n");
}
}
}
}
网课上老师讲的代码如下:
灵活的运用了字符串的拼接,减少了代码的复杂度
public class test {
public static void main(String[] args) {
for(int i=1;i<=150;i++) {
String str = "";
str += i;
if(i % 3 == 0) {
str += " foo";
}
if(i % 5 == 0) {
str += " biz";
}
if(i % 7 == 0) {
str += " baz";
}
System.out.println(str);
}
}
}
例子3:打印1~100之间所有奇数的和。
public class test {
public static void main(String[] args) {
int m=0;
for(int i=1;i<=100;i++) {
if(i % 2 == 1) {
m += i;
}
}
System.out.println(m);
}
}
结果如下:
例子4:打印1~100之间所有是7的倍数的整数的个数及总和。
public class test {
public static void main(String[] args) {
int m=0;
int n=0;
for(int i=1;i<=100;i++) {
if(i % 7 == 0) {
m ++;
n += i;
}
}
System.out.println("个数:"+m);
System.out.println("总和:"+n);
}
}
结果如下:
例子5:输出所有的水仙花数,所谓水仙花数是指一个三位数,其各个位上数字立方和等于其本身。
例如:153=1 * 1 * 1 + 3 * 3 * 3 + 5 * 5 * 5
public class test {
public static void main(String[] args) {
for(int i=100;i<1000;i++) {
int m=i/100; //百位
int n=(i/10)%10; //十位
int t=i%10; //个位
if(i == m*m*m + n*n*n + t*t*t) {
System.out.println(i);
}
}
}
}
结果如下:
while循环
while(判断条件语句) {
循环体语句;
}
例1:循环输出1~100的数字
public class test {
public static void main(String[] args) {
int i = 1;
while(i<=100)
{
System.out.println(i);
i++;
}
}
}
do/while循环
例1:循环输出1~100的数字
public class test {
public static void main(String[] args) {
int i = 1;
do {
System.out.println(i);
i++;
}while(i <=100);
}
}
练习1、打印1~100之间所有偶数的和。
用for循环写
public class test {
public static void main(String[] args) {
int m=0;
for(int i=1;i<=100;i++) {
if(i % 2 == 0) {
m += i;
}
}
System.out.println(m);
}
}
结果如下:
用while循环写:
public class test {
public static void main(String[] args) {
int m=0;
int i=1;
while(i<=100) {
if(i % 2 == 0) {
m += i;
}
i++;
}
System.out.println(m);
}
}
for循环的无限循环:
for(;;){}
while循环的无限循环
while(true){}
嵌套循环
例1、输出九九乘法表
public class test {
public static void main(String[] args) {
for(int i = 1; i <= 9; i++) {
for(int j = 1; j <= i; j++) {
System.out.print(i + " * " + j + " = " + (i * j) + " ");
}
System.out.println();
}
}
}
例2、输出1~100之间的所有质数
思路:比如7,用7循环1到之间的数分别取模,看能整除的次数,如果整除的次数只有2次,那可以判断是一个质数。
public class test {
public static void main(String[] args) {
for(int i = 1; i <= 100; i++) {
int k=0; //整除的次数
for(int j = 1; j <= i; j++) {
if(i % j == 0) {
k++;
}
}
if(k == 2) {
System.out.print(i+" ");
}
}
}
}
特殊流程控制语句
break语句
break是终止(跳出)当前所在的循环
以下两个例子来理解:
public class test {
public static void main(String[] args) {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 8; j++) {
if(j >2) {
break;
}
System.out.print(j+" ");
}
}
}
}
此时输出情况为3次0 1 2
public class test {
public static void main(String[] args) {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 8; j++) {
if(j >2) {
break;
}
System.out.print(j+" ");
}
break;
}
}
}
此时仅输出 0 1 2
使用break语句输出10以内的素数
public class test {
public static void main(String[] args) {
for(int i = 2; i < 10; i++) {
int j;
for(j = 2; j < i; j++) {
if(i % j == 0) {
break;
}
}
if(j >= i) {
System.out.print(i+" ");
}
}
}
}
continue语句
continue是结束当前这次循环,直接进入下一次循环
结合以下例子来理解
public class test {
public static void main(String[] args) {
for(int i = 0; i < 9; i++) {
if(i % 2 == 0) {
continue;
}
System.out.print(i+" ");
}
}
}
return语句
return用于结束方法,一旦遇到return,程序就不会在继续往后执行。
break只能跳出当前循环(单层),而return可以跳出双层循环。
以下例子对比break的第一个例子
public class test {
public static void main(String[] args) {
for(int i = 0; i < 3; i++) {
for(int j = 0; j < 8; j++) {
if(j >2) {
return;
}
System.out.print(j+" ");
}
}
}
}