20.java中的while循环  do while 语句

需求:需要打印一行字符串"hello gzitcast",100次

就需要将该语句打印100遍System.out.println("hello gzitcast");

那么如何解决该问题?

   Java提供个一个称之为循环的结构,用来控制一个操作的重复执行。

int count = 0;
while (count < 100) {
            System.out.println("hello gzitcast");
            count++;
}
System.out.println("over");

变量count初始化值为0,循环检查count<100 是否为true,如果为true执行循环体(while后{}之间的语句),输出"hello gzitcast"语句,然后count自增一,重复循环,直到count是100时,也就是count<100为false时,循环停止。执行循环之后的下一条语句。

   Java提供了三种类型的循环语句:while循环,do-while循环和for循环。

1、while语句格式:
while(条件表达式)
{
    执行语句;
}

定义需求: 想要打印5次helloworld

public static void main(String[] args) {
        System.out.println("hello world");
        System.out.println("hello world");
        System.out.println("hello world");
        System.out.println("hello world");
        System.out.println("hello world");
}

2、

public static void main(String[] args) {
        int x = 0;
        while (x < 5) {
            System.out.println("hello java ");
        }
}

如果是在dos里编译和运行,是不会停止,除非系统死机。需要ctrl+c来结束

这就是真循环或者死循环。因为x<5 永远为真。

public static void main(String[] args) {
        int x = 0;
        while (x < 5) {
            System.out.println("hello java ");
            x++;
        }
    }

让x自增,那么就会有不满足条件的时候。循环就会结束。

练习:想要打印出1-100之间的奇数

public static void main(String[] args) {
        int x = 1;
        while (x < 100) {
            System.out.println(x);
            x = x + 2;
        }
    }
public static void main(String[] args){
        int x=1;
        while(x<100){
            
            if(x%2!=0){
                System.out.print(x);
            }
            x++;
        }
        System.out.println();        
    }

练习2:计算1+2+3+4+5+6+7+8+9 的值

int sum = 0;
int i = 1;
while (i < 10) {
    sum = sum + i;
    i++;
}
system.out.println(sum);

注意:要精确控制循环的次数。常犯错误是是循环多执行一次或者少执行一次。

例如会执行101次,想要执行100次,要么是count初始值为1,然后count<=100

要么是count初始值为0,coung<100

int count = 0;
        while (count <=100) {
            System.out.println("hello gzitcast");
            count++;
        }
        System.out.println("over");

猜数字游戏:

编写程序随即生成一个0-100之间的随机数。程序提示用户输入一个数字,不停猜测,直到猜对为止。最后输出猜测的数字,和猜测的次数。并且如果没有猜中要提示用户输入的值是大了还是小了。

思考:

如何生成1-100之间随机数?

(int)(Math.random()*100)+1;

如何提示用户输入数字,

Scanner  sc=new Scanner(System.in);

int guessNum = sc.nextInt();

需要将随机数和用户输入的数字进行比较。

 猜一次

Scanner sc = new Scanner(System.in);
int num = (int)(Math.random()*100)+1;
        System.out.println("请输入0-100之间整数");
        int guessNum = sc.nextInt();
        if (guessNum == num) {
            System.out.println("中啦");
        } else if (guessNum < num) {
            System.out.println("小啦");
        } else {
            System.out.println("大了");
        }

这个程序只能才一次,如何让用户重复输入直到猜对?

可以使用while循环

public static void main(String[] args) {
        int num = (int)(Math.random()*100)+1;
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("请输入1-100之间整数");
            int guessNum = sc.nextInt();
            if (guessNum == num) {
                System.out.println("中啦");
            } else if (guessNum < num) {
                System.out.println("小啦");
            } else {
                System.out.println("大了");
            }
        }
    }

该方案发现了问题,虽然实现了让用户不停的输入,但是即使猜中了程序也不会停止。

那么就需要控制循环次数了。也就是while() 括号中的条件表达式。当用户猜测的数和系统生成的数字不相等时,就需要继续循环。

int num = (int)(Math.random()*100)+1;
        Scanner sc = new Scanner(System.in);
        
        int guessNum = -1;
        while (guessNum != num) {
System.out.println("请输入1-100之间整数");
            guessNum = sc.nextInt();
            if (guessNum == num) {
                System.out.println("中啦");
            } else if (guessNum < num) {
                System.out.println("小啦");
            } else {
                System.out.println("大了");
            }
        }

