任务6:画面选择

任务描述

创建字符串、图片两种面板,用户在控制台输入不同的整数,将会看到不同的图形,如图6-1、6-2所示。


图6-1 用户输入1显示
图6-1 用户输入1显示
   图6-2 用户输入2显示
图6-2 用户输入2显示


支撑知识

6.1 输入类

Java提供了输入类给用户使用,通过输入类,用户可以在控制台输入数据,程序接收到数据后可以进行相应的处理。
Java的输入类为:Scanner,当通过new Scanner(System.in)创建一个Scanner对象,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给Scanner对象。如果要获取输入的内容,则只需要调用Scanner的方法即可。输入类执行过程如图6-3所示。


暂停执行,等待输入
暂停执行,等待输入


下面代码演示输入类的用法,并将用户输入的值打印在控制台中,如代码清单6-1所示。
代码清单6-1 Start.java


public static void main(String[] args) {
//创建键盘扫描类
//System.in表示系统输入
Scanner scanner = new Scanner(System.in);
//程序执行到这里暂停,等待键盘输入,并输入值赋值给变量i
int i = scanner.nextInt();
//输出键盘输入的整数
System.out.println("键盘输入的整数:" + i);
}

注意:nextInt方法只能接受键盘输入的数字,如果输入字符,将会提示错误。

6.2 选择结构

Java提供了两种常见的选择控制结构:if语句和switch语句,其中if-else语句使用表达式的值作为选择条件来进行选择控制;而switch语句则用于对多个整型值进行匹配,从而实现选择控制。

(1)if语句

if语句使用判断值作为分支条件来进行选择控制,其中if语句有如下三种形式:
第一种形式:

if (表达式){
代码...
}   

第二种形式:

if (表达式){
    代码...
}else{
    代码... 
}      

第三种形式:

if (表达式1){
    代码...
} else if(表达式2){
    代码...   
}
...//任意多个else if语句
else{
    代码...
} 

在上面if条件语句的三种形式中,放在if之后的括号里的表达式只能是一个逻辑表达式,即这个表达式的返回值只能是true或false。在条件语句中,被花括号括起来多行代码被称为代码块,一个代码块通常被当成一个整体来执行(除非运行过程中遇到return、break、continue等关键字,或者遇到了异常),代码清单6-2演示了多重if结构的用法。
程序清单6-2:TestIf.java


import java.util.Scanner;
public class TestIf {
    public static void main(String[] args) {
        float grade;
        System.out.print("请输入考试成绩:");
        Scanner scanner = new Scanner(System.in);
        grade = scanner.nextFloat();
        if(grade >= 90){
            System.out.println("优");
        }
        else if((grade >= 80)&&(grade < 90)){
            System.out.println("良");
        }
        else if((grade >= 60)&&(grade < 80)){
            System.out.println("及格");
        }
        else{
            System.out.println("不及格");
        }
    }
}

如果if(表达式)、else if(表达式)和else后的语句块只有一行语句时,则可以省略花括号,因为单行语句本身就是一个整体,无须花括号来把它们定义成一个整体。通常,建议不要省略if、else、else if后执行块的花括号,即使条件执行体只有一行代码,因为保留花括号会有更好的可读性,而且保留花括号会减少发生错误的可能

(2)switch语句

在判断过程中,有时需要判断多个条件,需要使用多个else语句,而这样会导致程序冗长乏味,而且还会影响可读性。Java语言提供了另一种用于多选择的switch结构。
switch语句由一个表达式和多个case标签组成,和if语句不同的是,switch语句后面的表达式的数据类型只能是整型(或者是可以转化为整形的类型,如char),不能是boolean型。case标签后紧跟一个代码块,case标签后的常量表达式作为这个代码块的标识,其中常量表达式要求是整型常量组成的表达式,通常是字符、数字等。switch语句的语法格式如下:

switch (表达式){
case 常量表达式1:
    语句1;
break;
case常量表达式2:
    语句2;
break;
    ...
default: 
    语句n;
}

这种选择语句的执行是先对表达式求值,然后依次匹配常量表达式的值,遇到匹配的值即执行对应的执行体,直到遇到break语句;如果所有case标签后的值都不与表达式的值相等,则执行default的代码块。
将程序1-11改成switch结构。
程序清单6-3:TestSwitch.java


