《Java编程语言:原理与范例》课后实验源代码.doc_第1页
《Java编程语言:原理与范例》课后实验源代码.doc_第2页
《Java编程语言:原理与范例》课后实验源代码.doc_第3页
《Java编程语言:原理与范例》课后实验源代码.doc_第4页
《Java编程语言:原理与范例》课后实验源代码.doc_第5页
免费预览已结束,剩余45页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第一章实验一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); try 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;import 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.setResizable(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 = button.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;public 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.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 void main(String args) int a = 3;int b = (a 5) + (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(输入整数:);long 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);System.out.print(输入行数:);rows = s.nextInt();for (int i = -rows / 2; i = rows / 2; i+) System.out.printf(%- + (3 * Math.abs(i) + 1) + s, );for (int j = Math.abs(i) - rows / 2; j = rows / 2 - Math.abs(i); j+) System.out.printf(%-3d, rows / 2 + 1 - Math.abs(i) - Math.abs(j);System.out.println();实验三/*4. 输出以上由数字组成的三角形(要求将输出行数存放于变量中以便随时更改)。1 3 6 10 15 21 2 5 9 14 20 4 8 13 19 7 12 18 11 17 16 */package ch04;import java.util.Scanner;public class Exp3_4 public static void main(String args) int rows;Scanner s = new Scanner(System.in);System.out.print(输入行数:);rows = s.nextInt();int firstNumOfRow = 1, nextNumOfRow;for (int i = 1; i = rows; i+) firstNumOfRow += i - 1;int firstStepOfRow = i + 1;nextNumOfRow = firstNumOfRow;for (int j = 1; j = rows + 1 - i; j+) System.out.printf(%-4d, nextNumOfRow);nextNumOfRow += firstStepOfRow+;System.out.println();实验四/*5. 计算多项式8+88+888+8888+88888+. 的前8项之和。输出结果:98765424 */package ch04;public class Exp3_5 public static void main(String args) long sum = 0;for (int i = 1; i = 8; i+) long num = 0;for (int j = 1; j = i; j+) num = num * 10 + 8;sum += num;System.out.println(sum);第四章实验一/*1. 产生10个100以内的随机整数以填充一维数组,实现以下功能。 找出最大以及最小值。 查找给定整数a在数组中最后一次出现的位置,若不存在则提示。 判断数组是否呈非递减排列。 将数组元素翻转存放。 */package ch05;import java.util.Random;import java.util.Scanner;public class Exp4_1 int init() int a = new int10;Random r = new Random();for (int i = 0; i a.length; i+) ai = r.nextInt(100);return a;void print(int a) for (int i = 0; i a.length; i+) System.out.printf(%-5d, ai);System.out.println();int findMax(int a) int max = a0;for (int i = 1; i a.length; i+) if (max ai) max = ai;return max;int findMin(int a) int min = a0;for (int i = 1; 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 = 0; i a.length / 2; i+) int temp = ai;ai = aa.length - i - 1;aa.length - i - 1 = temp;public static void main(String args) Exp4_1 t = new Exp4_1();int a = t.init();t.print(a);System.out.println(max= + t.findMax(a);System.out.println(min= + t.findMin(a);System.out.print(输入要查找的数:);Scanner s = new Scanner(System.in);int x = s.nextInt();int i = t.findLastLocation(a, x);if (i = -1) System.out.println(x + 在数组中不存在。); else System.out.printf(Last location of %d: %d。n, x, i);if (t.isAsc(a) System.out.println(数组是非递减排列!); else System.out.println(数组不是非递减排列!);t.reverse(a);System.out.println(翻转后的数组:);t.print(a);实验二/*2. 将a插入到一个长度不小于10且元素呈递增排列的一维数组中,并保证插入之后的数组依然递增(若a在插入前的数组中存在,则输出提示并忽略)。 */package ch05;import java.util.Scanner;public class Exp4_2 int a = 2, 4, 5, 7, 9, 11, 15, 17, 20, 22, Integer.MAX_VALUE ;void print(boolean isAfterInsert) int end = isAfterInsert ? a.length : a.length - 1;for (int i = 0; i end; i+) System.out.printf(%-5d, ai);System.out.println();int findInsertLocation(int x) int i = 0;for (; 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(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; / 鞍点所在行下标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 setCol(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; / 矩阵元素值的上限(为测试方便此处写死,也可在运行时由用户输入)/ 初始化矩阵void 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 a.length; i+) for (int j = 0; j ai.length; j+) aij = random.nextInt(LIMIT);/ 记录每行的最大值int max;for (int i = 0; i a.length; i+) max = ai0;for (int j = 1; j ai.length; j+) if (max aij) max = aij;maxOfRowsi = max;/ 记录每列的最小值int min;for (int j = 0; j a0.length; j+) min = a0j;for (int i = 1; i aij) min = aij;minOfColsj = min;/ 打印矩阵void printArray() System.out.println(得到的矩阵为:);for (int i = 0; i a.length; i+) for (int j = 0; j ai.length; j+) System.out.printf(%-8d, aij);System.out.println();/ 找鞍点(可能有多个),返回类型为线性表类型(List),尖括号语法为泛型,表示线性表的元素为AnDian对象,具体看教材List findAnDian() List anDians = new ArrayList(); / 构造线性表对象for (int i = 0; i a.length; i+) / 扫描矩阵中的每个元素for (int j = 0; j ai.length; j+) / 是当前行最大且当前列最小if (aij = maxOfRowsi & aij = minOfColsj) AnDian p = new AnDian(i, j, aij); / 构造AnDian对象anDians.add(p); / 加入AnDian对象到线性表return anDians; / 返回线性表/ 测试入口public static void main(String args) Exp4_3 o = new Exp4_3();o.initArray();o.printArray();List anDians = o.findAnDian();System.out.println(-);if (anDians.size() = 0) / 返回的线性表元素个数为0System.out.println(没有鞍点。); else int 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(命令语法不正确,使用格式为: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.length - 1;for (int i = a.length - 2; i = 0; i-) ai + 1 = ai;a0 = last;void print(int a) for (int i = 0; i a.length; i+) System.out.printf(%-5d, ai);System.out.println();public static void main(String args) Exp4_5 t = new Exp4_5();int a = 7, 4, 8, 9, 1, 5 ;t.print(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 void main(String args) startCount(5);实验三/*4. 编写Complex类表示数学上的复数概念,具体包括: real和image字段,分别表示复数的实部和虚部。 读取和设置real/image字段的get和set方法。 根据实部和虚部参数构造复数对象的构造方法。 打印当前复数对象内容以及与另一复数相加的方法,原型为:void printInfo(); Complex add(Complex anotherComplex); 重写父类Object的equals方法,相等逻辑为“若2个复数对象的实部和虚部分别对应相等,则这2个复数相等”。最后编写一个带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(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 + anotherComplex.getImage();return c;public boolean equals(Object obj) Complex c = (Complex) obj;return this.real = c.getReal() & this.image = c.getImage();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(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文档,编写MyDate类继承该类,并实现以下方法:MyDate(int year, int month, int day); / 根据指定的年月日构造日期对象int getYear(); / 得到当前日期的年份int getMonth(); / 得到当前日期的月份int getDayOfYear(); / 得到当前日期是本年的第几天int getDayOfMonth(); / 得到当前日期是本月的第几天int getDayOfWeek(); / 得到当前日期是本周的第几天(即星期几)MyDate getBeforeDate(int beforeDays);/ 得到当前日期之前若干天对应的日期对象MyDate getAfterDate(int afterDays); / 得到当前日期之后若干天对应的日期对象int daysBetweenWith(MyDate d); / 得到当前日期与指定日期d相隔多少天最后编写一个带main方法的测试类MyDateTest,分别测试MyDate中的各个方法。提示: 可通过父类GregorianCalendar相应方法的组合以实现上述各方法。 注意父类中根据年月日创建日历对象的构造方法中,月份参数是从0开始的。 */package ch06;import java.util.GregorianCalendar;class MyDate extends GregorianCalendar MyDate(int year, int month, int day) super

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论