《Java编程语言:原理与范例》课后实验源代码
更新时间:2024-05-03 05:21:01 阅读量: 综合文库 文档下载
第一章 实验一
package ch01;
import java.text.SimpleDateFormat; import java.util.Date;
class Timer extends Thread {
private SimpleDateFormat sdf = new SimpleDateFormat(\年MM月dd日 HH:mm:ss\
public void run() { while (true) {
System.out.print(\现在时间是:\ 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(\ } }
实验二
/*********************************
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,以最快的速度计算34×a的值。 **********************************/ package ch03;
public class Exp2_4 { public static void main(String[] args) { int a = 3; int b = (a << 5) + (a << 1);
System.out.println(a + \ } }
实验四
/*********************************
5. 字符型变量ch中存放着一个大小写未知的英文字母,判断其大小写后,将ch的值转为小写或大写字母(不允许使用加减运算符和if语句)。 **********************************/ package ch03;
public class Exp2_5 { public static void main(String[] args) { char ch = 'E'; ch = (char) ((ch & 32) == 0 ? ch | 32 : ch & (Integer.MAX_VALUE - 32)); System.out.println(\ } }
实验5
/*********************************
6. 使用嵌套的条件运算符,求a、b、c中的最大者。 **********************************/ package ch03;
public class Exp2_6 { public static void main(String[] args) { int a = 2, b = 4, c = 3; int max = (a > b ? a : b) > c ? (a > b ? a : b) : c; System.out.println(\ } }
第三章 实验一
/*********************************
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++) {
return i; } } return i; } void insert(int i, int x) { for (int j = a.length - 2; j >= i; j--) { a[j + 1] = a[j]; } a[i] = 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 setters public 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 int[m][n]; maxOfRows = new int[m]; minOfCols = new int[n]; // 以随机数填充矩阵 Random random = new Random(); for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { a[i][j] = random.nextInt(LIMIT); } } // 记录每行的最大值 int max; for (int i = 0; i < a.length; i++) { max = a[i][0]; for (int j = 1; j < a[i].length; j++) { if (max < a[i][j]) { max = a[i][j]; } } maxOfRows[i] = max; } // 记录每列的最小值 int min; for (int j = 0; j < a[0].length; j++) { min = a[0][j]; for (int i = 1; i < a.length; i++) {
if (min > a[i][j]) { min = a[i][j]; } } minOfCols[j] = min; } } // 打印矩阵 void printArray() { System.out.println(\得到的矩阵为:\ for (int i = 0; i < a.length; i++) { for (int j = 0; j < a[i].length; j++) { System.out.printf(\ } System.out.println(); } } // 找鞍点(可能有多个),返回类型为线性表类型(List),尖括号语法为泛型,表示线性表的元素为AnDian对象,具体看教材 List findAnDian() { List anDians = new ArrayList(); // 构造线性表对象 for (int i = 0; i < a.length; i++) { // 扫描矩阵中的每个元素 for (int j = 0; j < a[i].length; j++) { // 是当前行最大且当前列最小 if (a[i][j] == maxOfRows[i] && a[i][j] == minOfCols[j]) { AnDian p = new AnDian(i, j, a[i][j]); // 构造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) { // 返回的线性表元素个数为0
System.out.println(\没有鞍点。\ } else { int i = 0; for (AnDian e : anDians) { // 迭代性for循环的语法也可用于线性表类型 System.out.printf(\鞍点%-4d:a[%-3d][%-3d] = %-8d\\n\++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(\成功将\\\复制到 \\\。\ } }
实验五/*********************************
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 = a[a.length - 1]; for (int i = a.length - 2; i >= 0; i--) { a[i + 1] = a[i]; }
public class Exp7_5 extends JFrame { private JPanel[] thumbPanels; // 缩略图面板数组 private JLabel[] thumbLabels; // 缩略图标签数组 private File[] imageFiles; // 图片文件数组 private JScrollPane bottom; // 下部的可滚动面板 private int currentImageId = -1; // 当前查看的图片id private JLabel fullImageLabel; // 完整图片标签 private JButton next; // 下一张按钮 private JButton pre; // 上一张按钮 // 获得path路径下所有的图片,并生成面板 private JPanel[] getThumbPanels(String path) throws URISyntaxException { URL url = super.getClass().getClassLoader().getResource(path); File dir = new File(url.toURI()); // 图片根目录 imageFiles = dir.listFiles(); // 得到目录下的所有文件 thumbPanels = new JPanel[imageFiles.length]; thumbLabels = new JLabel[imageFiles.length]; // 鼠标点击缩略图标签的事件监听器 MouseListener mouseListener = new MouseAdapter() { public void mouseClicked(MouseEvent e) { JLabel clickedLabel = (JLabel) (e.getSource());// 得到点击的那个标签 for (int i = 0; i < thumbLabels.length; i++) {// 所有标签边框复位 thumbLabels[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); if (thumbLabels[i] == clickedLabel) { currentImageId = i; // 修改当前查看的图片id } } clickedLabel.setBorder(BorderFactory.createLineBorder(Color.RED, 5));// 点击的标签加框 ImageIcon image = new ImageIcon(imageFiles[currentImageId].getAbsolutePath()); // 伸缩图片到上部完整图片标签大小 image.setImage(image.getImage().getScaledInstance(fullImageLabel.getWidth(), fullImageLabel.getHeight(), Image.SCALE_DEFAULT)); fullImageLabel.setIcon(image); checkButtons();// 更新上一张/下一张按钮的状态 } // 鼠标进入缩略图标签时改变鼠标指针
public void mouseEntered(MouseEvent e) { JLabel imageLabel = (JLabel) (e.getSource()); imageLabel.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); } }; for (int i = 0; i < imageFiles.length; i++) { ImageIcon image = new ImageIcon(imageFiles[i].getAbsolutePath()); JPanel p = new JPanel(new BorderLayout()); thumbLabels[i] = new JLabel(); // 缩放图片到缩略图标签大小 thumbLabels[i].setIcon(new ImageIcon(image.getImage().getScaledInstance(100, 80, Image.SCALE_DEFAULT))); thumbLabels[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); thumbLabels[i].addMouseListener(mouseListener); // 加鼠标事件监听器 JLabel textLabel = new JLabel(imageFiles[i].getName()); // 图片下方文字标签 textLabel.setHorizontalAlignment(JLabel.CENTER); p.add(thumbLabels[i], BorderLayout.CENTER); p.add(textLabel, BorderLayout.SOUTH); thumbPanels[i] = p; } return thumbPanels; } void initUI() throws URISyntaxException { fullImageLabel = new JLabel(); fullImageLabel.setBorder(BorderFactory.createLineBorder(Color.RED)); next = new JButton(new ImageIcon(super.getClass().getClassLoader().getResource(\ pre = new JButton(new ImageIcon(super.getClass().getClassLoader().getResource(\ // 上一张/下一张按钮点击事件的监听器 ActionListener listener = new ActionListener() { public void actionPerformed(ActionEvent e) { if (e.getSource() == next) { currentImageId++; } else { currentImageId--; }
// 复位所有缩略图标签的边框 for (int i = 0; i < thumbLabels.length; i++) { thumbLabels[i].setBorder(BorderFactory.createLineBorder(Color.BLACK)); } // 选中相应的缩略图标签 thumbLabels[currentImageId].setBorder(BorderFactory.createLineBorder(Color.RED, 5)); // 滚到到该缩略图标签 bottom.getHorizontalScrollBar().setValue(thumbPanels[currentImageId].getLocation().x); // 改变上部的完整图片标签 ImageIcon image = new ImageIcon(imageFiles[currentImageId].getAbsolutePath()); image.setImage(image.getImage().getScaledInstance(fullImageLabel.getWidth(), fullImageLabel.getHeight(), Image.SCALE_DEFAULT)); fullImageLabel.setIcon(image); checkButtons(); } }; next.addActionListener(listener); pre.addActionListener(listener); JPanel buttonsPanel = new JPanel(); buttonsPanel.add(pre); buttonsPanel.add(next); // 上部面板(包含完整图片标签和2个按钮) JPanel top = new JPanel(new BorderLayout(0, 10)); top.add(fullImageLabel, BorderLayout.CENTER); top.add(buttonsPanel, BorderLayout.SOUTH); top.setSize(705, 410); top.setLocation(5, 5); add(top); // 下部缩略图面板 JPanel thumbPanel = new JPanel(); bottom = new JScrollPane(thumbPanel); JPanel[] thumbPanels = getThumbPanels(\ for (int i = 0; i < thumbPanels.length; i++) { thumbPanel.add(thumbPanels[i]);
}
}
}
setLayout(null);
bottom.setSize(705, 130); bottom.setLocation(5, 430); add(bottom);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); setResizable(false); setSize(720, 600); setVisible(true);
private void checkButtons() { if (currentImageId == 0) { // 第一张 pre.setEnabled(false); } if (currentImageId == imageFiles.length - 1) { // 最后一张 next.setEnabled(false); } if (currentImageId > 0 && currentImageId < imageFiles.length - 1) { pre.setEnabled(true); next.setEnabled(true); } }
public static void main(String[] args) throws URISyntaxException { Exp7_5 t = new Exp7_5(); t.initUI(); }
第八章 实验一
/*********************************
1. 点击窗口的关闭按钮时,弹出包含“是”和“否”选项的模态对话框, 点击“是”则关闭窗口,否则不关闭。 **********************************/ package ch09;
import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
public class Exp8_1 extends JFrame { void initUI() { addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { int b = JOptionPane.showConfirmDialog(Exp8_1.this, \确认要关闭按窗口吗?\提示\ if (b == JOptionPane.YES_OPTION) { System.exit(-1); } } }); setDefaultCloseOperation(JFrame.DO_NOTHING_ON_CLOSE); setResizable(false); setSize(600, 400); setVisible(true); } public static void main(String[] args) { Exp8_1 t = new Exp8_1(); t.initUI(); } }
实验二
/*********************************
2. 编写GUI程序模拟IE浏览器,具体要求如下。
① 在窗口顶部有一个可编辑的下拉列表,以输入网址。
② 若输入的网址之前未输入过,则添加到下拉列表中(模拟IE的历史记录)。 ③ 输入或选择了一个网址后,在窗口下部的编辑器面板中显示相应网页。 **********************************/
正在阅读:
护坡及挡土墙施工方案06-29
2017年小学生寒假安全知识教育内容02-15
关于辩证的否定观的研究04-24
生物分析化学作业05-23
今日基督徒普遍的可怜的光景01-26
三行情书大赛活动策划04-01
江苏无锡机械企业名录03-19
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- 编程语言
- 课后
- 范例
- 源代码
- 原理
- 实验
- Java
- 教学辅导一(导论—第一章)
- 刘长平传统文化
- 美术《做香囊,迎端午》教案
- 常微分方程期末复习
- 贵州省四校2013届高三上学期期末联考数学(理)试题
- 14#承台检验批质量验收记录表
- 材料科学基础复习题及答案
- 范文参考3 - 图文
- 大数据视角下企业财务管理问题探讨
- 初中数学复习教案
- 2017届高考语文一轮总复习导学案:扩展语句,压缩语段(全国通用含
- 管理统计学作业集
- UFV-200A - 3频率电压紧急控制装置技术及使用说明书
- 附表2、3“数字创作评比”推荐作品登记表、“数字创作评比”作品
- 苯和甲苯气相色谱实验条件的考察
- 全国计算机一级考试全真模拟题一
- 参观工地心 得 体 会
- 职校Photoshop平面设计期末试卷与答案
- 溧阳市实验小学《节日》课程方案 刘娟 - 图文
- 2018年高考语文复习:最新诗歌鉴赏与名句填空练习10套(答案)