收藏 分享(赏)

《Java编程语言:原理与范例》课后实验源代码.doc

上传人:tangtianxu1 文档编号:3099914 上传时间:2018-10-03 格式:DOC 页数:50 大小:284.50KB
下载 相关 举报
《Java编程语言:原理与范例》课后实验源代码.doc_第1页
第1页 / 共50页
《Java编程语言:原理与范例》课后实验源代码.doc_第2页
第2页 / 共50页
《Java编程语言:原理与范例》课后实验源代码.doc_第3页
第3页 / 共50页
《Java编程语言:原理与范例》课后实验源代码.doc_第4页
第4页 / 共50页
《Java编程语言:原理与范例》课后实验源代码.doc_第5页
第5页 / 共50页
点击查看更多>>
资源描述

1、第一章实验一package ch01;import java.text.SimpleDateFormat;import java.util.Date;class Timer extends Thread private SimpleDateFormat sdf = new SimpleDateFormat(“yyyy 年 MM 月 dd 日 HH:mm:ss“);public void run() while (true) System.out.print(“r 现在时间是:“);Date now = new Date();System.out.print(sdf.format(now);tr

2、y sleep(1000); catch (InterruptedException e) e.printStackTrace();public class Clock public static void main(String args) Timer timer = new Timer();timer.start();实验二package ch01;import java.awt.event.MouseAdapter;import java.awt.event.MouseEvent;import java.util.Random;import javax.swing.JButton;imp

3、ort javax.swing.JFrame;public class MagicButton extends MouseAdapter JFrame win;JButton button = new JButton(“你点不到我“);Random rand = new Random();void initUI() win = new JFrame();win.setLayout(null);button.setSize(100, 40);button.addMouseListener(this);win.add(button);win.setSize(400, 300);win.setRes

4、izable(false);win.setLocationRelativeTo(null);win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);win.setVisible(true);public static void main(String args) MagicButton demo = new MagicButton();demo.initUI();public void mouseEntered(MouseEvent e) int mouseX = button.getX() + e.getX();int mouseY = butt

