任务7:绘制漫天星斗

任务描述

通过循环语句实现面板随机显示若干星星,完成的效果如图7-1所示。


图7-1 满天星斗
图7-1 满天星斗


支撑知识

7.1 为什么需要循环

如果我们再面板上绘制一颗星星,那么只需要调用drawString方法绘制即可。如果显示10颗,那么我们可以调用10次drawString绘制。但是要求显示1000颗呢?拷贝1000此drawString方法是不可取的。通过分析可以知道打印1000颗星星,都是重复的做某一件事情。
其实,在日常生活中有很多重复做一件事情的例子,比如打印100份文档,绕跑道跑10圈等。这些重复都有一个共同点,就是在什么条件下重复做某件事,如果这个条件不成立就不重复。分析绕跑道跑10圈,它的重复条件是不超过10圈,就继续跑步,超过10圈就停止跑步。

7.2 循环结构

循环语句可以在满足循环条件的情况下,反复执行某一段代码,这段被重复执行的代码被称为循环体。当反复执行这段循环体时,需要在合适的时候把循环条件改为假,从而结束循环,否则循环将一直执行下去,形成死循环。

(1)for循环

for循环的语法格式如下:

for(int i = 0; i < 10; i++){}

循环语句可能包含如下四个部分:
初始化语句:一条或多条语句,这些代码用于完成一些初始化工作,初始化语句在循环开始之前执行。
循环条件:这是一个表达式,这个表达式能决定是否执行循环体。
循环体:这个部分是循环的主体,如果循环条件允许,这个代码块将被重复执行。如果这个代码块只有一行语句,则这个代码块的花括号是可以省略的。
迭代语句:这个部分在一次循环体执行结束后,对循环条件求值之前执行,通常用于控制循环条件中的变量,使得循环在合适时候结束。
上面四个部分只是一般分类,并不是每个循环中都非常清晰地分出了上面四个成分。

(2)while循环语句

while循环的语法格式如下:

[初始化语句]
while(表达式)
{
语句;
[迭代语句]
}

while循环每次执行循环体之前,先对表达式求值,如果值为true,则运行循环体部分;如果为假,就停止执行循环体。从上面语法格式中来看,迭代语句总是位于循环体的最后,因此只有当循环体能成功执行完成时,while循环才会执行迭代语句。
代码清单7-1演示了用while循环实现输出1~10分别乘以10所得的乘法表。
代码清单7-1: TestWhile.java


public class TestWhile {
    public static void main(String[] args) {
        //循环的初始化条件
        int count = 0;
        int result;
        //当count小于等于10时,执行循环体
        while (count <= 10) 
        {
            result = count*10;
            System.out.println(count+"×10="+result);
            count++;//迭代语句,修改循环变量
        }
        System.out.println("循环结束!");
    }
}

如果while循环的循环体部分和迭代语句合并在一起,且只有一行代码,则可以省略while循环后的花括号。但这种省略花括号的做法,可能降低程序的可读性。
使用while循环时,一定要保证循环条件(即while后的表达式)有变成false的时候,否则这个循环将成为一个死循环,永远无法结束这个循环。
提示:使用while循环时,一定要注意死循环问题;同时,也要注意while循环的表达式后面紧跟一个分号。


int i = 10;
while(i < 20);
{
    i++;
}

提示中的这段代码片段在编译的时候没有任何问题,但仔细看一下这个程序,不难发现while循环的循环条件表达式后紧跟了一个分号。在Java程序中,一个单独的分号表示一个空语句,不作任何事情的空语句,这意味着这个while循环的循环体是空语句。空语句作为循环体也不是最大的问题,问题是当Java反复执行这个循环体时,循环条件的返回值没有任何改变,这就成了一个死循环。

7.3 随机类

Java中的随机类为:Random,可以通过其提供的方法获得随机值。如nextInt(int n),该方法的作用是生成一个随机的int值,该值介于[0,n)的区间,也就是0到n之间的随机int值,包含0而不包含n。
任务实施
代码清单7-2:StarPanel.java


//使用JPanel和Graphics类前需要导入
import java.awt.Color;
import java.awt.Graphics;
import java.util.Random;

import javax.swing.JPanel;

//使用关键字extends继承JPanel,让MyPanel具有面板功能
public class MyPanel extends JPanel {

    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        super.paint(g);
        //设置背景颜色为黑色
        setBackground(Color.BLACK);
        //设置画笔为白色
        g.setColor(Color.WHITE);
        //创建随机类
        Random random = new Random();
        //使用循环绘制100颗星星
        for (int i = 0; i < 100; i++) {
            g.drawString("*", random.nextInt(300), random.nextInt(300));
        }
    }
}

拓展训练

使用循环随机显示多张不同图片。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值