一、循环语句(while语句)
1、while语句
初始条件;
while(条件表达式){
功能代码;
}
注意:一般用于不确定终止的情况下
演示代码:
/**
@author sfbaobao
测试while循环语句
*/
public class TestWhereProcess{
public static void main(String[] args){
int sum = 0;
int i =1;
while(i <= 100){
sum += i;
i++;
}
System.out.println(sum);
}
}// out>>>5050
// 一般用于不确定终止次数的情况
2、do while语句
do{
功能代码;
}while(条件表达式);
注意:
- do while跟while语句的区别是do - - - while会先执行功能代码后一次后再进行判断;
- do while语句结尾后有分号;
演示代码:
/**
@author sfbaobao
测试do while语句
*/
public class TestDoWhileProcess{
public static void main(String[] args){
int i = 3;
do{
System.out.println("哈哈哈哈哈啊哈哈~");// 会先执行一次,再进行条件判断
}while(i<3);
}
}// out>>>哈哈哈哈哈啊哈哈~
3、关于输出语句的小细节
int i = 20;
int j = 30;
System.out.println(" " + i + j);// out>>> 2030
System.out.println(i + j + " ");// out>>>50
第一个输出是先i转换为字符串后与” “做字符串拼接,然后j再转换为字符串跟前面的” 20”字符串拼接,最终拼接为” 2030”
第二个输出是先i 与 j做数值相加计算,然后再转换为字符串与” “拼接,最终得到”50 ”
注意:
- 只要表达式中有字符串,最后结果为字符串
- 2、表达式是从左往右计算的
二、循环语句程序案例
1、案例1
/**
@author sfbaobao
1.输出图型
*
**
***
****
*****
******
*/
public class Test01{
public static void main(String[] args){
for(int i=1; i<=6; i++){
for(int j=1; j<=i; j++){
System.out.print("*");
}
System.out.println();
}
}
}
2、案例2
/**
@author sfbaobao
2 输出图型
*******
******
*****
****
***
**
*
*/
public class Test02{
public static void main(String[] args){
for(int i=6; i>=1; i--){
for(int j=1; j<=i; j++){
System.out.print("*");
}
System.out.println();
}
}
}
3、案例3
/**
@author sfbaobao
3、把12题的两个图型合成一个。
*
**
***
****
*****
******
*******
******
*****
****
***
**
*
*/
public class Test03{
public static void main(String[] args){
for(int i=-6; i<=6; i++){
// 调用求绝对值的方法
for(int j=6; j>=(Math.abs(i)); j--){
System.out.print("*");
}
System.out.println();
}
}
}
4、打印菱形
/**
@author sfbaobao
打出如下星星
*
***
*****
*******
*****
***
*
*/
public class Test07{
public static void main(String[] args){
for(int i=-3; i<=3; i++){
for(int k=0; k<Math.abs(i); k++){
System.out.print(" ");
}
for(int j=0; j<7-2*Math.abs(i); j++){
System.out.print("*");
}
System.out.println();
}
}
}
5、打印空心菱形
/**
@author
8、打出以下图形
*
* *
* *
* *
* *
* *
*
*/
public class Test08{
public static void main(String[] args){
for(int i=-3; i<=3; i++){
for(int k=0; k<Math.abs(i); k++){
System.out.print(" ");
}
for(int j=0; j<7-2*Math.abs(i); j++){
if(j == 0 || j==7-2*Math.abs(i)-1){// 每行首尾打出*
System.out.print("*");
}else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
打图案,一般先分析图形的结构,外层循环控制行数,内层循环控制每行的星数,找出他们之间有对应的关系。先打印出星数,再分析空格数,最终得到相应的图案。
6、求素数
/**
@author sfbaobao
9.求300-400之间的素数
*/
public class Test09{
public static void main(String[] args){
boolean flag = true;// 引用标志
for(int i=301; i<400; i++){
for (int j=2; j<=Math.sqrt(i)+1; j++){
if(i % j == 0){
flag = false;// 如果条件成立则不是素数,改变标志
break;
}
}
if(flag){// 根据标志是否改变来判断师傅为素数
System.out.println(i + "是素数!");
}else{
flag = true;
}
}
}
}// out>>>307是素数!311是素数!313是素数!317是素数!331是素数!337是素数!347是素数!349是素数!353是素数!359是素数!367是素数!373是素数!379是素数!383是素数!389是素数!397是素数!
7、求斐波那契数列
/**
@author sfbaobao
15有个人想知道,一年之内一对兔子能繁殖多少对?于是就筑了一道围墙
把一对兔子关在里面。已知一对兔子每个月可以生一对小兔子,而一对兔子
从出生后第3个月起每月生一对小兔子。假如一年内没有发生死亡现象,那么,
一对兔子一年内(12个月)能繁殖成多少对? 分析:兔子的规律为数列
1,1,2,3,5,8,13,21,34,55,89,144……
*/
public class Test15{
public static void main(String[] args){
int start1 = 1;
int start2 = 1;
int result = 2;
for(int i=3; i<=12; i++){
result = start1 + start2;
start1 = start2;// 重新赋值
start2 = result;// 重新赋值
}
System.out.println("兔子一年内(12个月)能繁殖成"+ result +"对");
}
}// out>>>兔子一年内(12个月)能繁殖成144对
8、水仙花数
/**
@author sfbaobao
16. 水仙花数(Narcissistic number)也被称为超完全数字不变数、自恋数、自幂数
水仙花数是指一个 n 位数(n≥3 ),它的每个位上的数字的 n 次幂之和等于它本身
(例如:1^3 + 5^3+ 3^3 = 153),请通过程序找出所有的3位数的水仙花数(穷举法)
*/
public class Test16{
public static void main(String[] args){
for(int i=100; i<1000; i++){
int a = i / 100;
int b = i / 10 % 10;
int c = i % 10;
// Math.pow()返回的是double类型
double result = Math.pow(a, 3) + Math.pow(b, 3) + Math.pow(c, 3);
if(result == i){
System.out.println(i + "是水仙花数!");
}
}
}
}
// out>>>153是水仙花数!;370是水仙花数!;371是水仙花数!;407是水仙花数!
9、完全数
/**
@author sfbaobao
11判断一个数是否是完全数(完数指的是一个数的所有因子数的和等于这个数本身,
例如 6=1+2+3,即6就是完全数)
*/
import java.util.Scanner;
public class Test11{
public static void main(String[] args){
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一个数字:");
int num = scanner.nextInt();
int result = num;
for(int i=1; i<num; i++){
if(num % i == 0){
result = result - i;// 当result=0时,说明该数字为完全数
}
}
if(result == 0){
System.out.println(num + "是完全数!");
}else{
System.out.println(num + "不是完全数!");
}
}
}// 一百以内大的完全数为6,28
三、作业:
1、while与for循环的区别?
一般情况下for循环和while语句循环可以想换转换。
如果已知循环次数一般用for循环较多,如果不知道循环次数一般使用while循环较多。
在一些特定的输出,例如:迭代器输出一般使用while()来判断是否有下一行内容可输出比较方便。
而数组和集合的输出大多是使用for或者foreach语句循环来输出比较方便