为什么将guessNum初始化值为-1?因为如果初始化为0到100之间程序会出错,因为可能是要猜的数。

1:首先程序生成了一个随机数

2:用户输入一个数字

3:循环检查用户数字和随机数是否相同,知道相同位置,循环结束

  

do while语句格式:

do
{
    执行语句;
}while(条件表达式);
do while特点是条件无论是否满足,
循环体至少被执行一次。
public static void main(String[] args) {
        int x = 0, y = 0;
        do {
            System.out.println(x);
            x++;
        } while (x < 0);
        // do while do会先执行一次,不管是否满足循环条件。
        while (y < 0) {
            System.out.println(y);
            y++;
        }
    }

while:先判断条件,只有条件满足才执行循环体。   

do while: 先执行循环体,再判断条件,条件满足,再继续执行循环体。

简单一句话:do while:无论条件是否满足,循环体至少执行一次。

注意一个细节do  while 后面的分号;

案例:改写猜数字游戏

public static void main(String[] args) {
        // 记录用户输入的数字
        int guess = -1;
        // 记录用户输入次数
        int count = 0;
        // 生成1-100之间随机数
        int num = (int) (int)(Math.random()*100)+1;
Scanner sc = new Scanner(System.in);

        // 循环猜数字
        do {
            System.out.println("请输入1-100之间的数字");
            guess = sc.nextInt();
            if (guess > num) {

                System.out.println("哥们,太大了");
            } else if (guess < num) {

                System.out.println("哥们,太小了");
            } else {

                System.out.println("恭喜,中啦");
            }
            count++;

        } while (num != guess);
        System.out.println("你猜测的数字是:" + num + "猜测了" + count + "次");
    }

案例:计算器

     系统自动生成2个随机数用于参与运算。

     系统生成0-4之间的随机数,表示加减乘除取模运算。

     使用switch 进行匹配

class Couter {
    public static void main(String[] args) throws InterruptedException {
        // 生成随机数Math.random()生成0-1值,不包含0和1,
         //乘以10得到0和10之间的数(double类型),不包含0和10
         //强转为int,并加1得到1和10之间的数,包含1和10
         int x = (int)(Math.random()*10)+1;        
int y = (int)(Math.random()*10)+1;            
System.out.println(x);
        System.out.println(y);
        // 创建0-4随机数 0 1 2 3 4 各表示加减乘除取模
        int z = (int) (int)(Math.random()*5);
        System.out.println(z);

        switch (z) {
        case 0:
            System.out.println(x + "+" + y + "=?");
            System.out.println("哥们快猜。。。。");
            Thread.sleep(2000);
            System.out.println(x + "+" + y + "=" + (x + y));
            break;
        case 1:
            System.out.println(x + "-" + y + "=?");
            System.out.println("哥们快猜。。。。");
            Thread.sleep(2000);
            System.out.println(x + "-" + y + "=" + (x - y));
            break;
        case 2:
            System.out.println(x + "*" + y + "=?");
            System.out.println("哥们快猜。。。。");
            Thread.sleep(2000);
            System.out.println(x + "*" + y + "=" + (x * y));
            break;
        case 3:
            System.out.println(x + "/" + y + "=?");
            System.out.println("哥们快猜。。。。");
            Thread.sleep(2000);
            System.out.println(x + "/" + y + "=" + (x / y));
            break;
        case 4:
            System.out.println(x + "%" + y + "=?");
            System.out.println("哥们快猜。。。。");
            Thread.sleep(2000);
            System.out.println(x + "%" + y + "=" + (x % y));
            break;
        }

    }

}

计算器2:上述中只能计算一次。可以使用whileu循环来不停计算。

程序生成了3个随机数,前两个数参与运算,第三个数用于匹配运算符。要注意除数为0的情况。

int x = (int)(Math.random()*10)+1;    

Math.random() 生成0-1之间的数字,double类型

Math.random()*10 就是0-9之间的数,是double类型

(int)(Math.random()*10)将double类型强转成int类型,去掉小数点,便于计算。

(int)(Math.random()*10)+1,生成了1到10之间随机数。

int z = (int) (int)(Math.random()*5);

生成0-4之间的数字,可以用0表示加,1表示减,2表示乘,3表示除,4表示取模

为了减慢程序,使用了Thread.sleep(2000); 让程序等待一会。