循环结构(while/do while/for)
while 循环结构
while(boolean)
{
//循环内容
}
while 循环举例
package struct;
public class whileDemo01 {
public static void main(String[] args) {
int i =0;
while (i<100){
i++;
System.out.println(i);
}
}
}
do while结构格式(注意 do while是先执行,后判断,所以一定不管条件成立不成立,会执行至少一次)
do 你的loop;
while (你的condition);
do while结构举例
计算1到100的总和,并输出结果
package struct;
public class do_whileDemo01 {
public static void main(String[] args) {
int i =0;
int sum=0;
do {sum=sum+i;i++;} while (i<=100);
System.out.println(sum);
}
}
结果显示:
sum_even= 2500
sum_odd= 2550
For循环的通用结构
for(初始化;布尔表达式;更新)
{
//代码语句
}
在IDEA里输入100.for会快速自动生成下面的代码
for (int i = 0; i < 100; i++) {
}
作业一:计算1-100之间 奇数的和 与 偶数的和
public static void main(String[] args) {
int sum_even = 0;
int sum_odd = 0;
int i=0;
for(i=0;i<=100;i++)
if (i%2!=0) sum_even += i;
else sum_odd += i;
System.out.println("sum_even= "+sum_even);
System.out.println("sum_odd= "+sum_odd);
}
作业二:用while或for循环输出1-1000之间能被5整除的数,并且每行输出三个
程序举例
public class testjan05 {
public static void main(String[] args) {
int m=0;
for (int i = 1; i <= 1000; i++) {
if (i%5==0)
{
if (m<2) {
System.out.print(i+"\t");
m=m+1;
//System.out.println("m="+m);
}
else if (m==2){
System.out.print(i);
m=0;
System.out.println();
//System.out.println("m="+m);
}
}
}
}
}
输出结果:
5 10 15
20 25 30
35 40 45
50 55 60
65 70 75
80 85 90
95 100 105
110 115 120
125 130 135
140 145 150
155 160 165
170 175 180
185 190 195
200 205 210
215 220 225
230 235 240
245 250 255
260 265 270
275 280 285
290 295 300
305 310 315
320 325 330
335 340 345
350 355 360
365 370 375
380 385 390
395 400 405
410 415 420
425 430 435
440 445 450
455 460 465
470 475 480
485 490 495
500 505 510
515 520 525
530 535 540
545 550 555
560 565 570
575 580 585
590 595 600
605 610 615
620 625 630
635 640 645
650 655 660
665 670 675
680 685 690
695 700 705
710 715 720
725 730 735
740 745 750
755 760 765
770 775 780
785 790 795
800 805 810
815 820 825
830 835 840
845 850 855
860 865 870
875 880 885
890 895 900
905 910 915
920 925 930
935 940 945
950 955 960
965 970 975
980 985 990
995 1000
Process finished with exit code 0
注意
\t是制表符,相当于tab
\n是换行符
这里用的是 System.out.print
而不是 System.out.println
,因为 System.out.println
是输出自带换行的。
作业三:打印九九乘法表
使用 for循环嵌套
运行结果需要类似这样
1X1=1;
1X2=2;2X2=4;
1X3=3;2X3=6;3X3=9;
1X4=4;2X4=8;3X4=12;4X4=16;
1X5=5;2X5=10;3X5=15;4X5=20;5X5=25;
1X6=6;2X6=12;3X6=18;4X6=24;5X6=30;6X6=36;
1X7=7;2X7=14;3X7=21;4X7=28;5X7=35;6X7=42;7X7=49;
1X8=8;2X8=16;3X8=24;4X8=32;5X8=40;6X8=48;7X8=56;8X8=64;
1X9=9;2X9=18;3X9=27;4X9=36;5X9=45;6X9=54;7X9=63;8X9=72;9X9=81;
public class testjan05 {
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(j+"X"+i+"="+(i*j)+"\t");
if (i==j) System.out.println();
}
}
}
}
for(声明语句:表达式)
{ //代码句子 }
遍历数组元素
例如,将num里面的数字遍历给b
int num[]={10,20,30,40,50};
for (int b:num){
System.out.print(b);
}
声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配。其作用区域限定在循环语句块
将数组的元素依次输出:
public class testjan05 {
public static void main(String[] args) {
int a[]={1,2,3,4,5,6,7,8,9,10};
for (int i = 0; i < 10; i++) {
System.out.print("a["+i+"]="+a[i]+"; ");
}
System.out.println("========>");
for (int m : a) {
System.out.print(m+"\t");
}
}
}
运算结果:
a[0]=1; a[1]=2; a[2]=3; a[3]=4; a[4]=5; a[5]=6; a[6]=7; a[7]=8; a[8]=9; a[9]=10; ========>
1 2 3 4 5 6 7 8 9 10
Process finished with exit code 0
break用于强制退出循环,不执行循环剩余的语句
continue用于终止某次循环,跳过循环中尚未执行的语句,接着进行下一次是否执行循环的判定。
break举例
public class testjan05 {
public static void main(String[] args) {
for (int i = 0; i < 100; i++) {
System.out.println(i);
if (i==30){break;}
}
}
}
输出结果:
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Process finished with exit code 0
continue举例
要求:0-100输出,每行输出10个数:
public class testjan05 {
public static void main(String[] args) {
for (int i = 0; i <= 100; i++) {
if(i!=0 && i%10==0) {
System.out.println(i);
continue;
}
System.out.print(i+"\t");
}
}
}
运行结果:
0 1 2 3 4 5 6 7 8 9 10
11 12 13 14 15 16 17 18 19 20
21 22 23 24 25 26 27 28 29 30
31 32 33 34 35 36 37 38 39 40
41 42 43 44 45 46 47 48 49 50
51 52 53 54 55 56 57 58 59 60
61 62 63 64 65 66 67 68 69 70
71 72 73 74 75 76 77 78 79 80
81 82 83 84 85 86 87 88 89 90
91 92 93 94 95 96 97 98 99 100
Process finished with exit code 0
练习:计算出101-150之间所有的质数(素数),就是除了1和其本身,不能被别人整除的数字。
思路:把被除数从2一直换到(这个数-1),发现除完每一个数,余数都不是零,全都除不尽,这个数就是我们要找的数。
再思考:是否一定要遍历整个N=2-150的范围呢?其实是不是遍历到N/2就可以了?
(【因为N==(N/2)*(2)】2是最小的一个除数,对应的N/2就是这个数字最大的一个除数,如果可以被N/2整除,那么这个数字肯定不是我们要的数,直接排除掉)
继续思考:是不是除数还能再简化?
public class testjan05 {
public static void main(String[] args) {
boolean label=false;
for (int i = 101; i <= 150; i++) {
for (int j = 2; j < i/2; j++) {
if(i%j==0)
{label=false;break;
}
else {label=true;continue;}
}
if (label==true) System.out.print(i+"\t");
}
}
}
运算结果:
101 103 107 109 113 127 131 137 139 149
Process finished with exit code 0
continue/break除了单独使用,也可以在continue/break后面跟一个自定义label,系统见到continue label或者break label,则会即刻搜索程序中label的位置,然后立即跳到那里去。
比如下面的例子label叫做flag_1 和 flag_2。
重要重要重要,label必须在loop条件下才能使用,这包括while,for等
但不包括单一的if else因为它不算loop
实在要在if else里面用,可以用while(true)将if else程序块都包裹起来
public class testjan05 {
public static void main(String[] args) {
boolean label=false;
flag_1: for (int i = 101; i <= 150; i++) {
flag_2: for (int j = 2; j < i/2; j++) {
if(i%j==0)
continue flag_1;
else if (i%j!=0 && j==(i/2)-1 )
System.out.print(i+"\t");
else
continue flag_2;
}
}
}
}
运算结果:
101 103 107 109 113 127 131 137 139 149
Process finished with exit code 0
练习打印出一个三角形,以5行为例,在想要的三角形处打印*或者1,其余地方打印零或者空格
类似这样
000010000
000111000
001111100
011111110
111111111
参考做法
import java.util.Scanner;
public class testjan05{
public static void main(String[] args) {
System.out.println("please enter how many lines u'd like to generate:"+"\t");
Scanner x = new Scanner(System.in);
int l =0;
if(x.hasNextInt()){l=x.nextInt();}
else System.out.println("invalid input;");
for (int i = 0; i < l; i++) {
for (int j = 0; j < 2*l-1; j++) {
if(j<(l-1)-i || j>=l+i)
System.out.print("0");
else
System.out.print("1");
}
System.out.println();
}
}
}
实际输出:
please enter how many lines u'd like to generate:
6
00000100000
00001110000
00011111000
00111111100
01111111110
11111111111