Java基础—循环结构(二)—多重循环
前言:利用之前讲的单重循环就已经能解决遇到的很多问题了,但是为什么要使用多重循环呢?当然是,遇到的问题单重循环解决不了,才利用多重循环。
【例如:如何利用之前讲过的循环结构输出下面的图形】
可能第一个可以做,但是第二个就比较费劲了,第三个直接放弃!!!
所以,我们为了更好地解决这类位问题,学习多重循环是必不可少的。
什么是多重循环
重点
像上面所描述的就是多重循环的基本结构,当然也可以3层,4层等等。但是,建议不要超过3层,因为超过3层,程序执行效率会大大降低。
但是,如果我们想跳出循环呢?
前一章我们讲过break,其实还有continue和return
多重循环的例子
一、首先把一开始的两个图形利用多重循环做一下
//平行四边形
for (int i = 0; i <5 ; i++) { //控制行数
for (int k = 0; k <4-i ; k++) { //列-空格
System.out.print(" ");
}
for (int j = 0; j < 5; j++) { //列-*
System.out.print("*");
}
System.out.println();
}
//金字塔
System.out.println("请输入你要几行"); //输出数字金字塔
int n = new Scanner(System.in).nextInt();
for(int i =1;i<=n;i++){ //外层循环控制行数,内层循环控制列
for(int j=1;j<=n-i;j++){ //空格
System.out.print(" ");
}
for(int k=1;k<=2*i-1;k++){ //输出内容
System.out.print("*"); //其实这里的 * 可以改成 i,你们可以试一下哦
}
System.out.print("\n");
}
//圣诞树--其实就只在金子塔的基础上加了奇偶判断
System.out.println("请输入你要几行"); //圣诞树(上面的加入奇偶行判断)
int n = new Scanner(System.in).nextInt();
for(int i =1;i<=n;i++){ //外层循环控制行数
for(int j=1;j<=n-i;j++){ //空格
System.out.print(" ");
}
if(i%2==0){
for(int k=1;k<=2*i-1;k++){ //输出内容
System.out.print("~");
}
}else {
for(int k=1;k<=2*i-1;k++){ //输出内容
System.out.print("*");
}
}
System.out.print("\n");
}
结果如图所示
二、其次把多重循环的经典问题做一下
1.素数
//输出2-100之间的素数
for (int i = 2; i <=100 ; i++) { //外层循环2-100
int tag = 0; //标记是否为素数
for (int j = 2; j <i ; j++) { //内层循环从2到自生
if(i%j==0){ //判断是否为素数
break;
}else {
tag = 1;
}
}
if(tag==1){
System.out.print(i+"\t");
}
}
【提示:这里输出格式有点丑,不急,等我们学完下一章就可以实现按每行多少个进行输出了!】
2. 9*9 乘法表
//9*9乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
另一种格式的 9*9乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= 9-i; j++) {
System.out.print("\t\t"); //为了美观这里格式不要出
}
for (int j = 1; j <= i; j++) {
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();
}
大家可以看看两者之间的差别。
3.回文数
//回文数
System.out.println("请输出一个数,判断它是否为回文数");
int x = new Scanner(System.in).nextInt();
if (x < 0) {
System.out.println(false);
}
int reverse = 0;
int number = x;
while (number != 0) {
int temp = number % 10; //取最后一个数
number /= 10; //去掉最后一位
reverse = reverse * 10; //低位变高位
reverse += temp; //形成相反的数
}
System.out.println(reverse==x); //比较反转前后,相同则是回文数
结果如图显示