import java.util.Scanner;
public class TestSwitch {
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        float grade;
        System.out.print("请输入考试成绩:");
        Scanner scanner = new Scanner(System.in);
        grade = scanner.nextFloat();
        //将成绩转换为0~9之间的整数
        Float f = new Float(grade);
        int n = f.intValue()/10;
        switch(n){
        case 9:
            System.out.println("优");
            break;
        case 8:
            System.out.println("良");
            break;
        case 7:
        case 6:
            System.out.println("及格");
            break;
        default:
            System.out.println("不及格");
        }
    }
}

在case标签后的每个代码块后都有一条break;语句,这个break;语句有极其重要的意义,Java的switch语句允许省略case后代码块的break;语句,但这种省略可能引入一个陷阱。如果我们把上面程序中的break;语句都注释掉,重新编译运行,结果看起来比较奇怪,但这正是由switch语句的运行流程决定的:switch语句会先求出表达式的值,然后拿这个表达式和case标签后的值进行比较,一旦遇到相等的值,程序开始执行这个case标签后代码,同时不再判断后面case、default标签的条件是否匹配,除非遇到break;才会结束。


提示:使用switch语句时,有两个值得注意的地方:第一个地方是switch语句后的表达式的数据类型只能是byte、short、int和char类型;第二个地方是如果省略了case后代码块的break;时所引入的陷阱。


任务实施

创建Java项目Project06,新建启动类Start,在启动类主方法中实现显示框架功能。

任务6.1 创建图形面板

要实现四种图形的选择,那么我们就需要创建四个面板类,分别绘制方块、圆、扇形和图片。
代码清单:RecPanel.java


import java.awt.Graphics;
import javax.swing.JPanel;
public class RecPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        super.paint(g);
        g.fillRect(10, 10, 100, 100);
}

代码清单:OvalPanel.java


import java.awt.Graphics;
import javax.swing.JPanel;
public class OvalPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        super.paint(g);
        g.fillOval(100, 100, 100, 100);
    }
}

代码清单:ArcPanel.java


import java.awt.Graphics;
import javax.swing.JPanel;
public class ArcPanel extends JPanel {
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        super.paint(g);
        g.fillArc(100, 100, 100, 100, 0, 120);
    }
}

代码清单:ImagePanel.java


import java.awt.Graphics;
import javax.swing.ImageIcon;
import javax.swing.JPanel;
public class ImagePanel extends JPanel{
    @Override
    public void paint(Graphics g) {
        // TODO Auto-generated method stub
        super.paint(g);
        ImageIcon icon = new ImageIcon("img/demo.jpg");
        g.drawImage(icon.getImage(), 0, 0, 600, 500, this);
    }
}

注意:我们在项目中创建了一个文件夹img,并放置一张图片demo.jpg进去,然后通过ImageIcon对象将图片加载进程序。

任务6.2 键盘输入

在启动类中,插入键盘输入语句,让程序执行到此时等待用户输入数值。


//创建键盘扫描类
//System.in表示系统输入
Scanner scanner = new Scanner(System.in);
//程序执行到这里暂停,等待键盘输入,并输入值赋值给变量i
System.out.println("请选择显示的图形(1:方块,2:圆形,3:扇形,4:图片):");
int i = scanner.nextInt();

任务6.3 选择

依据用户输入的值,框架选择加载哪一个面板显示。在这里我们分析两种if语句实现选择功能,并分析两种语句有和区别。


if(i == 1){
//显示方块
    RecPanel recPanel = new RecPanel();
    frame.add(recPanel);
}else if(i == 2){
    //显示圆
    OvalPanel ovalPanel = new OvalPanel();
    frame.add(ovalPanel);
}else if(i == 3){
    //显示扇形
    ArcPanel arcPanel = new ArcPanel();
    frame.add(arcPanel);
}else if(i == 4){
    //显示图片
    ImagePanel imagePanel = new ImagePanel();
    frame.add(imagePanel);
}

拓展训练

将任务6中的选择语句改为switch实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值