Java期末习题讲解

请说出下列【代码】的输出结果

Java
class A{
    int x = 2;
    static int y = 5;
    int f(){
        y=x+y;
        return x+y;
    }
}
public class Code1 {
    public static void main(String[] args){
        A a = new A();
        A b = new A();
        a.x=10;
        System.out.println(a.f());//【代码1】
        System.out.println(b.f());//【代码2】
        b.y=10;
        System.out.println(a.f());//【代码3】
    }
}

【代码1】25 【代码2】19 【代码3】30
这道题考察的是静态成员变量的特点,无论一个类实例了多少个对象,这些对象都共享一个静态成员变量。
a对象将x的值改为10后调用了f方法,y的值变为了15,返回的值是x+y即10+15为25。
b对象调用f方法,y的值在15的基础上又加了x(2)变成了17,返回x+y即2+17位19。之后b.y=10,那么a中的y也变成了10
a对象再一次调用f方法,y的值在10的基础上又加了10变成20,返回x+y即20+10=30.


请说出下列【代码】的输出结果

Java
import javax.swing.JTextField;

class MySchool {
    JTextField showMess;

    void setJTextField(JTextField t) {
        showMess = t;
    }

    void write(String s) {
        showMess.setText(s);
    }

    JTextField getJTextField() {
        return showMess;
    }
}

public class Code2 {
    public static void main(String[] args) {
        JTextField text = new JTextField("学生");
                System.out.println(text.gettext());// 【代码1】
        MySchool school = new MySchool();
        school.setJTextField(text);
        school.write("上课不玩手机");
        System.out.println(text.getText());// 【代码2】
        JTextField no = school.getJTextField();
        no = new JTextField("上课迟到");
        System.out.println(school.getJTextField().getText());// 【代码3】
    }
}

【代码1】调用getText方法,获取文本框中的字符串内容。输出“学生”。类型相同的两个对象一旦引用相同,他们就有完全相同的变量(实体)。将JTextField类的对象text传给了school的setJTextField方法,将text的引用赋值给了showMess,那么调用write方法修改了shwoMess中的内容后,text的内容也跟着改变,所以【代码2】输出上课不玩手机,【代码3】是调用school的getJTextField()方法返回showMess对象后调用getText方法返回其中分内容,即为上课不玩手机。


请说出下列【代码】的输出结果。

Java
import java.util.Scanner;
import java.util.StringTokenizer;

public class Code3 {
    public static void main(String args[]) {
        String s = "height:1229#width:2912";
        StringTokenizer fenxi = new StringTokenizer(s, "wid:th,eg#");
        System.out.println(fenxi.countTokens()); // 【代码1】
        String str = fenxi.nextToken();
        System.out.println(fenxi.nextToken()); // 【代码2】
        Scanner scan = new Scanner(s);
        scan.useDelimiter("[12:29#]+");
        str = scan.next();
        System.out.println(scan.next()); // 【代码3】
    }
}

这道题考察StringTokenizer类的用法。StringTokenizer fenxi = new StringTokenizer(s, "wid:th,eg#");将字符序列s分解,第二个参数的字符序列中的字符的任意排列被作为了分隔标记。
因此,s被分解成了height:1229和2912。调用countTokens()方法返回分析器中计数变量的值,即为2。
接着调用了两次nextToken()方法逐个获取String对象的字符序列中的语言符号(单词),所以第二次输出的是2912。接着使用Scanner对象的useDelimiter(正则表达式)方法将正则表达式作为分隔标记。所以s分解成了height和width,第二次调用next方法输出width。


已知应用程序中已经有如下的刻画矩形的Rect类:

Java
abstract class Rect{
    int width;//矩形的宽
    int height;//矩形的高
    final void setWidth(int w){//不能重写
        width = w>0?w:0;
    }
    final void setHeight(int h){
        height = h>0?h:0;
    }
    abstract int getArea();//计算矩形的面积
}

请完成如下任务:
(1)编写一个Rect类的子类Rectangle,在你的Rectangle子类中新增加一个返回矩形周长的方法(方法的名字考生可自己定义)。
(2)在应用程序的主类的main方法中用你的Rectangle类创建对象,完成输出宽是12高是8的矩形的面积和周长的任务。

Java
class Rextangle extends Rect{
    int getArea(){  //父类中的该方法是抽象的,必须重写
        return width*height;
    }
    int getLength(){
        return 2*(width+height);
    }
}
class Code{
    public static void main(String args[]){
        Rectangle a = new Rectangle();
        a.setWidth(12);//或a.width=12;
        a.setHeight(8);//或a.height=8;
        System.out.println(a.getArea());
        System.out.println(a.getLength());
    }
}

编写一个GUI程序。功能要求如下:
窗口(需要编写JFrame的子类)的标题为“计算园面积和周长”,窗口布局为FlowLayout布局,设置窗口大小为(400,180),设置窗口可见,单机窗口右上角关闭图标可以关闭该窗口。
窗口中有一个文本框(JTextField),两个标签(JLable)和两个按钮(JButton)。两个按钮上的文字分别是“计算园面积”和“计算园周长”。
用户在文本框中输入圆的半径,单击“计算圆面积”按钮,程序在一个标签中显示园的面积,单击“计算圆周长”按钮,程序在另一个标签中显示园的周长。

Java
public class test {
    public static void main(String args[]) {
        StuWindow stu = new StuWindow();
    }
}
Java
import java.awt.FlowLayout;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class StuWindow extends JFrame {
    JTextField inputRadius;// 输入半径
    JLabel showArea;// 显示面积
    JLabel showCirlceLength;// 显示周长
    JButton computerArea;// 计算面积
    JButton computerCirlceLength;// 计算周长
    Police listener; // listener是监视器

    public StuWindow() {
        setLayout(new FlowLayout());
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
        setVisible(true);
        validate();
        inputRadius = new JTextField(10);
        showArea = new JLabel();
        showCirlceLength = new JLabel();
        computerArea = new JButton("计算圆面积");
        computerCirlceLength = new JButton("计算圆周长");
        add(inputRadius);
        add(computerArea);
        add(computerCirlceLength);
        add(showArea);
        add(showCirlceLength);
        listener = new Police();
        computerArea.addActionListener(listener);
        computerCirlceLength.addActionListener(listener);
        listener.setJButton(computerArea, computerCirlceLength);
        listener.setJLabel(showArea, showCirlceLength);
        listener.setJTextField(inputRadius);
    }

}
Java
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class Police implements ActionListener {
    JTextField inputRadius;
    JLabel showArea;
    JLabel showCirlceLength;
    JButton computerArea;
    JButton computerCirlceLength;

    public void setJButton(JButton... b) {
        computerArea = b[0];
        computerCirlceLength = b[1];
    }

    public void setJLabel(JLabel... b) {
        showArea = b[0];
        showCirlceLength = b[1];
    }

    public void setJTextField(JTextField... b) {
        inputRadius = b[0];
    }

    @Override
    public void actionPerformed(ActionEvent e) {
        double r = Double.parseDouble(inputRadius.getText());
        if (e.getSource() == computerArea) {
            showArea.setText("面积:" + Math.PI * r * r);
        }
        if (e.getSource() == computerCirlceLength) {
            showCirlceLength.setText("周长:" + 2 * Math.PI * r);
        }

    }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值