1 package cn.temptation; 2 3 public class Sample01 { 4 public static void main(String[] args) { 5 // 需求:写一万次"我错了!" 6 7 // 方式1、使用CV大法 8 System.out.println("我错了!"); 9 System.out.println("我错了!");10 System.out.println("我错了!");11 System.out.println("我错了!");12 // ...13 14 // 方式2、机械的重复的动作,很傻,考虑让计算机去做,引入了循环的概念15 // 循环怎么理解?16 // 循:按照一定的规律17 // 环:闭合的圆,重复的18 19 // 循环的形式:20 /*21 * 1、while循环22 * 2、do...while循环23 * 3、for循环24 */25 }26 }
1 package cn.temptation; 2 3 public class Sample02 { 4 public static void main(String[] args) { 5 // while循环(当型循环) 6 7 /* 8 * while(条件) { ... } 9 * 当条件满足时,一直做某事,直到条件不满足为止10 * 11 * while结构中的 { ... } 包含的内容称为循环体12 */13 14 // 需求:打印显示"我错了!"这句话3遍15 // 定义次数变量16 int count = 0;17 18 while (count < 3) {19 // 做打印显示的事情20 System.out.println("我错了!");21 22 // 对次数进行统计(即做了一次打印显示,就让次数加1)23 // count = count + 1;24 // count += 1;25 // count++;26 ++count;27 28 System.out.println("当前为第" + count + "次");29 }30 }31 }
1 package cn.temptation; 2 3 public class Sample03 { 4 public static void main(String[] args) { 5 // 需求:使用while循环输出10以内的奇数:1、3、5、7、9 6 int i = 1; 7 8 // 写法1、考虑连续的奇数之间的间隔为2 9 // while (i < 10) {10 // System.out.println(i);11 i = i + 2;12 i += 2;13 // 14 // // Invalid argument to operation ++/--15 i++++;16 (i++)++;17 // 18 // // 非要使用自增19 // i++;20 // i++;21 // }22 23 // 写法2、考虑在while循环中使用自增,但是只对那些和2求余数为1的数字才显示出来24 while (i < 10) {25 // 结合选择结构26 // 判断是否为和2求余数为1的数字27 if (i % 2 == 1) {28 System.out.println(i);29 }30 31 i++;32 }33 }34 }
1 package cn.temptation; 2 3 public class Sample04 { 4 public static void main(String[] args) { 5 // 需求:计算从1+2+3+...+100的和 6 int i = 1; 7 int result = 0; 8 9 // 分步来看1+2+3+...+100这个加法算式10 // result += 1;11 // result += 2;12 // // ...13 // result += 100;14 15 // 因为有一定的规律,且重复的在操作,所以考虑使用循环16 while (i <= 100) {17 System.out.println(i);18 19 result += i;20 21 // i每次加法操作后都要做一下自增22 i++;23 }24 25 System.out.println("1+2+3+...+100的总和为:" + result);26 }27 }
1 package cn.temptation; 2 3 public class Sample05 { 4 public static void main(String[] args) { 5 // 需求:世界最高峰珠穆朗玛峰有8848米,现在有一张很大很大的纸,纸的厚度为0.001米,折叠多少次后可以超过珠峰的高度? 6 7 // 思路:纸每次折叠,厚度都会是上一次厚度的2倍 8 9 // 纸的初始厚度10 int height = 1;11 // 折叠次数12 int count = 0;13 14 while (height <= 8848000) {15 // 纸每次折叠,厚度都会是上一次厚度的2倍16 height = height * 2;17 18 // 折叠一次,折叠次数加119 count++;20 }21 22 System.out.println("折叠了" + count + "次后,就会超过珠峰的高度");23 }24 }
1 package cn.temptation; 2 3 public class Sample06 { 4 public static void main(String[] args) { 5 // 需求:存折中现在有1000块钱,银行的年利息为3.5%,问在银行里放多少年后,连本带利能翻倍? 6 7 // 定义存折的金额 8 double cash = 1000.00; 9 // 定义目标金额10 double total = cash * 2;11 // 定义年数12 int year = 0;13 14 while (cash < total) {15 // 本金和利息记为后一年的本金16 cash = (1 + 0.035) * cash;17 18 year++;19 }20 21 System.out.println("在银行里放" + year + "年后,连本带利能翻倍");22 }23 }
1 package cn.temptation; 2 3 public class Sample07 { 4 public static void main(String[] args) { 5 // while循环的要点:条件放上头,控制里面走 6 int i = 1; 7 8 while (i < 5) { 9 i++; // 显示:2、3、4、510 System.out.println(i);11 // i++; // 显示:1、2、3、412 }13 14 // 循环编写时,特别要注意循(按照一定的规律)的规律的归纳总结,这是写好循环的关键15 }16 }
1 package cn.temptation; 2 3 public class Sample08 { 4 public static void main(String[] args) { 5 // 需求:统计100 ~ 999之间的水仙花数并计算有多少个? 6 7 // 规则:以三位数字为例,数字的值 = (百位上的数字 * 百位上的数字 * 百位上的数字) 8 // + (十位上的数字 * 十位上的数字 * 十位上的数字) 9 // + (个位上的数字 * 个位上的数字 * 个位上的数字),则称为是一个水仙花数10 // 153 = 1 * 1 * 1 + 5 * 5 * 5 + 3 * 3 * 311 12 // 定义数字变量并赋值13 int number = 100;14 // 定义统计个数用的变量15 int count = 0;16 17 while (number <= 999) {18 // 关键点:如何获取百位上的数字、十位上的数字、个位上的数字?19 // 个位上的数字20 int i = number / 1 % 10;21 // 十位上的数字22 int j = number / 10 % 10;23 // 百位上的数字24 int k = number / 100 % 10;25 26 // 根据上面的分析,得到通用的公式,注意求余的10表示的是十进制的含义27 28 // 规则:以三位数字为例,数字的值 = (百位上的数字 * 百位上的数字 * 百位上的数字)29 // + (十位上的数字 * 十位上的数字 * 十位上的数字)30 // + (个位上的数字 * 个位上的数字 * 个位上的数字),则称为是一个水仙花数31 // 结合选择结构进行判定32 if (number == i * i * i + j * j * j + k * k *k) {33 System.out.println(number);34 // 统计用的变量需要自增35 count++;36 }37 38 // 统计的范围从100~999,所以数字需要自增39 number++;40 }41 42 System.out.println("【100~999】之间的水仙花数有:" + count + "个");43 }44 }
1 package cn.temptation; 2 3 public class Sample09 { 4 public static void main(String[] args) { 5 // 需求:大蜀山上有一段台阶,级数不知道,但是知道如果两个台阶一起跨,还剩1个台阶; 6 // 如果三个台阶一起跨,还剩2个台阶;如果四个台阶一起跨,还剩3个台阶; 7 // 如果五个台阶一起跨,还剩4个台阶;如果六个台阶一起跨,还剩5个台阶; 8 // 如果七个台阶一起跨,一个台阶都不剩。 9 // 问:这段台阶最少有多少级?10 11 // 定义台阶变量12 int step = 1;13 14 // 思路:运用穷举思想,一个数字一个数字的来尝试是否满足规则15 16 // 写法1、当台阶数不满足规则的,需要做自增;当找到第1个满足规则的台阶数时,就是最少的满足规则的台阶级数,不用自增了17 // while (!((step % 2 == 1) && (step % 3 == 2) && (step % 4 == 3) && (step % 5 == 4) && (step % 6 == 5) && (step % 7 == 0))) {18 // step++;19 // }20 // 21 // System.out.println("这段台阶最少有" + step + "级");22 23 // 写法2、构造一个死循环,不断的做自增,在循环体中判断是否满足规则,当找到第1个满足规则的数字时,终止循环跳出24 // while死循环的结构25 // while (true) {26 // System.out.println("死循环了么?");27 // }28 29 boolean flag = true;30 while (flag) {31 // 对台阶级数进行规则判断32 if ((step % 2 == 1) && (step % 3 == 2) && (step % 4 == 3) && (step % 5 == 4) && (step % 6 == 5) && (step % 7 == 0)) {33 System.out.println("这段台阶最少有" + step + "级");34 flag = false;35 }36 37 step++;38 }39 }40 }
1 package cn.temptation; 2 3 public class Sample10 { 4 public static void main(String[] args) { 5 // 需求:百钱百鸡问题:母鸡一只5元,公鸡一只3元,小鸡三只1元,有100元,如何买到100只鸡?母鸡多少只?公鸡多少只?小鸡多少只?(母鸡、公鸡、小鸡都有) 6 7 // 思路: 8 // 从需求中得到一些等式 9 // 母鸡数量 + 公鸡数量 + 小鸡数量 = 10010 // 母鸡单价 * 母鸡数量 + 公鸡单价 * 公鸡数量 + 小鸡单价 * 小鸡数量 = 10011 // 小鸡数量是3的倍数12 13 // 运用"穷举法"14 // 如果买1只母鸡,再买1只公鸡,还能买多少只小鸡15 // 如果买1只母鸡,再买2只公鸡,还能买多少只小鸡16 // ...17 // 如果买2只母鸡,再买1只公鸡,还能买多少只小鸡18 // 如果买2只母鸡,再买2只公鸡,还能买多少只小鸡19 // ...20 21 // 母鸡数量22 int i = 0;23 // 公鸡数量24 int j = 0;25 // 小鸡数量26 int k = 0;27 28 System.out.println("计算百钱百鸡问题的结果:");29 30 // while循环的嵌套31 // 注意:使用while循环的嵌套时,格外要注意内层while循环的循环条件;同时也要考虑到while循环的执行效率32 33 // 下句语句其实效率不高,可以改进34 // while (i < 100) { // 统计买母鸡的只数35 while (i < 20) { // 统计买母鸡的只数36 // 注意:必须在后一次的内层循环之前,把变量j的值重新赋值一下,否则这个变量j的值还是上一次内层循环结束时得到的那个值37 j = 0;38 39 // 下句语句其实效率不高,可以改进40 // while (j < 100) { // 统计买公鸡的只数41 while (j < 33) { // 统计买公鸡的只数42 // 可以根据母鸡数量 和 公鸡数量 就可以得到小鸡数量43 k = 100 - i - j;44 45 // 根据思路分析中列出的等式46 if ((5 * i + 3 * j + k / 3 == 100) && (k % 3 == 0) && (i != 0) && (j != 0) && (k != 0)) {47 System.out.println("母鸡为:" + i + "只,公鸡为:" + j + "只,小鸡为:" + k + "只");48 }49 50 j++;51 }52 i++;53 }54 55 }56 }
1 package cn.temptation; 2 3 public class Sample11 { 4 public static void main(String[] args) { 5 // do...while循环(直到型循环) 6 // 格式: 7 // do { 8 // System.out.println("直到型循环"); 9 // } while (condition);10 11 int i = 1;12 13 // do {14 // System.out.println(i);15 // i++;16 // } while (i < 4);17 18 // while循环 和 do...while循环的区别:19 // 1、可以设置断点,结合调试分析20 // while循环的条件写在最上面,一上来就先判断条件是否满足,满足了才会进入循环体执行语句21 // do...while循环的条件写在最后,一上来就先进入循环体并执行循环体中的语句,再判断循环条件是否满足,满足的话继续循环22 // 注意:do...while循环在相同的条件(condition)不成立的情况下会比while循环多执行一次23 // 2、while结构就是一个语句块;do...while结构后必须要有一个分号,否则就产生语法错误24 25 // do...while循环在相同的条件(condition)成立的情况下和while循环的执行次数相同26 while (i < 3) {27 System.out.println(i);28 i++;29 }30 31 do {32 System.out.println(i);33 i++;34 } while (i < 3);35 36 // do...while循环在相同的条件(condition)不成立的情况下会比while循环多执行一次37 while (i < 1) {38 System.out.println(i);39 i++;40 }41 42 do {43 System.out.println(i);44 i++;45 } while (i < 1);46 }47 }
1 package cn.temptation; 2 3 public class Sample12 { 4 public static void main(String[] args) { 5 // 需求:使用do...while循环输出1~100之间的数字 6 // 需求:使用do...while循环计算1+2+...+100和 7 int i = 1; 8 9 do {10 System.out.println(i);11 i++;12 } while (i <= 100);13 14 // 因为此时i == 101,所以需要把i进行重置15 i = 1;16 int sum = 0;17 18 do {19 sum += i;20 i++;21 } while (i <= 100);22 23 System.out.println("1+2+...+100=" + sum);24 }25 }
1 package cn.temptation; 2 3 public class Sample13 { 4 public static void main(String[] args) { 5 // 需求:使用do...while循环列出1~100之间所有的奇数 6 int i = 1; 7 8 // 写法1、奇数的间隔为2 9 // do {10 // System.out.println(i);11 // i += 2;12 // } while (i <= 100);13 14 // 写法2、奇数是和2求余数为1的数字15 do {16 if (i % 2 == 1) {17 System.out.println(i);18 }19 20 i++;21 } while (i <= 100);22 }23 }