根据循环条件,重复性的执行某段代码。
有while、do…while、for三种循环语句。
注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素。
循环语句的四个组成部分
初始化部分(init_statement)
循环条件部分(test_exp)
循环体部分(body_statement)
迭代部分(alter_statement)
for循环
class ForTest{
public static void main(String[] args) {
//输出5个Hello World!
for(int i = 1;i <= 5;i++){
System.out.println("Hello World!");
}
//练习
int num = 1;
for(System.out.println("a");num <= 3;System.out.println("c"),num++){
System.out.println("b");
}
//输出结果 abcbcbc
//例题:遍历100以内的偶数
int sum = 0;//100以内偶数的和
int count = 0;//100以内偶数的个数
for(int i = 1;i <= 100;i++){
if(i%2 == 0){
System.out.println(i);
sum += i;
count++;
}
}
System.out.println("100以内偶数的和为:" + sum);
System.out.println("100以内偶数的个数为:" + count);
}
}
class ForTest{
public static void main(String[] args) {
for(int i = 1;i <= 150;i++){
System.out.print(i + " ");
if(i%3 == 0){
System.out.print(" foo");
}
if(i%5 == 0){
System.out.print(" biz");
}
if(i%7 == 0){
System.out.print(" baz");
}
System.out.println();
}
}
}
import java.util.Scanner;
class ForTest{
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入第一个正整数:");
int num1 = scan.nextInt();
System.out.println("请输入第一个正整数:");
int num2 = scan.nextInt();
//先取出两个数的较小值
int min = (num1 <= num2)? num1: num2;
//利用for反向遍历
for(int i = min;i >= 1;i--){
if(num1%i == 0 && num2%i == 0){
System.out.println("两个数的最大公约数为:" + i);
break; //终止程序
}
}
//先取出两个数的较大值
int max = (num1 >= num2)? num1: num2;
//利用for正向遍历
for(int i = max;i <= num1 * num2;i++){
if(i%num1 == 0 && i%num2 == 0){
System.out.println("两个数的最小公倍数为:" + i);
break;//终止程序
}
}
}
}
public class IfTest2 {
public static void main(String[] args) {
for(int i = 99;i <= 999;i++){
int bai = i/100;
int shi = i%100/10;
int ge = i%10;
if(i == bai * bai * bai + shi * shi * shi + ge * ge * ge){
System.out.println(i); //153 370 371 407
}
}
}
}
while循环
public class WhileTest {
public static void main(String[] args) {
//遍历100以内的偶数
int i = 1;
while(i <= 100){
if(i % 2 == 0){
System.out.println(i);
}
i++;
}
//出了while循环以后,仍然可以调用。
System.out.println(i);
}
}
do-while
public class WhileTest {
public static void main(String[] args) {
//遍历100以内的偶数
int i = 1;
int sum = 0;
int count = 0;
do{
if(i % 2 == 0){
System.out.println(i);
sum += i;
count++;
}
i++;
}while(i <= 100);
System.out.println(sum);
System.out.println(count);
int num1 = 10;
while(num1 > 10){
System.out.println("while");
num1--;
}
//do-while至少执行一次循环体
int num2 = 10;
do{
System.out.println("do-while");
num1--;
}while(num1 > 10);
}
}
import java.util.Scanner;
public class WhileTest {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
System.out.println("请输入整数:");
int positiveNumber = 0;
int negativeNumber = 0;
for(;;){//while(true){
int num = scan.nextInt();
if(num > 0){
positiveNumber++;
}
if(num < 0){
negativeNumber++;
}
if(num == 0){
break;
}
}
System.out.println("正数的个数为:" + positiveNumber);
System.out.println("负数的个数为:" + negativeNumber);
}
}
嵌套循环
将一个循环放在另一个循环体内,就形成了嵌套循环。其中, for ,while ,do…while均可以作为外层循环或内层循环。
实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的 循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开 始下一次的循环。
设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
public class ForForTest {
public static void main(String[] args) {
/
for(int j = 1;j <= 4;j++){
for(int i = 1;i <= 6;i++){
System.out.print('*');
}
System.out.println();
}
for(int j = 1;j <= 5;j++){//控制行数
for(int i = 1;i <= j;i++){//控制列数(个数)
System.out.print('*');
}
System.out.println();
}
}
}
for(int j = 1;j <= 5;j++){//控制行数
for(int i = 1;i <= 6-j;i++){//控制列数(个数)
System.out.print('*');
}
System.out.println();
}
public class ForForTest {
public static void main(String[] args) {
for(int i = 1;i < 10;i++){
for(int j = 1;j <= i;j++){
sum = j * i;
System.out.print(j+ "*" + i + "=" + i * j + " ");
}
System.out.println();
}
}
}
public class ForForTest{
public static void main(String[] args) {
long start = System.currentTimeMillis();
boolean isFlag = true;
for(int i = 2;i <= 100000;i++){
//for(int j = 2;j < i;j++)
for(int j = 2;j <= Math.sqrt(i);j++){//从2开始,到这个数-1结束为止,都不能被这个数整除
if(i % j == 0){//从2开始,到这个数-1结束为止,有一个能除尽就返回false
isFlag = false;
break;//提高执行效率
}
}
if(isFlag){
System.out.println(i);
}
isFlag = true;//从第一个非质数4返回false之后if(isFlag)就没机会执行了,因此在此之后要重置isFlag的值。
}
long end = System.currentTimeMillis();
System.out.println(end - start);
}
}
break和continue关键字的使用
import java.util.Scanner;
public class ForForTest{
public static void main(String[] args) {
for(int i = 2;i < 10;i++){
if(i % 4 == 0){
//break;//1 2 3
continue;//1 2 3 5 6 7 9 10
}
System.out.println(i);
}
label:for(int i = 1;i <= 4;i++){
for(int j = 1;j <= 10;j++){
if(j % 4 == 0){
//break;//默认跳出包裹此关键字最近的一层循环。
//continue;
//break label;//指定结束标识的一层循环结构
continue label;//指定结束标识的一层循环结构的当此循环
}
System.out.print(j);
}
System.out.println();
}
}
}
项目一
public class P1Test {
public static void main(String[] args) {
int balance = 1000;
String details = "收支t账户金额t收支金额t说 明n";
boolean isFlag = true;
while(isFlag){
System.out.println("-----------------家庭收支记账软件-----------------n");
System.out.println(" 1 收支明细");
System.out.println(" 2 登记收入");
System.out.println(" 3 登记支出");
System.out.println(" 4 退 出n");
System.out.println(" 请选择(1-4):");
char num = Utility.readMenuSelection();
switch(num){
case'1':
System.out.println("-----------------当前收支明细记录-----------------");
System.out.println(details);
System.out.println("--------------------------------------------------");
break;
case'2':
System.out.println("本次收入金额:");
int income = Utility.readNumber();
System.out.println("本次收入说明:");
String explain = Utility.readString();
balance += income;
details += "收入" + "t" + balance + "t" + income + "t" + explain + "n";
System.out.println("---------------------登记完成---------------------n");
break;
case'3':
System.out.println("本次支出金额:");
int expend = Utility.readNumber();
System.out.println("本次支出说明:");
String explain1 = Utility.readString();
balance -= expend;
details += "支出"+ "t" + balance + "t" + expend + "t" + explain1 + "n";
System.out.println("---------------------登记完成---------------------n");
break;
case'4':
System.out.print("确认是否退出(Y/N):");
char exit = Utility.read/confirm/iSelection();
if(exit == 'Y'){
isFlag = false;
}
}
}
}
}



