Java-第六章程序清单
java答案第六章
Java语言程序设计第六章课后习题答案1.将本章例6-1至6-18中出现的文件的构造方法均改为使用File类对象作为参数实现。
个人理解:File类只能对整文件性质进行处理,而没法通过自己直接使用file.Read()或者是file.write()类似方法对文件内容进行写或者读取。
注意:是直接;下面只提供一个例2变化,其他的你自己做,10几道啊,出这题的人真他妈有病。
import java.io.*;public class test6_2{public static void main(String[] args) throws IOException { String fileName = "D:\\Hello.txt";File writer=new File(fileName);writer.createNewFile();BufferedWriter input = new BufferedWriter(newFileWriter(writer));input.write("Hello !\n");input.write("this is my first text file,\n");input.write("你还好吗?\n");input.close();}}运行结果:(电脑系统问题,没法换行,所以一般使用BuffereWriter中newLine()实现换行)2.模仿文本文件复制的例题,编写对二进制文件进行复制的程序.// CopyMaker类import java.io.*;class CopyMaker {String sourceName, destName;BufferedInputStream source;BufferedOutputStream dest;int line;//打开源文件和目标文件,无异常返回trueprivate boolean openFiles() {try {source = new BufferedInputStream(newFileInputStream( sourceName ));}catch ( IOException iox ) {System.out.println("Problem opening " + sourceName );return false;}try {dest = new BufferedOutputStream(newFileOutputStream( destName ));}catch ( IOException iox ){System.out.println("Problem opening " + destName );return false;}return true;}//复制文件private boolean copyFiles() {try {line = source.read();while ( line != -1 ) {dest.write(line);line = source.read();}}catch ( IOException iox ) {System.out.println("Problem reading or writing" );return false;}return true;}//关闭源文件和目标文件private boolean closeFiles() {boolean retVal=true;try { source.close(); }catch ( IOException iox ) {System.out.println("Problem closing " + sourceName );retVal = false;}try { dest.close(); }catch ( IOException iox ) {System.out.println("Problem closing " + destName );retVal = false;}return retVal;}//执行复制public boolean copy(String src, String dst ) {sourceName = src ;destName = dst ;return openFiles() && copyFiles() && closeFiles();}}//test6_2public class test6_2{public static void main ( String[] args ) {String s1="lin.txt",s2="newlin.txt";if(new CopyMaker().copy(s1, s2))S ystem.out.print("复制成功");elseS ystem.out.print("复制失败");}}运行前的两个文本:lin.txt和newlin.txt(为空)运行后:3.创建一存储若干随机整数的文本文件,文件名、整数的个数及范围均由键盘输入。
Java程序设计基础习题答案
Java程序设计基础课后习题参考答案第2章1. 关于Java Application 的入口方法main()的检验:main()方法的参数名是否可以改变?main()方法的参数个数是否可以改变?该方法名是否可以改变?参考答案:(1)main()方法的参数名可以改变。
(2)main()方法的参数个数不可以改变。
(3)该方法名不可以改变。
2. 当一个程序没有main()方法时,能编译吗?如果能编译,能运行吗?参考答案:当一个程序没有main()方法是,是可以编译通过的,但是不能给运行,因为找不到一个主函数入口。
3. 下列语句能否编译通过?byte i = 127;byte j = 128;long l1 = 999999;long l2 = 9999999999;参考答案:byte i 和long l1可以编译通过。
而byte j 和long l2 超出自身数据类型范围,所以编译失败。
4. 下列语句能否编译通过?float f1 = 3.5;float f2 = 3.5f;参考答案:java中浮点型的数据在不声明的情况下都是double型的,如果要表示一个数据是float型的,必须在数据后面加上“F”或“f”;因此,float f1 无法编译通过。
5. 验证int 和char,int和double等类型是否可以相互转换。
参考答案:(1)char类型可以转换为int 类型的,但是int类型无法转换为char类型的;(2)int 可以转换为double类型的,但是double类型无法转换为int 类型的。
6. 计算下列表达式,注意观察运算符优先级规则。
若有表达式是非法表达式,则指出不合法之处且进行解释。
(1) 4+5 == 6*2 (2) (4=5)/6(3) 9%2*7/3>17 (4) (4+5)<=6/3(5) 4+5%3!=7-2 (6) 4+5/6>=10%2参考答案:表达式(2)为不合法表达式,只能将值赋值给一个变量,因此其中(4=5)将5赋值给4是不合法的。
Java程序设计教程第6章6.2 类的方法
定义带参数的方法
public class ZhazhiJi {
public String zhazhi ( String fruit ) { String juice = fruit + "汁";
本章任务
4/61
会定义和使用类的无参方法 理解变量作用域 会添加JavaDoc注释 会定义带参方法 会使用带参方法 会创建包组织Java工程
本章目标
5/61
类的方法
按此按钮, 狮子开始跑
电动玩具狮子 属性:
颜色:黄色
问题
按此按钮, 狮子开始叫
行为: 跑 叫 抢球
写出狮子对象的“跑”方法、 “叫”方法、“抢 球”方法
public static void main(String[] args){
Student stu = new Student(); name = "神仙姐姐";
stu.sex
sex = 'F'; age = 18;
stu.age
stu.show();
}
}
3/61
实现计算平均分和课程总成绩 实现MyShopping系统菜单切换 实现MyShopping系统入口程序 实现客户信息的添加和显示 修改客户姓名 对客户姓名排序 实现模拟账户存取款功能
语法
对象名.方法名();
问题
小明过生日,爸爸送他一个电动狮子玩具,编程 测试这个狮子能否正常工作
10/61
方法调用
public class AutoLion {
String color = "黄色"; //颜色
/*跑*/ public void run(){
解析JAVA程序设计第六章课后答案
第6章习题解答1.简述Java中设计图形用户界面程序的主要步骤。
对于设计图形用户界面程序而言,一般分为两个步骤:第一步,设计相应的用户界面,并根据需要对相关的组件进行布局;第二步,添加相关的事件处理,如鼠标、菜单、按钮和键盘等事件。
2.试说明容器与组件之间的关系。
组件(component)是图形用户界面中的各种部件(如标签、按钮、文本框等等),所有的组件类都继承自JComponent类。
容器(container)是用来放置其他组件的一种特殊部件,在java中容器用Container类描述。
3.阅读下面程序,说明其运行结果和功能。
//filename:MyFrame.javaimport java.awt.*;import java.awt.event.*;import javax.swing.*;public class MyFrame{public static void main(String agrs[]){JFrame f=new JFrame("简单窗体示例");f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);JLabel l=new JLabel("习题1");f.getContentPane().add(l,BorderLayout.CENTER);f.pack();f.setVisible(true);}}程序的运行结果如下:4.阅读下面程序,说明其运行结果和功能。
//filename:TestButton.javaimport java.awt.*;import javax.swing.*;public class TestButton extends JFrame{JButton b1,b2;TestButton(String s){super(s);b1=new JButton("按钮1");b2=new JButton("按钮2");setLayout(new FlowLayout());add(b1);add(b2);setSize(300,100);setVisible(true);}public static void main(String args[]){ TestButton test;test=new TestButton("测试按钮"); }}程序的运行结果如下:5.阅读下面程序,说明其运行结果和功能。
程序清单1-5
double getRate(){return rate;}
double getDialledTime(){return dialledTime;}
void setBrand(String b){
brand=b;
}
void setNumber(String n){
mobile=new Mobilephone("NOKIA","13007091010","CDMA");
tel.setRate(0,2);
tel.setDialledTime(150);
mobile.setRate(0,4);
mobile.setDialledTime(80);
mobile.setReceivedTime(120);
void setNetwork(String n){
network=n;
}
void setReceivedTime(double d){
receivedtime=d;
}
double callCost
return(dialledTime+0.5*receivedTime)*rate;
}
tel.display();
System.out.println();
代码//显示移动电话的信息
}
}
number=n;
}
void setRate(String r){
rate=r;
}
void setDialledTime(double d){
Java课件6Java字符串
6.1 String 类— 字符串替换…
replace 方法可用于删除当前字符串 中的某个子串,例如: 中的某个子串,例如: String s1= ”abcabcabc”; s1 String s2= s2 s1.replace(”bc”,””); aaa” 则 s2 中的字符串为 “aaa”
面向对象的程序设计与 Java
第6章 Java字符串
1
主要内容
6.1 String 类 6.2 StringBuffer 类
2
6.1 String 类—基本情况…
Java 字符串是一个 unicode 字符序 列, 每个 unicode 是一个 16 位代码 用来表示一个字符。 , 用来表示一个字符。 Java 字符串表示为 String 对象或 StringBuffer 对象 String 类用来建立不需要改变的字符 串对象。 串对象。
6
6.1 String 类—构造方法
构造方法使用示例: 构造方法使用示例: String s1=new String(); s1 等效于: s1 等效于:String s1=””; char[] value={’J’,’a’,’v’,’a’, ’语’,’言’}; String s2=new String(value); s2 String s3=new String(s2); s3 String(s2
12
6.1 String 类—定位…
int indexOf(String str); 返回子串 str 在当前字符串中首次出现 的位置, str, 的位置,若未找到 str,返回 –1。 例如: 例如: String s = ”ABCDEFGH”; System.out.println( s.indexOf(”CDE”)); 将输出 2 。 int indexOf(String str, int from); 同上, 同上,但从下标 from 处开始查找 。
《Java》课程设计》记事本
《Java课程设计》记事本课程设计报告书目录一、设计课题二、设计目的三、操作环境四、设计场所(机房号、机器号或自己机器)五、设计过程(设计内容及主要程序模块)六、本次设计中用到的课程知识点(列出主要知识点)七、设计过程中遇到的问题及解决办法八、程序清单五、设计过程(设计内容及主要模块,不少于3000字)1.设计要求1)界面设计2)功能实现(1)文件菜单:新建、打开、保存、另存为、退出等。
(2)其中新建菜单项可以新建一个记事本程序;打开菜单项可以打开一个用户指定的文本文件,并将其内容显示在记事本的文本区域;保存和另存为菜单项可分别实现文件的保存和另存为3)编辑菜单:复制、剪切和粘贴等4)帮助菜单:软件版本信5)右键弹出快捷菜单2.总体设计1)功能模块图:图一功能模块图2)功能描述1、打开记事本。
首先是标准型的记事本,拥有文件、编辑。
格式和帮助。
如图1所示:图1标准型记事本界面2、在标准型的记事本界面中,进行的新建一个本件名字叫新记事本。
如图2记事本文件帮助新建打开保存另存为退出复制剪切粘贴编辑关于记事本右键快捷格式字体颜色图2新建记事本功能3、用打开文件打开刚刚新建的新记事本。
如图三所示。
图3—打开文件4、点击退出即可退出,如图4所示:图4—退出记事本5、点击帮助可以看到有关记事本的相关信息,其中有作者名、版本、许可条款、隐私声明等必要信息。
如图5所示:图5—帮助相关信息6、右键可实现复制、粘贴、剪切、清除等常用功能,方便用户可以快捷方便的使用记事本。
如图6所示:图6—右键功能7、编辑也可实现制、粘贴、剪切、清除等常用功能,方便用户选择自己适合的方式,自由选择方便的快捷方式使用。
如图7:图7—编辑八、程序清单package test;import java.io.File;import java.io.*;import java.awt.event.*;import java.awt.Toolkit;import java.awt.*;import javax.swing.*;import javax.swing.filechooser.*;public class Notebook extends JFrame implements ActionListener,ItemListener{ //组件创建JButton b_save,b_close; //按钮JTextArea textArea; //文本框File tempFile; //文件JPanel jp; //面板JMenu file,edit,style,help; //菜单JMenuItemf_new,f_open,f_save,f_close,f_saveas,e_copy, e_paste,e_cut,e_clear,e_selectAll,e_find,e_rep lace,s_font,s_color,h_editor,h_help; //菜单条JMenuBar jmb;JScrollPane jsp; //滚动面板JPopupMenu popUpMenu = new JPopupMenu(); //右键弹出式菜单JLabel stateBar;//标签JLabel jl,jj;JFileChooser jfc = new JFileChooser(); //文件选择JMenuItemje_copy,je_paste,je_cut,je_clear,je_selectAll,je _find,je_replace; //弹出式菜单条public Notebook(){jfc.addChoosableFileFilter(new FileNameExtensionFilter("文本文件(*.txt)","txt"));jmb = new JMenuBar();textArea = new JTextArea();jsp = new JScrollPane(textArea);file = new JMenu("文件");edit = new JMenu("编辑");style = new JMenu("格式");help = new JMenu("帮助");je_copy = new JMenuItem("复制(C) ");je_paste = new JMenuItem("粘贴(P) ");je_cut = new JMenuItem("剪切(X) ");je_clear = new JMenuItem("清除(D) ");je_selectAll = new JMenuItem("全选(A) ");je_find = new JMenuItem("查找(F) ");je_replace = new JMenuItem("替换(R) ");je_copy.addActionListener(this); //给弹窗式的各组件添加监听器je_paste.addActionListener(this);je_cut.addActionListener(this);je_clear.addActionListener(this);je_selectAll.addActionListener(this);je_find.addActionListener(this);je_replace.addActionListener(this);//给界面上方的菜单条添加监听器f_new = new JMenuItem("新建(N)");f_new.setAccelerator(KeyStroke.getKeyS troke('N',InputEvent.CTRL_MASK,false)); //设置带修饰符快捷键f_new.addActionListener(this);f_open = new JMenuItem("打开(O)");f_open.setAccelerator(KeyStroke.getKey Stroke('O',InputEvent.CTRL_MASK,false));f_open.addActionListener(this);f_save = new JMenuItem("保存(S)");f_save.setAccelerator(KeyStroke.getKey Stroke('S',InputEvent.CTRL_MASK,false));f_save.addActionListener(this);f_saveas = new JMenuItem("另存为");f_saveas.setAccelerator(KeyStroke.getKe yStroke(KeyEvent.VK_S,InputEvent.CTRL_ MASK|InputEvent.SHIFT_MASK));f_saveas.addActionListener(this);f_close = new JMenuItem("退出(W)");f_close.setAccelerator(KeyStroke.getKey Stroke('W',InputEvent.CTRL_MASK,false));f_close.addActionListener(this);e_copy = new JMenuItem("复制(C)");e_copy.setAccelerator(KeyStroke.getKey Stroke('C',InputEvent.CTRL_MASK,false));e_copy.addActionListener(this);e_paste = new JMenuItem("粘贴(V)");e_paste.setAccelerator(KeyStroke.getKeyStro ke('V',InputEvent.CTRL_MASK,false));e_paste.addActionListener(this);e_cut = new JMenuItem("剪切(X)"); e_cut.setAccelerator(KeyStroke.getKeyStroke ('X',InputEvent.CTRL_MASK,false));e_cut.addActionListener(this);e_clear = new JMenuItem("清除(D)");e_clear.setAccelerator(KeyStroke.getKeyStrok e('D',InputEvent.CTRL_MASK,false));e_clear.addActionListener(this);e_selectAll = new JMenuItem("全选(A)");e_selectAll.setAccelerator(KeyStroke.getKey Stroke('A',InputEvent.CTRL_MASK,false));e_selectAll.addActionListener(this);e_find = new JMenuItem("查找(F)");e_find.setAccelerator(KeyStroke.getKeyStrok e('F',InputEvent.CTRL_MASK,false));e_copy.addActionListener(this);e_replace = new JMenuItem("替换(R)");e_replace.setAccelerator(KeyStroke.getK eyStroke('R',InputEvent.CTRL_MASK,false)) ;e_replace.addActionListener(this);s_font = new JMenuItem("字体(T)");s_font.setAccelerator(KeyStroke.getKeyStrok e('T',InputEvent.CTRL_MASK,false));s_font.addActionListener(this);s_color = new JMenuItem("颜色(C)...");s_color.setAccelerator(KeyStroke.getKeyStro ke(KeyEvent.VK_C,InputEvent.CTRL_MAS K | InputEvent.SHIFT_MASK));s_color.addActionListener(this);h_editor = new JMenuItem("关于记事本");h_editor.setAccelerator(KeyStroke.getKeyStro ke(KeyEvent.VK_E,InputEvent.CTRL_MAS K));h_editor.addActionListener(this);h_help = new JMenuItem("帮助信息(H)");h_help.setAccelerator(KeyStroke.getKeyStrok e(KeyEvent.VK_I,InputEvent.CTRL_MASK) );h_help.addActionListener(this);//添加右键弹出式菜单popUpMenu.add(je_copy);popUpMenu.add(je_paste);popUpMenu.add(je_cut);popUpMenu.add(je_clear);popUpMenu.addSeparator();popUpMenu.add(je_selectAll);popUpMenu.add(je_find);popUpMenu.add(je_replace);//编辑区鼠标事件,点击右键弹出"编辑"菜单textArea.addMouseListener(new MouseAdapter(){public void mouseReleased(MouseEvent e) {if(e.getButton() == MouseEvent.BUTTON3)popUpMenu.show(e.getComponent(), e.getX(), e.getY());} //e.getComponent()和textArea具有同等效果public void mouseClicked(MouseEvent e){if(e.getButton() == MouseEvent.BUTTON1)popUpMenu.setVisible(false);}});this.setJMenuBar(jmb);this.setTitle("记事本程序");file.add(f_new); //添加文件菜单组件file.add(f_open);file.addSeparator(); //加分隔线file.add(f_save);file.add(f_saveas);file.addSeparator();file.add(f_close);edit.add(e_copy); //添加编辑菜单组件edit.add(e_paste);edit.add(e_cut);edit.add(e_clear);edit.addSeparator();edit.add(e_selectAll);edit.add(e_find);edit.add(e_replace);style.addSeparator();style.add(s_font);style.add(s_color);jmb.add(file); //添加格式菜单组件jmb.add(edit);jmb.add(style);jmb.add(help);help.add(h_editor); //添加帮助菜单组件help.add(h_help);//textArea.setWrapStyleWord(true); //设置在单词过长的时候是否要把长单词移到下一行。
Java程序设计精编教程5-8章知识点
b) 如果变量名由多个单词组成,从第 2 个单词开始的每个单词的首字母要大写。
方法
方法的定义包括两部分:方法声明和方法体。一般格式为:
方法声明部分 {
方法体的内容
}
方法声明
方法声明包括返回值类型、方法名和参数。
double getArea() { //返回值类型为 double,无参数。
…
}
方法的返回值类型可以是 Java 中的任意数据类型。如果一个方法不返回数据,返回值类型必须是 void。
2. 有一个类 Singleton,为该类设计单例模式(该类只能有一个实例,且不能在类的外部 new 对象),只能通过该类 的静态方法 getInstance()获取该类的唯一对象。在主类 Homework2 中测试单例模式的有效性。
b) 在实例方法中,不仅可以调用实例方法,也可以调用类方法。 2) 类名调用类方法
a) 在类方法中,只能调用类方法、操作类变量。 b) 也可以通过对象调用类方法。 c) 如果一个方法不需要操作实例变量就可以实现某种功能,可以考虑将其声明为类方法。(例 5-8) 5.7 方法重载与多态 Java 中有两种多态:重载(overload)和重写(override)。 方法重载(overload):一个类中可以有多个名字相同的方法,但这些方法的参数必须不同,或者参数的个数不同, 或者参数的类型不同。方法的返回值类型与重载无关。
5.8 this 关键字 this 只能出现在实例方法和构造方法(也属于实例方法)中,表示调用该方法的当前对象。 一般情况下,方法中 this.实例变量的 this 可省略、类名.类变量的类名可省略,但当局部变量与成员变量同名时,
this 或类名不能省略。 5.9 包
包是 Java 语言管理类的一种机制,类似于操作系统中的目录,使用包名可以有效区分名字相同的类。 包语句
06-继承与覆盖
第6章继承与覆盖继承是指一种类继承另一种类的成员(成员变量和成员方法),被继承的类称为父类(也称超类或基类),继承了父类的类则称为子类。
覆盖是指子类成员对同名的父类成员进行修改或重写的现象。
图6-1所示,读者是一个父类,它有两子类,即学生和教师。
学生和教师继承了读者的属性。
如,读者具有借书证号码、姓名等静态属性。
读者的子类(学生、老师)也继承了这些属性。
读者具有借书、还书等动态特征,所以,其子类(学生、老师)也具有借书、还书等特征。
学生教师图6-1 父类与子类6.1 子类在声明类时,通过使用关键字extends继承一个已定义好的类(父类),定义一个新的类(子类)。
1.定义子类的格式class 子类名extends父类名47{//子类的成员变量和方法的定义写在这里}2.继承规则(1)如果子类和父类在同一个包中,那么子类继承了父类中除private以外的成员。
(2) 如果子类和父类在不同的包中,则子类只能继承父类中的protected、public成员。
(3)子类不能继承父类中的构造方法。
6.2 super关键字如果子类中定义了与父类同名的成员变量,则父类中的成员变量不能被子类继承,此时称子类的成员变量隐藏了父类的成员变量;如果子类中定义了一与父类同名的方法,则父类的这个方法在子类中被隐藏,也不能被子类继承下来。
如果要在子类中使用被隐藏的父类成员,或者使用父类中的构造方法,就必须在子类中使用关键字super。
1.调用父类构造方法子类不能继承父类的构造方法,因此要使用父类的构造方法,必须在子类的构造方法中使用关键字super,而且super必须是子类构造方法中的头一条语句。
【例6.1】在子类定义的构造方法中调用父类的构造方法。
程序清单6-1 superDemo.javaclass ProgramLanguage //定义父类ProgramLanguage{ int year;String name;ProgramLanguage(int year,String name){ this.year=year; =name;System.out.println(name+" is born in "+year);}}class Java extends ProgramLanguage//定义子类Java{ Java(int year,String name){super(year,name); //调用父类构造方法对父类成员变量初始化}}public class superDemo//定义测试类superDemo{ public static void main(String args[]){Java j2me=new Java(1991,"java");}4748}(1)在子类中调用父类构造方法的唯一方式是:super()或者super(参数表)。
Java程序设计第2版第六章.ppt
2020/4/6
1
通过本章的学习,主要掌握以下知识点:
类的基本概念 对象的创建与使用 对象的使用 成员的调用
本章的重点:
创建类
本章的难点:
类修饰符 成员数量与成员方法修饰符
2020/4/6
2
在前面的章节中,对Java的简单数据类型、 数组、运算符和表达式及流程控制的方法作了详细 的介绍。从本章开始将介绍面向对象的程序设计方 法。面向对象的编程思想是力图使在计算机语言中 对事物的描述与现实世界中该事物的本来面目尽可 能的一致。所以在面向对象的程序设计中, 类(Class)和对象(Object)是面向对象程序设计方 法中最核心概念。
• 例:
变量 name--鱼名称
color--鱼颜色 函数
setValue() --赋值 name、color
output()-- 显示 name、color
分别用“面向过程”、“面向对象” 编程思想实 现。
2020/4/6
5
1. 面向过程源程序: Fish.c
# include <stdio.h>
//属性变量color--描述鱼的颜色
void setValue (String n, String c ) //方法setValue :给成员变量赋值
{ name=n;
color=c;
}
void output( )
//方法output :显示成员变量
{ System.out.println (name); System.out.println (color);
char name[20]=“ ”; char color[20]=“ ”; main() { void setValue(char n[], char c[]);
JavaEE第6章
6-5-3 修改文件权限的 Shell命令(chgrp)
2、chgrp命令 格式:chgrp 组群 文件 功能:改变文件的所属组群。 [ 例 6-14] 将 ex1 文件所属的组群由 root 该为 staff。
6-5-3 修改文件权限的 Shell命令(chown)
3、chown命令 格式:chown 文件所有者[:组群] 文件 功能:改变文件的所有者,并可一并修改 文件的所属组群。 [ 例 6-15] 将 文 件 ex1 的 所 有 者 由 root 改 为 hellen。
-name 文件、-g 组群名、-user 用户名、-type 文件类 型、-size [+|-]文件大小 [例6-24] 查找/etc目录中以“fs”开头的文件和目录。
6-6-2 管理目录和文件的 Shell命令(grep)
7、grep命令 格式:grep [选项] 字符串 文件列表 功能:从指定文本文件或标准输出中查找符合条 件的字符串,默认显示其所在行的内容。 主要选项说明:
–桌面环境下选中要修改文件权限的文件,单 击鼠标右键,弹出快捷菜单,选择「属性」, 弹出文件的「属性」对话框,单击「权限」 选项卡 。
• 6-5-3 修改文件权限的Shell命令
6-5-1 文件权限的含义(1)
1、访问权限
–读取权限:浏览文件/目录中内容的权限。 –写入权限:对文件而言是修改文件内容的权 限;或对目录而言是删除、添加和重命名目 录内文件的权限。 –执行权限:对可执行文件而言是允许执行的 权限;而对目录来讲是进入目录的权限。
6-2-2 管理磁盘的Shell命令 ( fsck )
5、命令 格式:fsck 设备 功能:检查并修复文件系统。 [例6-9] 检查软盘上的文件系统。
三.源程序清单
三.源程序清单import java.util.*;import java.io.*;import javax.swing.*;import java.awt.event.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import java.awt.*;import java.awt.event.*;import javax.swing.tree.*;import javax.swing.event.*;class MyFrame extends Frame implements ActionListener{Label lab1,lab2; //首先对用户登录框对进行设计TextField text1,text2;Button button;MyFrame(String s){super(s);setSize(400,120);setVisible(true);setForeground(Color.blue);setBackground(Color.pink);setLayout(new GridLayout(3,2,8,8));lab1=new Label("用户名");lab2=new Label("密码");text1=new TextField(10);text2=new TextField(10);button=new Button("登录");add(lab1);add(text1);add(lab2);add(text2);add(button);button.addActionListener(this);}public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ button.setLabel("登录成功"); //用户名和密码正确后显示登陆成功 Mytree fr=new Mytree();fr.validate();}}}class Mytree extends JFrame implements TreeSelectionListener{JTree tree=null;JPanel text=new JPanel() ;JSplitPane splitPane;Mytree(){Container con=getContentPane();DefaultMutableTreeNode root=new DefaultMutableTreeNode("图书管理系统" );DefaultMutableTreeNode t1=new DefaultMutableTreeNode("显示所有图书 ");DefaultMutableTreeNode t3=new DefaultMutableTreeNode("添加");DefaultMutableTreeNode t2=new DefaultMutableTreeNode("查询 ");root.add(t2); root.add(t3);root.add(t1);tree=new JTree(root);JScrollPane scrollPane=new JScrollPane(text) ;splitPane=new JSplitPane (JSplitPane.HORIZONTAL_SPLIT,true,tree,text);splitPane=new JSplitPane (JSplitPane.HORIZONTAL_SPLIT,true);splitPane.add(tree,0);tree.addTreeSelectionListener(this);con.add(splitPane);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});setVisible(true);setBounds(100,100,500,500);}public void valueChanged(TreeSelectionEvent e){if(e.getSource()==tree){DefaultMutableTreeNode node=(DefaultMutableTreeNode)tree.getLastSelectedPathComponent();if( node.getUserObject().toString().equals("添加")){show fr=new show( );text.add(fr);splitPane.add(text);}else if( node.getUserObject().toString().equals("查询")){ MyFrame1 my1=new MyFrame1();text.add(my1);splitPane.add(text);}else if( node.getUserObject().toString().equals("显示所有图书")){ MyFrame2 my2=new MyFrame2();text.add(my2); splitPane.add(text);}}}}class tianjia //定义一个“添加图书”的类{ String 书名,作者,出版社,内容简介;tianjia(String 书名, String 作者, String 出版社, String 内容简介){this.书名=书名;this.作者=作者;this.出版社 =出版社 ;this.内容简介=内容简介;}}class show extends Panel implements ActionListener{LinkedList 书单=null;JTextField 书名文本框=new JTextField();JTextField 作者文本框=new JTextField();JTextField 出版社文本框=new JTextField();JTextField 内容简介文本框=new JTextField(); JButton badd=new JButton("添加图书");show(){书单=new LinkedList();setLayout(new GridLayout(5,2));setSize(300,300);add(new Label("输入书名:"));add(书名文本框);add(new Label("输入作者:"));add(作者文本框);add(new Label("输入出版社:"));add(出版社文本框);add(new Label("输入内容简介:"));add(内容简介文本框);add(new Label("点击添加"));add(badd);badd.addActionListener(this) ;setBackground(Color.pink);setBackground(Color.pink);}public void actionPerformed(ActionEvent e){ if(e.getSource()==badd){String shuming=null; String zuozhe=null;String chubanshe=null; String neirongjianjie=null;shuming=书名文本框.getText();zuozhe=作者文本框.getText();chubanshe=出版社文本框.getText();neirongjianjie=内容简介文本框.getText();tianjia tj=new tianjia(shuming,zuozhe,chubanshe,neirongjianjie);书单.add(tj);try{FileOutputStream file=new FileOutputStream("shudan.txt");ObjectOutputStream out=new ObjectOutputStream(file);out.writeObject(书单);out.close();}catch(IOException event){System.out.print("找不到书单"); }}}}class chaxun //定义查询的类{String 书名,作者,出版社,内容简介;chaxun(String 书名, String 作者, String 出版社, String 内容简介){this.书名=书名;this.作者=作者;this.出版社 =出版社 ;this.内容简介=内容简介;}}class MyFrame1 extends Panel implements ActionListener{ Button button ;TextArea text;TextField t;Label lab1,lab2,lab3;LinkedList l=null;MyFrame1(){l=new LinkedList();lab1=new Label("请输入要查询的书名");lab2=new Label("点击查询");lab3=new Label("查询结果");button=new Button("查询");text=new TextArea(20,20); //查询框的设置t=new TextField(10);setLayout(new FlowLayout() );setBackground(Color.pink);setBackground(Color.pink);add(lab1);add(t);add(lab2);add(button);add(lab3);add(text);button.addActionListener(this);setSize(300,300);setVisible(true);}public void actionPerformed(ActionEvent e){if(e.getSource()==button){String sh=t.getText();try { FileInputStream comein=new FileInputStream("shudan.txt");ObjectInputStream in=new ObjectInputStream(comein);l=(LinkedList)in.readObject();in.close();}catch(ClassNotFoundException event){ }catch(IOException event){System.out.print("找不到书单"); }for(int i=0;i<l.size();i++){chaxun c=(chaxun)l.get(i);if(c.书名.equals(sh)){text.append("书名"+c.书名+" ");text.append("作者 "+c.作者 +" ");text.append("出版社 "+c.出版社 +" ");text.append("内容简介 "+c.内容简介 +" ");text.append("\n");text.setBackground(Color.cyan);}}}else{text.append("找不到"); }}}class tianjia1{String 书名,作者,出版社,内容简介;tianjia1(String 书名, String 作者, String 出版社, String 内容简介){this.书名=书名;this.作者=作者;this.出版社 =出版社 ;this.内容简介=内容简介;}}class MyFrame2 extends Panel implements ActionListener{ LinkedList 书单= null;TextArea text ;Button button;MyFrame2( ){ LinkedList 书单=new LinkedList();text=new TextArea(20,20);button=new Button("查询");setLayout(new FlowLayout() );add(text); add(button);button.addActionListener(this);setSize(400,120);setVisible(true);setForeground(Color.blue); setBackground(Color.pink);}public void actionPerformed(ActionEvent e){ if(e.getSource()==button){ try { FileInputStream comein=new FileInputStream("shudan.txt");ObjectInputStream in=new ObjectInputStream(comein);书单=(LinkedList)in.readObject();}catch(ClassNotFoundException event){ }catch(IOException event){System.out.print("找不到书单"); }Iterator iter= 书单.listIterator();while (iter.hasNext()){tianjia tj=(tianjia)iter.next();text.append("书名"+tj.书名+" ");text.append("作者 "+tj.作者 +" ");text.append("出版社 "+tj.出版社 +" ");text.append("内容简介 "+tj.内容简介 +" ");text.append("\n");}}}}public class a{public static void main(String args[]){ MyFrame f=new MyFrame("欢迎登录图书管理系统");f.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});f.validate();}}。
IhjtgnJava课程设计报告
秋风清,秋月明,落叶聚还散,寒鸦栖复惊。
湖南农业大学Java课程设计报告计算器软件设计学生姓名:学号:年级专业:指导老师:学院:湖南·长沙提交日期:2007年12月目录1. 前言 (2)2.概要设计 (3)2.1 开发环境 (3)2.2 计算器功能 (3)2.3 界面设计 (3)2.4 类UML图 (4)3. 详细设计 (4)3.1 使用的JAVA类的说明 (4)3.2 类的主要方法 (5)3.2.1 处理按了运算符后的计算 (5)3.2.2 处理输入字符 (6)3.2.3 进制的转换 (6)3.2.4 设计总体认识 (7)3.2.5 程序流程图 (8)4. 运行结果 (8)5. 测试分析 (9)5.1 程序运行情况 (9)5.2 程序异常处理 (9)6. 源程序 (9)参考文献 (27)致谢 (27)摘要:该程序是一个图形界面的简单的java计算器,具有良好的界面,使用人员能快捷简单地进行操作。
即时准确地获得需要的计算的结果,充分降低了数字计算的难度和节约了时间,对人们的生活有一定的帮助。
可以进行简单的四则运算(加、减、乘、除,以及开平方)但仅限于十进制下,还可以进行(八进制,十进制,十六进制)之间的相互转换,八进制最多可以输入19位数,十进制最多可以输入18位数,十六进制最多可以输入14位数,backspace表示退格, clear 表示初始化,sqrt表示开平方,界面为灰白对称。
关键字:java、计算器类、方法、事件1 前言随着科学技术的不断发展,计算机已经成为我们工作学习和生活中不可缺少的工具。
文本编辑器是个人计算机最司空见惯的应用程序了,在学习了Java语言之后,我决定使用Java语言编写一个简单的计算器,可以实现简单的运算功能,满足日常基本的工作学习和娱乐需要。
Java是由Sun公司开发的新一代纯面向对象的网络编程语言。
其目标是建立一种在任意种机器、任一种操作系统的网络环境中运行的软件,实行所谓的“程序写一次,到处运行”的目标。
第6章 注册功能的实现
6.2 输出信息及提取表单数据
6.2.2 使用out对象输出信息
通常可使用out对象的print()和println()方法把
内容写入输出缓冲区。
例如: <% out.println("hello"); out.print("Happy new year."); %>
为了提取一个参数的所有取值,可采用request 对象的getParameterValues方法,该方法返 回一个字符串类型的数组,格式为:
String [ ] getParameterValues(String parameterName)
案例:参考例6.2
6.2 输出信息及提取表单数据
6.2.6 拓展与提高
6.2.3 使用request对象读取请求参数
request对象
当客户端向服务器发起一个请求时,通常会把自身的 一些信息,例如:用户填写的表单数据、保存在客户 端的Cookie信息、客户端的IP地址等一起发送给服 务器。服务器将来自客户端的请求信息封装到 request对象中,而被请求的页面就可以使用 request对象来获取这些信息。封装在请求中的信息 通常简称为“请求信息”,客户端发送给所请求页面 的表单数据等通常被称为“请求参
6.2 输出信息及提取表单数据
6.2.2 使用out对象输出信息
out对象
使用内置对象out可以向客户端输出信息。默认情 况下,这些输出内容先写到一个输出缓冲区中,当 发生下面3种情况之一,才会将缓冲区中的内容送 往客户端:
该页面所有的信息都已输出到缓冲区中 输出缓冲区已满
java黑皮书第六章第22题 (2)
java黑皮书第六章第22题标题:Java黑皮书第六章第22题解析引言概述:Java黑皮书是Java语言领域的经典著作之一,其中第六章第22题是一个具有挑战性的问题。
本文将对该题进行深入解析,从五个大点出发,分别对每个大点进行详细阐述,最后通过总结来概括解题思路和要点。
正文内容:1. 大点一:题目背景和要求1.1 题目背景介绍1.2 题目要求概述1.3 解题思路简述2. 大点二:解题步骤2.1 步骤一:输入处理2.1.1 获取输入数据2.1.2 数据预处理2.1.3 异常处理2.2 步骤二:算法设计2.2.1 算法思路解析2.2.2 数据结构选择2.2.3 算法实现2.3 步骤三:输出结果2.3.1 结果展示格式2.3.2 结果输出方式选择2.3.3 输出结果的正确性验证3. 大点三:算法复杂度分析3.1 时间复杂度分析3.2 空间复杂度分析3.3 算法优化思考4. 大点四:测试样例和结果分析4.1 测试样例设计4.2 测试结果分析4.3 异常情况处理5. 大点五:实际应用和拓展思考5.1 实际应用场景5.2 拓展思考和改进方向5.3 相关知识点延伸总结:通过对Java黑皮书第六章第22题的详细解析,我们对题目的背景和要求有了清晰的认识。
在解题过程中,我们按照步骤一、步骤二和步骤三的顺序进行了问题的处理、算法设计和结果输出。
同时,我们还进行了算法复杂度分析、测试样例和结果分析,并对实际应用和拓展思考进行了讨论。
通过本题的解析,不仅加深了对Java编程的理解,还提升了解决问题的能力和思维拓展。
java核心课件2第6章
public static void deregisterDriver(Driver driver)throws SQLException 删除驱动程序管理器中的一个驱动程序。
双击
最后确定
6.4 JDBC编程的基本步骤
❖ 简单的说JDBC主要完成三件事:
第一与数据库建立连接; 第二向数据库发送SQL语句; 第三处理数据库返回结果。
❖ 具体步骤如下:
第一步:向驱动程序管理器加载、注册JDBC驱动程序。 第二步:获得特定 的数据库连接。 第三步:得到SQL语句容器,并发送SQL语句。 第四步:如果 SQL语言有结果集返回的话 ,处理结果集 。 第五步:关闭数据库连接,这一步非常重要,因为数据
❖ 注意异常处理
6.4.4 得到SQL语句容器,并向数据库发送SQL语句
获得SQL语句容器的方法定义在Connection接口中,通过Connection接口我们 可以得到三种类型的容器,如下所示: (1) public Statement createStatement()throws SQLException 获得SQL语句的容器结果不可滚动不可更新。 (2)public PreparedStatement preparedStatement(String sql) throws
库连接是一种非常宝贵的资源,在使用完毕后,必须关 闭数据库连接,应放在finally语句中。
JDBC 程序访问数据库的步骤 2-1
开始
导入 java.sql包
加载并注册驱动程序 创建一个 Connection 对象
第5、6章-java2实用教程PPT课件
ng,java.io,java.math,java.util
java.applet,java.awt,java.awt.datatransfer
java.awt.event,java.awt.image,java.beans
,java.rmi,java.security,java.sql等
第五、六章 Java基础类
-字符串、日期、时间、数字
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java 基础类库简介
(Java2实用教程-4.18、第5、6章)
Java基础类库
– Java提供了用于语言开发的类库,称为
包 的 应 用
Java基础类库(JFC,Java Foundational Class) , 也称应用程序编程接口(API,Application Programming Interface),分别放在不同的包中
包
的类,包括
的
Object类
应
数据类型包裹类(the Data Type Wrapper)
用
字符串类(String、StringBuffer)
数学类(Math)
系统和运行时类(System、Runtime)
类操作类
.
4
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续)
– Float.parseFloat(“123.11”) //返回float型
– Long.parseLong(“123456”) //返回long型
.
8
JAVA语言程序设计
清华大学 郑莉
4.6.1 Java基础类库简介(续) (参加补充章节) ——常量字符串类String
打印对象和toString方法
打印对象和toString⽅法JAVA对象java对象是都是Object类的实例,都可直接调⽤该类中定义的⽅法,这些⽅法提供了处理java对象的通⽤⽅法。
> > 6.2.1打印对象和toString⽅法先看下⾯程序:程序清单:codes/06/6-2/PrintObjectjavapublic class PrintObject{public static void main(String args[]){Person p = new Person("帅⽓de猪⼋戒");System.out.println(p.toString()); //跟p.toString()效果⼀样}}class Person {private String name;public Person(String name){ = name;}public void info(){System.out.println("此⼈名为:" + name);}}输出:String.Person@c17164当读者运⾏上⾯程序时,可能看到不同的输出结果:@符号后的6位16进制数字可能发⽣改变但这个输出结果是怎么来的呢?System.out.println⽅法只能在控制台输出字符串.当使⽤该⽅法输出Person对象时,实际上输出的是Person对象的toString()⽅法的返回值,也就是说,下⾯代码结果完全⼀样: System.out.println(p);System.out.println(p.toString());toString⽅法是Object类⾥的⼀个实例⽅法,所有Java类都是Object类的⼦类,因此所有Java对象都具有toString⽅法。
不仅如此,所有Java对象都可以和字符串进⾏连接运算,当Java对象和字符串进⾏连接运算时,系统⾃动调⽤Java对象toString⽅法的返回值和字符串进⾏连接运算,即下⾯两⾏代码的结果也完全相同:String pStr = p + "";String pstr = p.toString() + "";toString⽅法是⼀个⾮常特殊的⽅法,它是⼀个“⾃我描述”⽅法,该⽅法通常⽤于实现这样⼀个功能:当程序员直接打印该对象时,系统将会输出该对象的“⾃我描述”信息,⽤以告诉外界该对象具有的状态信息。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
习题6.2(求一个整数各位数之和)import java.util.Scanner;public class sumIf {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.print("请输入一个整数:");Scanner input = new Scanner(System.in);long n = input.nextInt();System.out.print("输入的整数i="+ n+ "的各个数字的和是"+ sumDigits(n));}public static long sumDigits(long k){long sum = 0;while( k != 0) {sum += k % 10;k /= 10;}return sum;}}习题6.4(反向显示一个整数)import java.util.Scanner;public class reverse {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.print("请输入一个整数");Scanner input = new Scanner(System.in);int number1 = input.nextInt();reverse(number1);}public static int reverse(int number) {int i;while(number != 0){System.out.print(number%10);number /= 10;}return 0;}}习题6.6(显示图案,此方法只能在10以内对其)import java.util.*;public class displayPattern1 {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.print("请输入一个整数");Scanner input = new Scanner(System.in);int n = input.nextInt();displayPattern(n);}public static void displayPattern(int i) { for(int j = 1; j <= i; j++) {for(int k = 0; k < i-j; k++) {System.out.print(" ");//if(j >= 10)System.out.print(" ");}for(int k = j; k > 0; k--) {System.out.print(k + " ");}System.out.println();}}}程序清单6-1(调用max方法)public class TestMax {public static void main(String[] args) {// TODO Auto-generated method stubint i = 5;int j = 2;int k = max(i, j);System.out.println("the maxinum of " + i + " and " + j + " is " + k);}public static int max(int num1, int num2) {int result;if (num1 > num2)result = num1;elseresult = num2;return result;}}程序清单6-2(void方法示例,打印给定分数的等级)public class TestVoidMethod {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.print("The grade is ");printGrade(78.5);System.out.print("The grade is ");printGrade(59.5);}public static void printGrade(double score) {if(score >=90.0) {System.out.println('A');}else if(score >=80.0) {System.out.println('B');}else if(score >=70.0) {System.out.println('C');}else if(score >=60.0) {System.out.println('D');}else {System.out.println('F');}}}程序清单6-3(void方法的示例,与程序清单做对比,打印一个分数的等级)public class TestReturnVoidMethod {public static void main(String[] args) {System.out.print("The frade is " + getGrade(78.5));System.out.print("\nThe frade is " + getGrade(59.5));}public static char getGrade(double score) {if (score >= 90)return'A';else if (score >= 80)return'B';else if (score >= 70)return'C';else if (score >= 60)return'D';elsereturn'F';}}程序清单6-4(通过传值进行参数传递)public class Increment {public static void main(String[] args) {// TODO Auto-generated method stubint x = 1;;System.out.println("Before the call, x is" + x);increment(x);System.out.println("After the call, x is" + x);}public static void increment(int n) {n++;System.out.println("n inside the method is " + n);}}程序清单6-5(按值传递参数)public class TestPassByValue {public static void main(String[] args) {// TODO Auto-generated method stubint num1 = 1;int num2 = 2;System.out.println("Before invoking the s, num1 is " +num1 +" and num2 is " + num2);s);System.out.println("After invoking the s, num1 is " +num1 + " and num2 " + num2);}public static void s n1, int n2) {System.out.println("\tIside the method");System.out.println("\t\tBefore s, n1 is " + n1 + " and n2 is " + n2);int temp = n1;n1 = n2;n2 = temp;System.out.println("\t\tAfter s, n1 is " + n1 + " and n2 is " + n2);}}程序清单6-6(程序模块化_求最大公约数)import java.util.Scanner;public class GreatestCommonDivisorMethod {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.print("Enter first integer: ");int n1 = input.nextInt();System.out.print("Enter scond integer: ");int n2 = input.nextInt();System.out.println("The greatest common divisor for " + n1 + " and "+ n2 + " is " + gcd(n1, n2));}public static int gcd(int n1, int n2) {int gcd = 1;int k = 2;while (k <= n1 && k <= n2) {if (n1 % k ==0 && n2 % k == 0)gcd = k;k++;}return gcd;}}程序清单6-7(程序模块化,打印50以内的素数,输出结果与书上不一致)public class PrimeNumberMethod {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("The first 50 prime numbers are \n");printprimeNumbers(50);}public static void printprimeNumbers(int numberOfPrimes) { final int NUMBER_OF_PRIMES_PER_LINE = 10;int count = 0;int number = 2;while(count < numberOfPrimes) {if(isPrime(number)) {count++;}if(count % NUMBER_OF_PRIMES_PER_LINE == 0) {System.out.printf("%-5s\n", number);}elseSystem.out.printf("%-5s", number);number++;}}public static boolean isPrime (int number){for(int divisor = 2; divisor <= number / 2 ; divisor++) {if(number % divisor == 0)return false;}return true;}}程序清单6-8(将16进制转换为十进制)import java.util.Scanner;public class Hex2Dec {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.print("Enter a hex number: ");String hex = input.nextLine();//Sting是什么, input.nextLine又是什么System.out.println("The decimal value for hex number " + hex + " is " + hexToDecimal(hex.toUpperCase()));}public static int hexToDecimal(String hex) {int decimalValue = 0;for (int i = 0; i < hex.length(); i++) {//hex.length是什么char hexChar = hex.charAt(i);//hex.charAt(i)是什么decimalValue = decimalValue * 16 + hexCharToDecimal(hexChar);}return decimalValue;}public static int hexCharToDecimal(char ch) {if(ch >= 'A' && ch <= 'F')return 10 + ch - 'A';elsereturn ch - '0';}}程序清单6-9(重载方法,求最大值)public class TestMethodOverloading {public static void main(String[] args) {// TODO Auto-generated method stubSystem.out.println("The maxmum of 3 and 4 is " + max(3, 4));System.out.println("The maxmum of 3.0 and 5.4 is " + max(3.0, 5.4));System.out.println("The maxmum of 3.0, 4.5 and 10.14 is " + max(3.0, 5.4, 10.14));}public static int max(int num1, int num2) {if (num1 > num2)return num1;elsereturn num2;}public static double max(double num1, double num2) {if(num1 > num2)return num1;elsereturn num2;}public static double max(double num1, double num2, double num3) { return max(max(num1, num2), num3);}}程序清单6-10(生成随机字符)public class RandomCharacter {public static char getRandomCharacter(char ch1, char ch2) {return (char)(ch1 + Math.random() * (ch2 - ch1 + 1));}public static char getRandomLowerCaseLetter() {return getRandomCharacter('a', 'z');}public static char getRandomUpperCaseLetter() {return getRandomCharacter('A', 'Z');}public static char getRandomDigtCharacter() {return getRandomCharacter('0', '9');}public static char getRandimCharacter() {return getRandomCharacter('\u0000', '\uFFFF');}}程序清单6-11(生成随机数,调用了6-10的方法)public class TestRandomCharacter {public static void main(String[] args) {// TODO Auto-generated method stubfinal int NUMBER_OF_CHARS = 175;final int CHARS_PER_LINE = 25;for(int i = 0; i < NUMBER_OF_CHARS; i++) {char ch = RandomCharacter.getRandomLowerCaseLetter();if((i + 1) % CHARS_PER_LINE == 0)System.out.println(ch);elseSystem.out.print(ch);}}}程序清单6-12(方法抽象,逐步求精)import java.util.Scanner;public class PrintCalendar {public static void main(String[] args) {// TODO Auto-generated method stubScanner input = new Scanner(System.in);System.out.print("Enter full yuer (e.g., 2012): ");int year = input.nextInt();System.out.print("Enter month as a number between 1 and 12: ");int month = input.nextInt();printMonth(year, month);}public static void printMonth(int year, int month) {printMonthTitle(year, month);printMonthBody(year, month);}public static void printMonthTitle(int year, int month) { System.out.println(" " + getMonthName(month) + " " + year);System.out.println("---------------------");System.out.println(" Sun Mon Tue Wed Tue Fri Sat");}public static String getMonthName(int month) {String monthName = "";switch (month) {case 1: monthName = "January"; break;case 2: monthName = "Fanuary"; break;case 3: monthName = "March"; break;case 4: monthName = "April"; break;case 5: monthName = "May"; break;case 6: monthName = "June"; break;case 7: monthName = "July"; break;case 8: monthName = "August"; break;case 9: monthName = "September"; break;case 10: monthName = "October"; break;case 11: monthName = "November"; break;case 12: monthName = "December"; break;}return monthName;}public static void printMonthBody(int year, int month) {int startDay = getStartDay(year, month);int numberOfDaysInMonth = getNumberOfDaysInMonth(year, month);int i = 0;for(i = 0; i < startDay; i++) {System.out.print(" ");}for(i = 0; i <= numberOfDaysInMonth; i++) {System.out.printf("%4d", i);if((i + startDay) % 7 == 0)System.out.println();}System.out.println();}public static int getStartDay(int year, int month) {final int START_DAY_FOR_JAN_1_1800 = 3;int totalNumberOfDays = getTotalNumberOfDays(year, month);return (totalNumberOfDays + START_DAY_FOR_JAN_1_1800) % 7;}public static int getTotalNumberOfDays(int year, int month) { int total = 0;for(int i = 1800; i < year; i++)if(isLeapYear(i))total = total + 366;elsetotal = total + 365;for(int i = 1; i < month; i++)total = total + getNumberOfDaysInMonth(year , i);return total;}public static int getNumberOfDaysInMonth(int year, int month) { if(month == 1 || month == 3 || month == 5 || month == 7 || month == 8 || month == 10 || month == 12)return 31;if(month == 4 || month == 6 || month == 9 || month == 11)return 30;if(month == 2)return isLeapYear(year) ? 29:28;return 0;}public static boolean isLeapYear(int year) {return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);}}。