黑马程序员——折纸问题、九九乘法表和菱形图案的打印

------ Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------

折纸问题:

/*
 * 	我国最高山峰是珠穆朗玛峰:8848m,我现在有一张足够大的纸张,厚度为:0.01m。
 请问,我折叠多少次,就可以保证厚度不低于珠穆朗玛峰的高度?
 分析:
 为了保证数字方便运算都乘以100
 因为不知道具体的循环次数,所以使用while循环
 定义统计变量count=0,每折叠一次count自加一
 定义纸的初始厚度n=1,每循环一次厚度变为2n,直到纸的厚度不小于884800
 */
public class Paper_folding {
	public static void main(String[] args) {
		int count = 0;
		int n = 1;
		while (n < 884800) {
			n *= 2;
			count++;
		}
		System.out.println("折叠" + count + "次后不低于珠峰的高度,此时的高度为" + n / 100 + "米。");
	}
}

打印九九乘法表

/*
 需求:在控制台输出九九乘法表。

 首先我们写出九九乘法表:
 1*1=1
 1*2=2	2*2=4
 1*3=3	2*3=6	3*3=9
 1*4=4	2*4=8	3*4=12	4*4=16
 ...
 1*9=9	2*9=18	3*9=27	...

 我们先把这个九九乘法表看出是这样的一个形状:
 *
 **
 ***
 ****
 *****
 ******
 *******
 ********
 *********
 分析:
 使用嵌套循环:外循环决定行数,内循环决定列数
 发现列数又等于当前的行数
 */
public class Print99 {
	public static void main(String[] args) {
		//控制输出9行
		for(int y=1;y<=9;y++){
			//每一行的列数等于当前的行号
			for(int x =1;x<=y;x++){
				//先打印出星星图案,然后添加数字
				System.out.print(x+"*"+y+"="+x*y+"\t");
			}
			//每输出一行后换行
			System.out.println();
		}
	}
}
类似问题:用*打印菱形图案

嵌套for的实现

public class Prog19 {
	public static void main(String[] args) {
		int n = 4;
		printStar(n);
	}

	// 打印星星
	private static void printStar(int n) {
		// 打印上半部分
		for (int i = 0; i < n; i++) {
			for (int j = 0; j < 2 * n; j++) {
				if (j < n - i)
					System.out.print(" ");
				if (j >= n - i && j <= n + i)
					System.out.print("*");
			}
			System.out.println();
		}
		// 打印下半部分
		for (int i = 1; i < n; i++) {
			System.out.print(" ");
			for (int j = 0; j < 2 * n - i; j++) {
				if (j < i)
					System.out.print(" ");
				if (j >= i && j < 2 * n - i - 1)
					System.out.print("*");
			}
			System.out.println();
		}
	}

}
单层for的实现

/*
 * 题目:打印出如下图案(菱形)
    *
   *** 
  ***** 
 ******* 
  ***** 
   *** 
    * 
 分析:
 可以理解为先打印一个
    *
   *** 
  ***** 
 *******
 再打印一个
  ***** 
   *** 
    * 
 把中间*最多的行号定义为要打印的行数,即上图要打印的菱形最宽处所在的行号为4
 设要打印的最宽处行号为n,则从上向中间,打印的*个数是2n-1,其他位置打印空格或不打印
 实现:

 用for控制打印的行数为n
 先打印上半部分
 先打印n-t个空格再打印2t-1个*
 再打印下半部分
 每行先打印t个空格,再打印2(n-t)-1个*

 */
public class Print {

	public static void main(String[] args) {
		// 写一个方法实现
		int n = 4;
		printx(n);
	}

	private static void printx(int n) {
		// 先打印上部
		// 控制行数为n
		for (int t = 1; t <= n; t++) {
			// 先打印n-t个空格再打印2t-1个*
			int count1 = 0;
			do {
				if (t == n)
					continue; // 如果是最后一行则不打印空格,跳出此while循环
				System.out.print(" ");
				count1++;
			} while (count1 < n - t);

			int count2 = 0;
			do {
				System.out.print("*");
				count2++;
			} while (count2 < 2 * t - 1);
			System.out.println();
		}
		// 再打印下半部分
		// 控制行数为n-1
		for (int t = 1; t < n; t++) {
			// 每行先打印t个空格,再打印2(n-t)-1个*
			int count1 = 0;
			do {
				System.out.print(" ");
				count1++;
			} while (count1 < t);

			int count2 = 0;
			do {
				System.out.print("*");
				count2++;
			} while (count2 < 2 * (n - t) - 1);
			System.out.println();
		}
	}


你可能感兴趣的:(经典案例)