5、on.getY() + e.getY();while (true) int buttonX = rand.nextInt(win.getWidth() - button.getWidth();int buttonY = rand.nextInt(win.getHeight() - button.getHeight();button.setLocation(buttonX, buttonY);if (!button.getBounds().contains(mouseX, mouseY) break;第二章实验一/*2. 交换两个变量的值(不允许使用中间变量) 。*/package ch03;p

6、ublic class Exp2_2 public static void main(String args) int a = 2, b = 3;int s = a * b;a = s / a;b = s / a;System.out.println(“a=“ + a + “, b=“ + b);实验二/*3. 逆序输出一个 7 位整数,如 8639427 输出为 7249368(不允许使用循环语句) 。*/package ch03;public class Exp2_3 public static void main(String args) long a = 8639427;System.

7、out.print(a % 10);System.out.print(a / 10 % 10);System.out.print(a / 100 % 10);System.out.print(a / 1000 % 10);System.out.print(a / 10000 % 10);System.out.print(a / 100000 % 10);System.out.print(a / 1000000 % 10);实验三/*4. 对于 int 型变量 a,以最快的速度计算 34a 的值。*/package ch03;public class Exp2_4 public static v

8、oid main(String args) int a = 3;int b = (a b ? a : b) c ? (a b ? a : b) : c;System.out.println(“max=“ + max);第三章实验一/*2. 使用循环结构逆序输出任意位数的整数。*/package ch04;import java.util.Scanner;public class Exp3_2 public static void main(String args) Scanner s = new Scanner(System.in);System.out.println(“输入整数:“);lo

9、ng n = s.nextLong();while (n 0) System.out.print(n % 10);n /= 10;实验二/*3. 输出以下由数字组成的菱形(要求将输出行数存放于变量中以便随时更改) 。1 1 2 1 1 2 3 2 1 1 2 3 4 3 2 1 1 2 3 2 1 1 2 1 1 */package ch04;import java.util.Scanner;public class Exp3_3 public static void main(String args) int rows;Scanner s = new Scanner(System.in);S

10、ystem.out.print(“输入行数:“);rows = s.nextInt();for (int i = -rows / 2; i ai) min = ai;return min;int findLastLocation(int a, int x) for (int i = a.length - 1; i = 0; i-) if (ai = x) return i;return -1;boolean isAsc(int a) for (int i = 0; i ai + 1) return false;return true;void reverse(int a) for (int i

11、 = 0; i x) return i;return i;void insert(int i, int x) for (int j = a.length - 2; j = i; j-) aj + 1 = aj;ai = x;public static void main(String args) Exp4_2 t = new Exp4_2();t.print(false);System.out.print(“输入要插入的数:“);Scanner s = new Scanner(System.in);int x = s.nextInt();int i = t.findInsertLocation

12、(x);if (i = -1) System.out.println(x + “ 在数组中已经存在,放弃插入! “); else t.insert(i, x);t.print(true);实验三/*3. 找出阶数不小于 8 的方阵的鞍点值及位置(鞍点值在该行上最大、该列上最小) ,若无鞍点则提示。*/package ch05;import java.util.ArrayList;import java.util.List;import java.util.Random;import java.util.Scanner;/* 鞍点对象类*/class AnDian private int row

13、; / 鞍点所在行下标private int col; / 鞍点所在列下标private int value; / 鞍点值/ 完全构造方法public AnDian(int row, int col, int value) this.row = row;this.col = col;this.value = value;/ getters and setterspublic int getRow() return row;public void setRow(int row) this.row = row;public int getCol() return col;public void s

14、etCol(int col) this.col = col;public int getValue() return value;public void setValue(int value) this.value = value;/* 测试类(整体上是若干个并列的 2 重循环,时间复杂度较 3 重循环低)*/public class Exp4_3 int a; / 矩阵int maxOfRows; / 存放每行的最大值int minOfCols; / 存放每列的最小值final int LIMIT = 3; / 矩阵元素值的上限(为测试方便此处写死,也可在运行时由用户输入)/ 初始化矩阵vo

15、id initArray() Scanner scanner = new Scanner(System.in);System.out.print(“输入矩阵行数:“);int m = scanner.nextInt(); / 矩阵行数System.out.print(“输入矩阵列数:“);int n = scanner.nextInt(); / 矩阵列数/ 构造各数组a = new intmn;maxOfRows = new intm;minOfCols = new intn;/ 以随机数填充矩阵Random random = new Random();for (int i = 0; i ai

16、j) min = aij;minOfColsj = min;/ 打印矩阵void printArray() System.out.println(“得到的矩阵为:“);for (int i = 0; i findAnDian() List anDians = new ArrayList(); / 构造线性表对象for (int i = 0; i anDians = o.findAnDian();System.out.println(“-“);if (anDians.size() = 0) / 返回的线性表元素个数为 0System.out.println(“没有鞍点。“); else int

17、i = 0;for (AnDian e : anDians) / 迭代性 for 循环的语法也可用于线性表类型System.out.printf(“鞍点%-4d:a%-3d%-3d = %-8dn“, +i, e.getRow(), e.getCol(), e.getValue();实验四/*4. 编写如下图所示的程序以模拟命令行的 copy 命令。*/package ch05;public class Exp4_4 public static void main(String args) if (args.length != 2) System.err.println(“命令语法不正确,使用

18、格式为: java Exp4_4 要复制的文件 复制到的路径“);return;System.out.println(“成功将“ + args0 + “ 复制到 “ + args1 + “。“);实验五/*5. 输出如上图所示的循环移位方阵(第一行存于一维数组,循环右移该行元素一个位置以产生下一行,以此类推) 。7 4 8 9 1 5 5 7 4 8 9 1 1 5 7 4 8 9 9 1 5 7 4 8 8 9 1 5 7 4 4 8 9 1 5 7 */package ch05;public class Exp4_5 void shift(int a) int last = aa.leng

19、th - 1;for (int i = a.length - 2; i = 0; i-) ai + 1 = ai;a0 = last;void print(int a) for (int i = 0; i 0) System.out.println(begin);long init = System.currentTimeMillis();while (true) long now = System.currentTimeMillis();if (now - init = 1000) begin-;break;System.out.println(“时间到!“);public static v

20、oid main(String args) startCount(5);实验三/*4. 编写 Complex 类表示数学上的复数概念,具体包括: real 和 image 字段,分别表示复数的实部和虚部。 读取和设置 real/image 字段的 get 和 set 方法。 根据实部和虚部参数构造复数对象的构造方法。 打印当前复数对象内容以及与另一复数相加的方法,原型为:void printInfo(); Complex add(Complex anotherComplex); 重写父类 Object 的 equals 方法,相等逻辑为“若 2 个复数对象的实部和虚部分别对应相等,则这 2 个

21、复数相等” 。最后编写一个带 main 方法的测试类 ComplexTest,分别测试 Complex 中的各个方法。*/package ch06;class Complex float real;float image;public float getReal() return real;public void setReal(float real) this.real = real;public float getImage() return image;public void setImage(float image) this.image = image;public Complex(

22、float real, float image) this.real = real;this.image = image;void printInfo() System.out.println(real + (image 0 ? “+“ : “-“) + Math.abs(image) + “i“);Complex add(Complex anotherComplex) Complex c = new Complex(0, 0);c.setReal(this.real + anotherComplex.getReal();c.setImage(this.image + anotherCompl

23、ex.getImage();return c;public boolean equals(Object obj) Complex c = (Complex) obj;return this.real = c.getReal() public class Exp5_4 public static void main(String args) Complex c1 = new Complex(1, -2);Complex c2 = new Complex(2, 6);Complex c3 = c1.add(c2);Complex c4 = c2.add(c1);System.out.print(“

24、c1=“);c1.printInfo();System.out.print(“c2=“);c2.printInfo();System.out.print(“c3=“);c3.printInfo();System.out.print(“c4=“);c4.printInfo();System.out.println(c1.equals(c2) ? “c1=c2“ : “c1!=c2“);System.out.println(c3.equals(c4) ? “c3=c4“ : “c3!=c4“);实验四/*5. 查阅 java.util 包下的 GregorianCalendar 类的 API 文档

25、,编写 MyDate 类继承该类,并实现以下方法:MyDate(int year, int month, int day); / 根据指定的年月日构造日期对象int getYear(); / 得到当前日期的年份int getMonth(); / 得到当前日期的月份int getDayOfYear(); / 得到当前日期是本年的第几天int getDayOfMonth(); / 得到当前日期是本月的第几天int getDayOfWeek(); / 得到当前日期是本周的第几天(即星期几)MyDate getBeforeDate(int beforeDays);/ 得到当前日期之前若干天对应的日期对

26、象MyDate getAfterDate(int afterDays); / 得到当前日期之后若干天对应的日期对象int daysBetweenWith(MyDate d); / 得到当前日期与指定日期 d 相隔多少天最后编写一个带 main 方法的测试类 MyDateTest,分别测试 MyDate 中的各个方法。提示: 可通过父类 GregorianCalendar 相应方法的组合以实现上述各方法。 注意父类中根据年月日创建日历对象的构造方法中,月份参数是从 0 开始的。*/package ch06;import java.util.GregorianCalendar;class MyDa

27、te extends GregorianCalendar MyDate(int year, int month, int day) super(year, month - 1, day);int getYear() return super.get(YEAR);int getMonth() return super.get(MONTH) + 1;int getDayOfYear() return super.get(DAY_OF_YEAR);int getDayOfMonth() return super.get(DAY_OF_MONTH);int getDayOfWeek() return

28、super.get(DAY_OF_WEEK);MyDate getBeforeDate(int beforeDays) long time = super.getTimeInMillis() - beforeDays * 24L * 60 * 60 * 1000;GregorianCalendar gc = new GregorianCalendar();gc.setTimeInMillis(time);return new MyDate(gc.get(YEAR), gc.get(MONTH) + 1, gc.get(DAY_OF_MONTH);MyDate getAfterDate(int

29、afterDays) long time = super.getTimeInMillis() + afterDays * 24L * 60 * 60 * 1000;GregorianCalendar gc = new GregorianCalendar();gc.setTimeInMillis(time);return new MyDate(gc.get(YEAR), gc.get(MONTH) + 1, gc.get(DAY_OF_MONTH);int daysBetweenWith(MyDate d) long t1 = super.getTimeInMillis();long t2 =

30、d.getTimeInMillis();return (int) (Math.abs(t1 - t2) / (24 * 60 * 60 * 1000);void print(String name) System.out.printf(“%-4s: %d-%d-%dn“, name, getYear(), getMonth(), getDayOfMonth();public class Exp5_5 public static void main(String args) MyDate d1 = new MyDate(2014, 3, 12);MyDate d2 = new MyDate(20

31、12, 5, 5);MyDate d3 = new MyDate(2013, 3, 12);d1.print(“d1“);d2.print(“d2“);d3.print(“d3“);System.out.println(“d3 是该星期的第 “ + d3.getDayOfWeek() + “ 天“);System.out.println(“d3 是该月的第 “ + d3.getDayOfMonth() + “ 天“);System.out.println(“d3 是该年的第 “ + d3.getDayOfYear() + “ 天“);d1.getAfterDate(50).print(“d1

32、的 50 天后“);d2.getBeforeDate(365).print(“d2 的 365 天前“);System.out.println(“d2 和 d3 间相差 “ + d2.daysBetweenWith(d3) + “ 天“);第六章实验一/*2. 编写程序实现以下逻辑。 抽象类 Animal 具有一个抽象方法 walk。 接口 Flyable 具有一个方法 fly。 类 Bird 继承 Animal 并实现 Flyable。编写测试类 BirdTest,在 main 方法中构造一个 Bird 对象并调用其 walk 和 fly 方法(重写这 2 个方法时,打印一行用于模拟的字符串

33、即可) 。*/package ch07;abstract class Animal abstract void walk();interface Flyable void fly();class Bird extends Animal implements Flyable void walk() System.out.println(“Bird walking“);public void fly() System.out.println(“Bird flying“);public class Exp6_2 public static void main(String args) Bird b

34、= new Bird();b.walk();b.fly();实验二/*3. 接口 MobilePhone 定义了以下方法:void on(); / 开机void off(); / 关机void charge(); / 充电void call(); / 打电话void play(); / 娱乐分别采用如下两种方式创建两个实现 MobilePhone 接口的类的对象,并在测试类中分别对这两个对象调用上述方法。 编写类 IPhone4S 实现 MobilePhone 接口。 使用实现了 MobilePhone 接口的匿名内部类。*/package ch07;interface MobilePhone

35、 void on();void off();void charge();void call();void play();class IPhone4S implements MobilePhone public void on() System.out.println(“IPhone4S on“);public void off() System.out.println(“IPhone4S off“);public void charge() System.out.println(“IPhone4S charge“);public void call() System.out.println(“

36、IPhone4S call“);public void play() System.out.println(“IPhone4S play“);public class Exp6_3 public static void main(String args) MobilePhone ip = new IPhone4S();ip.on();ip.off();ip.charge();ip.call();ip.play();MobilePhone htc = new MobilePhone() public void on() System.out.println(“HTC on“);public vo

37、id off() System.out.println(“HTC off“);public void charge() System.out.println(“HTC charge“);public void call() System.out.println(“HTC call“);public void play() System.out.println(“HTC play“);htc.on();htc.off();htc.charge();htc.call();htc.play();实验三/*4. 编写程序模拟用以表示直线的 Line 类,具体包含以下逻辑: 表示直线起点和终点的嵌套类

38、Point,其包含描述横纵坐标的 x、y 字段。 表示直线方向的嵌套枚举 Direction,其包含表示上下左右等方向的枚举常量。在 Line 类中编写必要的代码,然后在测试类 LineTest 中构造几个 Line 对象并输出每个对象的有关信息。*/package ch07;import ch07.Line.Direction;class Line class Point private int x;private int y;public Point(int x, int y) this.x = x;this.y = y;public int getX() return x;public

39、void setX(int x) this.x = x;public int getY() return y;public void setY(int y) this.y = y;enum Direction UP, DOWN, LEFT, RIGHT;private Point start;private Point end;private Direction direction;void draw() System.out.printf(“绘制直线:起点(%d, %d) ,终点 (%d, %d),方向(%s)“, start.getX(),start.getY(), end.getX(),

40、 end.getY(), direction.toString();public Point getStart() return start;public void setStart(Point start) this.start = start;public Point getEnd() return end;public void setEnd(Point end) this.end = end;public Direction getDirection() return direction;public void setDirection(Direction direction) thi

41、s.direction = direction;public class Exp6_4 public static void main(String args) Line line = new Line();line.setStart(line.new Point(1, 2);line.setEnd(line.new Point(5, 8);line.setDirection(Direction.DOWN);line.draw();第七章实验一/*1. 编写满足以下要求的 GUI 程序。 顶部两个文本框只接受大于 0 小于 11 的整数。 文本框数字改变时,自动刷新下部网格区域的按钮。 鼠标进

42、入按钮时,在该按钮上显示“” 。 鼠标移出按钮时,隐藏该按钮上的文字。*/package ch08;import java.awt.BorderLayout;import java.awt.GridLayout;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyAdapter;import java.awt.event.KeyEvent;import java.awt.event.MouseAdapter;import java.awt.event.Mo

43、useEvent;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JLabel;import javax.swing.JPanel;import javax.swing.JTextField;/ 处理文本框输入事件的监听器class MyKeyListener extends KeyAdapter public void keyTyped(KeyEvent e) char c = e.getKeyChar(); / 得到输入的字符if (!(c = KeyEvent.VK_0 rowTf.setTe

44、xt(“10“); else if (rows 10) cols = 10;colTf.setText(“10“); else if (cols 1) cols = 1;colTf.setText(“1“);center.removeAll(); / 删除面板中的所有组件this.addButtons(); / 重新添加按钮到面板center.validate(); / 通知系统重新排列面板center.repaint(); / 重绘面板public static void main(String args) Exp7_1 t = new Exp7_1();t.initUI();t.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);t.setResizable(false);t.setSize(600, 400);t.setVisible(true);实验二/*2. 在窗口中按下鼠标左键并拖曳时,绘制矩形(要求使用适配器类) 。*/

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 专业基础教材

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报