名词解释
- 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
- 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
eg:
class ForForTest{
public static void main(String[] args){
//输出******
for (int i = 1;i <= 6 ;i++ ){
System.out.print("*");
}
System.out.println();
System.out.println();
/*输出:
******
******
******
******
*/
for (int j = 1;j <= 4;j++ ){
for (int i = 1;i <= 6 ;i++ ){
System.out.print("*");
}
System.out.println();//换行
}
/*输出:
*
**
***
****
*****
*/
for (int i = 1;i <= 5;i++){//控制行数
for (int j = 1;j <= i;j++){//控制列数
System.out.print("*");
}
System.out.println();//换行
}
/*输出:
****
***
**
*
*/
for (int i = 1;i <= 4;i++){
for (int j = 1;j <= 5 - i;j++){
System.out.print("*");
}
System.out.println();//换行
}
/*输出:
*
**
***
****
*****
****
***
**
*
*/
//略,分两段循环
}
}
例题1:九九乘法表
class NineNineTable{
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:质数的输出
class PrimeNumberTest{
public static void main(String[] args){
boolean isFlag = true;//表示i是否被j除尽,一旦除尽,修改其值。
for (int i = 2;i <= 100;i++){//遍历100以内的自然数
for (int j = 2;j < i;j++){//j:被i去除
if (i % j == 0){//i被j除尽
isFlag = false;
}
}
//
if (isFlag == true){
System.out.println(i);
}
//重置isFlag
isFlag = true;
}
}
}
将要求改为100000以内的质数,并对以上答案进一步优化:
//对PrimeNumberTest.java的优化
class PrimeNumberTest1{
public static void main(String[] args){
boolean isFlag = true;//表示i是否被j除尽,一旦除尽,修改其值。
//获取当前时间距离1970-01-01 00:00:00的毫秒数
long start = System.currentTimeMillis();
for (int i = 2;i <= 100000;i++){//遍历100以内的自然数
//优化二:对本身是质数的自然数最有效。
for (int j = 2;j <= Math.sqrt(i);j++){//j:被i去除
if (i % j == 0){//i被j除尽
isFlag = false;
break;//优化一:只对本身非质数的自然数有效。
}
}
//
if (isFlag == true){
System.out.println(i);
}
//重置isFlag
isFlag = true;
}
//获取当前时间距离1970-01-01 00:00:00的毫秒数
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end - start));
}
}
使用continue进一步优化:
//对PrimeNumberTest.java的优化
class PrimeNumberTest2{
public static void main(String[] args){
long start = System.currentTimeMillis();
label:for (int i = 2;i <= 100;i++){
for (int j = 2;j <= Math.sqrt(i);j++){
if (i % j == 0){
continue label;
}
}
System.out.println(i);
}
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end - start));
}
}
本章完结!