北邮国际学院JAVA大作业
北邮《Java技术》期末复习题(含答案)

<<Java技术>>综合练习题填空题1.Java 不仅仅是一种编程环境,它实际上是一个完整的计算平台,包括完整的程序开发环境和运行环境。
2.完整的Java体系结构包括四个组件,分别是Java编程语言、Java类文件格式、Java应用程序编程接口和Java虚拟机。
3.Java运行时环境是由Java虚拟机和核心类组合形成的。
4.在Java类文件中存储的二进制代码称为字节码,它们是JVM的指令。
5.当Java虚拟机是在主机操作系统上由软件实现时,它实际上是用本地(如C/C++等)语言编写的程序。
6.Java虚拟机主要包括两个模块,一个是类装载器,另一个是执行引擎。
7.在面向对象系统中,对象是程序的基本组成实体。
8.对象是程序的基本组成实体,类是创建对象的模板。
9.Java 源程序中的类可以分为两种,分别是系统类和用户自己定义类。
10.编译程序的时候会自动导入到程序中的系统包是ng。
11.把基本数据类型包装成类包装成类的好处是可以提供基本数据类型的信息,还可以使用类的方法对数据进行操作。
12.在Java中,int类型的包装类是Integer, char 类型的包装类是Character。
13.Integer 类的 parseInt( ) 方法的功能是把一个字符串转换为一个整型数据。
14.Java 把数据输出到控制台是使用System.out完成的。
15.Scanner 类是在java.util包中定义的。
16.创建一个连接到标准输入流对象 System.in 的Scanner 对象的语句是Scanner myScanner = new Scanner(System.in);。
17.设 myS 是一个 Scanner 类的实例,则语句“int x= myS.nextInt();”的作用是读取一个整数,然后把这个整数赋给变量x。
18.Java 提供的专门用于格式化输出数据的方法是System.out.printf()。
北邮-Java技术-阶段三

一、单项选择题(共10道小题,共100.0分)1. 请看下面未完成的代码public class Foo implements Runnable {public void run (Thread t) {System.out.println("Running.");}public static void main (String[] args) {new Thread(new Foo()).start();}}结果是?()A. 运行时抛出一个异常B. 程序能够运行,但是没有任何输出C. 没有实现Runnable 接口中的方法导致编译错误D. 程序运行后输出“Running”2. 下面关于“守护线程(daemon thread)”的说法错误的是()A. “守护线程”和“非守护线程”本质上并没有什么区别,只是JVM 对其控制的方式有所不同而已。
B. 守护线程一般是在后台提供某种服务,而非程序核心部分的线程,所以它的优先级最低C. 一个程序的任何非守护线程的执行代码都要执行完程序才结束。
而守护线程的执行代码不一定都要执行完。
D. 不允许在程序中用代码把一个非守护线程转变为守护线程3. 下面关于Java 线程的说法错误的是()A. 当一个Java 程序启动时,系统就为它创建好一个线程,用这个线程执行main() 方法中的代码序列B. 除了主线程,JVM 还创建了其它线程C. 程序员可以使用代码自己创建线程并启动执行D. Java Application 程序有主线程,而JavaApplet 程序没有主线程4. 下面哪一个可以将“<end>”加到文件“file.txt”文件末尾?()A. OutputStream out= new FileOutputStream (“file.txt”);Out.writeBytes (“<end>/n”);B. OutputStream os= new FileOutputStream (“file.txt”, true);DataOutputStream out = new DataOutputStream(os);out.writeBytes (“<end>/n”);C. OutputStream os= new FileOutputStream (“file.txt”);DataOutputStream out = new DataOutputStream(os);out.writeBytes (“<end>/n”);D. OutputStream os= new OutputStream (“file.txt”, true);DataOutputStream out = new DataOutputStream(os);out.writeBytes (“<end>/n”);5. 下面哪一个可以创建一个数据输出流?()A. new dataOutputStream(“out.txt”);B. new dataOutputStream(new file(“out.txt”));C. new dataOutputStream(new FileOutputStream(“out.txt”));D. new dataOutputStream(new FileWriter(“out.txt”));6. 设系统中已经存在ASCII码文件“file.txt”,给定下面程序import java.io.*;public class Try2 {public static void main (String[]args) throws Exception {try {File f = new File("file.txt");FileOutputStream out = new FileOutputStream(f, true);}catch (IOException ) {}}则结果是()A. 不能通过编译B. 程序可以通过编译,运行后文件“file.txt”没有任何改变C. 程序可以通过编译,运行后文件“file.txt”的长度变为0D. 由于文件f 没有关闭,所以运行程序时会有一个异常产生7. 下面能够得到文件“file.txt”的父路径的是()A. String name= File.getParentName(“file.txt”);B. String name= (new File(“file.txt”)).getParent();C. String name = (new File(“file.txt”)).getParentName();D. String name= (new File(“file.txt”)).getParentFile();8. 设有如下程序2. public class Try2 {3. public static void main (String[]args) throws Exception {4, FileOutputStream out = new FileOutputStream ( "BytesCopy.txt" );5. }6.}则需要在第一行加入哪条语句能使程序通过编译和运行?()A. include java.io.OutputStream;B. import java.io.FileOutputStream;C. import java.io.OutputStream;D. import java.io.FileOutputStream;9. 下面哪个基于Unicode字符的输出流?()A. ReaderB. WriterC. InputStreamD. OutputStream10. 下面哪个是基于二进制字节的输出流?()A. ReaderB. WriterC. InputStreamD. OutputStream11.。
北邮Java本科选修 作业报告

Java日历软件1.设计思路1.1面板样式设计在“当前年月”位置处,可以切换到其他年月;“日期”处,显示天数的信息,不同日期用不同颜色标注;“今天”处,显示今天的年月日;一键返回今天;在功能选项卡栏,以后可以添加新的功能,设计对应的面板,比如“记录”等功能,由于时间关系没有做具体的内容。
1.2代码结构calendar包,包括五个类Wannianli类2.功能分析主要介绍日历的算法和图形界面等内容。
2.1calendar包放置与日历相关的类。
2.1.1.MButton类每个天数button的显示设计。
定义两种参数类型的构造方法,分别用于CalendarDialog类和CalendarPanel类。
2.1.2.MTableModel类继承自抽象类AbstractTableModel,定义成员变量columnNames列标题、tableDatas存放表格数据的线性表,实现的方法如下图。
2.1.3.MTableCell类JTable负责管理表格的可视外观,在绘制每个单元格时,调用TableCellRenderer 接口,其中row和column标识一个单元格。
使用这个接口,封装和复用已有标量型组件的渲染代码,可以降低代码重复率。
部分代码:2.1.4.CalendarDialog类小型简化版日历。
成员变量,其中YEAR、MOUTH、DAY、daysOfMouth用final修饰,是常量;行文本输入框JTextField类的对象yearTextField、monthTextField,用于输入年月;MTableModel类的对象tableModel,存储数据,最后放到JTable中;JTable类的对象table,建立显示二维数组数据的表格,可以显示列的名称。
成员方法,主要有CalendarDialog()方法、initTableModel()方法和各个事件处理方法。
图为成员变量,(黑框圈起来的)事件处理方法。
北邮-Java技术-阶段二

一、单项选择题(共10道小题,共100.0分)1. 给定下面程序段public class Try2 {public static void main(String[] args) {try {return;}finally {System.out.println("Finally");}}}则下面说法正确的是()A. 程序能运行,没有输出结果B. 程序能运行,输出FinallyC. 程序可以编译通过,但是运行时会抛出异常D. 因为缺少了catch块,所以程序不能编译2. 请看下面的代码public void fun( ) {int i;try {i = System .in .read( );System .out .println(“location 1”);}catch (IOException e) {System .out .println(“location 2”);}finally {System .out .println(“location 3”);}System .out .println(“location 4”);}如果IOException块执行,程序的输出结果为()A. location 1location 3B. location 2location 3C. location 2location 3location 4D. location 43. 给定下面程序段public class MyProgram {public static void main(String args[]) {try {System.out.print("Hello world ");}finally {System.out.print("Finally executing ");}}}则下面正确的选项是()A. 由于没有表明异常,所以程序不能编译B. 由于缺少catch语句,所以程序不能编译C. 程序运行结果:Hello world.D. 程序运行结果:Hello world Finally executing4. 关于Java 处理异常的方法的叙述错误是()A. Java通过面向对象的方法来处理异常B. Java 要求程序员编写的程序时,必须对可检测的异常进行处理,否则不能通过编译C. Java 异常处理机制接收到异常对象后,通常会调用程序员编写的一些异常处理程序,以便将程序从错误状态中恢复或者做一些简单地处理后结束程序D. 异常对象只能由系统产生,程序员不能自己“创造”异常对象5. 下面不属于“异常”现象的是()A. 程序创建对象时没有足够的内存创建对象了B. 程序要打开文件“D:\file.txt”,但是该文件已经被误删除了C. 预期用户由键盘输入整数,但用户运行程序时实际输入的却是英文字母D. 定义方法时忘记写方法的返回值类型6. 有如下代码段class COuter {int x = 10;void showA() {System.out.println(x);}void print() {(new CInner() {void showB() {System.out.println(x);}}).showB();}class CInner {int x = 20;}}public class Try2 {public static void main(String[] args) {COuter o = new COuter();o.print();}}则下面说法正确的是()A. 程序有错,方法print()内的代码有语法错误B. 程序有错,Try2类的声明有语法错误C. 输出为20D. 输出为107. 有如下代码段class COuter {int x = 10;void showA() {System.out.println(x);}void print() {(new CInner()).showB();}class CInner {int x = 20;void showB() {System.out.println(x);}}}public class Try2 {public static void main(String[] args) {COuter o = new COuter();o.print();}}则下面说法正确的是()A. 编译时发生错误B. 运行时发生错误C. 输出为20D. 输出为108. 下面关于“回调”的说法错误的是()A. “回调”是一种程序设计模式,而不是Java的专门语法规则B. 通过回调,对象被赋予一些信息,这些信息允许它在稍后的某个时刻返回头去调用初始对象C. Java通过指针实现回调D. Java通过接口实现回调9. 设有如下接口定义interface IShape {double Pi = 3.14;void getArea();}则下面说法错误的是()A. 在程序的任何一个地方都可以调用getArea()B. getArea()是抽象方法C. getArea()是静态方法D. getArea()不带有返回值10. Java中用于定义接口的关键字是()A. importB. packageC. classD. interface11.。
北邮Java程序设计作业3

Java程序设计题目:课程作业三——实验报告一、题目要求作业要求:按如下要求编写图形用户界面程序,最后提交纸质报告报告要求:包括设计思路、关键代码及运行结果题目:在以下题目中任选一题,也可以自由发挥,要求使用Java事件处理机制。
Java简易计算器Java日历软件Java记事本Java学生信息管理系统二、设计思路1、设计图形界面月份,按下查询按键,日历即可显示,最顶上的标题可以动态更新。
这是各个组件的关系示意图,其中,图中的p0、p1、p2为JPanel 对象,方便安排我们的格局;label0、label1、label2三个对象,为JLable 对象,用于显示三个标签,text1、text2、text3三个对象,为JTextField 对象,用于输入年份月份,button1为JButton 对象,用于按下以查询日历。
2、 程序流程图开始程序初始化输出2014年12月的日历输入希望查询的月份,按下查询键判断是否合法是输出新日历否输出日历为空程序开始显示2014年12月的日历,当输入一个年份和月份时,判断是否合法,合法则输出该月的日历,不合法则输出一个空日历。
3、 程序逻辑框图getStartDay()找到这一个月第一天getTotalDay()这一天是1800年来第几天leapYear()是否闰年getMonthDay()返回这个月共几天Showcal()修改内部参数Cal()显示结果以上是我们程序的逻辑框图。
首先利用leapYear()判断这一年是否为闰年;然后利用getMonthDay(),各个月份的日期相加,求出1800年以来,这个月之前共有多少天;然后利用getStartDay(),求出这个月开始的一天为星期几,再配合getMonthDay(),即可得到该月的日历。
再使用Showcal(),修改内部参数,即可在程序中显示出来。
三、关键代码分析①构造方法:public cal() {super("2012210637郑晨宇——Java作业·日历软件"); //框架命名this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//窗口关闭函数this.setBounds(400,150,550,340);//设置窗口的位置和大小Container c=getContentPane();p1 = new JPanel();//面板对象,p3 = new JPanel(new GridLayout(8,1,3,3));//在面板对象p3里使用网格布局管理器p2 = new JPanel(new GridLayout(7,7,10,1));//网格布局管理器label0=new JLabel("年份:");//标签组件label1=new JLabel("月份:");label2=new JLabel("备忘录:");label3=new JLabel("");text1=new JTextField("2014",1);//文本框text2=new JTextField("12",1);text3=new JTextField(1);button1=new JButton("查看");//按钮int i;//中心面板中各个标签初始化(用显示日历7行7列)for(i=0;i<7;i++)p2.add(ai[i]=new JLabel(ast[i]));//第一行显示是周几(星期日到星期六)for (i= 7; i< 49; i++)p2.add(ai[i]=new JLabel(""));//暂时为空,在showcal中具体定义各月不同的显示p3.add(label0);p3.add(text1);p3.add(label1);p3.add(text2);p3.add(button1);p3.add(label2);p3.add(text3);p1.add(label3);setVisible(true);c.add(p1,BorderLayout.NORTH);c.add(p3,BorderLayout.EAST);c.add(p2,BorderLayout.CENTER);button1.addActionListener(this);//注册年份、月份输入和ok按钮监听器this.setVisible(true);//窗口可见} //main主函数这个构造方法首先构造了一个JFrame对象并初始化,然后将各个标签、输入框、按键赋初值,填入预定的panel中,在将panel填入框架的指定位置,最后设定了按键的监听器。
北邮java第一次实验报告

JAVA实验报告信通院28班2012210773一:设计思路:1.我们需要先定义一个student类,然后在类中定义成员变量以及构造方法,利用构造方法对其进行初始化,然后定义一个getter和setter分别实现对类对象get到对象的属性,并利用setter的方法对其进行set,另外有toString 的成员方法,来对其转化为字符串输出。
2.第二步我们需要定义一个Graduatestudent的子类来继承父类student,那么我们想到我们用extends就可以实现继承,在整个过程,我们需要想到对于子类中和父类相同的部分,我们可以直接用super来继承,对于子类中那些父类没有定义的地方我们需要加进去,在题目中要求我们加入两个属性,那么我们只需要用同样的构造方法,在后面传入新加入的属性并对其进行构造即可。
对于父类中的方法与子类中想用的不同,那么这个时候我们需要重写方法toString(),重写的方法是:将方法命名为与父类相同的类方法名称,然后对其进行重写,写入我们想要的方法。
3.第三步,我们需要创建多个Graduatestudent的对象,然后将它加到一个集合当中,我的思路是将之加入Arraylist集合,用add的方法将之加入即可,然后通过写入一个comparator来控制其排序的方式,最后调用Collections.sort(list,comparator),即可完成我们想要的排序(即根据学号进行排序),然后对Arraylist进行遍历即可输出全部的对象。
4.第四步需要我们将分数的最大值和最小值以及平均值输出,那么我们知道我们仍然可以用第二步中同样的方法写入一个comparator1,来实现对对象分数的排序,那么我们只需要再调用SORT即可实现一个新的Arraylist,然后我们输出list.get(0)和list.get(list.size()-1)即可输出最大值和最小值,平均值只需要把所有的score放入一个数组array相加之后处以array 的长度length即可得出。
北邮Java作业

一、单项选择题(共10道小题,共100.0分)1.Java中用于定义程序包的关键字是()A.importB.packageC.classD.interface知识点: 阶段作业一学生答案:[B;]得分: [10] 试题分值:10.0提示:2.(错误)设有如下程序public class Try2 {public static void main(String[] args) {B objb = new B();A obja = objb;B objc = (B)obja;objc.show();}}class A {void show() {System.out.println("a");}}class B extends A { void show() { System.out.println("b");}} 则下面说法正确的是( D )A.编译时发生错误B.运行时发生错误C.输出为aD输出为b知识点: 阶段作业一学生答案:[C;]得分: [0] 试题分值:10.0提示:3.设有如下程序public class Try2 {public static void main(String[] args) {B objb = (B) new A();objb.show();}}class A {void show() {System.out.println("a");}}class B extends A { void show() { System.out.println("b");}} 则下面说法正确的是()A.编译时发生错误B.运行时发生错误C.输出为aD.输出为b知识点: 阶段作业一学生答案:[B;]得分: [10] 试题分值:10.0提示:4.设有如下程序public class Try2 {public static void main(String[] args) {A obja = new B();obja.show();}}class A {void show() {System.out.println("a");}}class B extends A { void show() { System.out.println("b");}} 则下面说法正确的是()A.编译时发生错误B.运行时发生错误C.输出为aD.输出为b知识点: 阶段作业一学生答案:[D;]得分: [10] 试题分值:10.0提示:5.设有如下程序:class A {void show() {System.out.println("a");}}class B extends A { void show() { System.out.println("b");}} class Ctry1 {public static void main(String args[]) {A obja;B objb = new B();obja = objb;objb.show(); obja. show();}}则输出结果是()A. aaB. abC. baD. bb知识点: 阶段作业一学生答案:[D;]得分: [10] 试题分值:10.0提示:6.设有下面程序:public class Person {static int arr[] = new int[10];public static void main(String args[]) {System.out.println(arr[0]);}}则以下叙述正确的是()A.编译时发生错误B.运行时发生错误C.输出为0D.输出为null知识点: 阶段作业一学生答案:[C;]得分: [10] 试题分值:10.0提示:7.设有如下类定义class Fruit { // 水果类int grams; // 克数(质量)int totalCalories(){ // 卡路里(热量)return grams * 10;}}则创建一个Fruit类的对象变量的语句是()A.Fruit f;B.new Fruit();C.new Fruit;D.int f;知识点: 阶段作业一学生答[A;]案:得分: [10] 试题分值:10.0提示:8.(错误)设有以下程序段class B{void show(){// code;}}class A{public static void main (String args[]){// code;}}下面叙述中正确的是( C )A.保存源文件的时候,源文件名必须是B.javaB.保存源文件的时候,源文件名必须是A.javaC.保存源文件的时候,源文件名可以是扩展名为java的任何符合操作系统文件命名规则的文件名D.保存源文件的时候,源文件名可以是任何符合操作系统文件命名规则的文件名知识点: 阶段作业一学生答案:[A;]得分: [0] 试题分值:10.0提示:9.下面叙述中哪个是正确的()A.当编译Java程序时,源程序中的每个类都将被分别编译成不同的文件,每个文件名都与所对应的类名相同,并以扩展名class结束B.当编译Java程序时,源程序中的每个类都将被分别编译成不同的文件,每个文件名都与所对应的类名相同,并以扩展名javax结束C.当编译Java程序时,源程序中的每个类都将被编译到同一个文件中,文件名与主类的类名相同,并以扩展名class结束D.当编译Java程序时,源程序中的每个类都将被编译到同一个文件中,文件名与主类的类名相同,并以扩展名javax结束知识点: 阶段作业一学生答案:[A;]得分: [10] 试题分值:10.0提示:10.下面关于 Java 类文件的说法错误的是()A.编译时程序时,Java 编译器会为源程序中的每个类单独生成一个类文件B.Java 类文件中存储的代码必须符合 JVM 规范C.Java 类文件中存储的代码是二进制形式的代码D.Java 类文件必须用Java语言编写得到知识点: 阶段作业一学生答案: [D;]得分: [10] 试题分值: 10.0提示:一、单项选择题(共10道小题,共100.0分)1.设有如下程序public class Try2 {public static void main(String[] args) {Try2 obj = new Try2();obj.test();}void oneMethod() { }public void test() {try {oneMethod( );System.out.prin tln("condition 1");}catch(ArrayIndexOutOfBoundsException e) {System.out.prin tln("condition 2");}catch (Exception e) {System.out.prin tln("condition 3");}finally {System.out.prin tln("finally");}}}则程序的输出结果的是()A.condition 1B.condition 1finallyC.condition 1condition 2condition 3D.condition 1condition 2condition 3finally知识点: 阶段作业二学生答案:[B;]得分: [10] 试题分值:10.0提示:2.使用catch(Exception e)的好处是()A.只会捕获个别类型的异常B.捕获try块中产生的所有类型的异常C.忽略一些异常D.执行一些程序知识点: 阶段作业二学生答案:[B;]得分: [10] 试题分值:10.0提示:3.给定下面程序段class Equals {public static void main(String args[]) {int x = 100;double y = 100.1;boolean b = ( x = y );System.out.println(b);}}下面选项正确的是()A.输出:trueB.输出:flaseC.编译失败D.抛出一个运行时异常知识点: 阶段作业二学生答案:[C;]得分: [10] 试题分值:10.0提示:4.关于Java 处理异常的方法的叙述错误是()A.Java通过面向对象的方法来处理异常B.Java 要求程序员编写的程序时,必须对可检测的异常进行处理,否则不能通过编译C.Java 异常处理机制接收到异常对象后,通常会调用程序员编写的一些异常处理程序,以便将程序从错误状态中恢复或者做一些简单地处理后结束程序D.异常对象只能由系统产生,程序员不能自己“创造”异常对象知识点: 阶段作业二学生答案:[D;]得分: [10] 试题分值:10.0提示:5.关于Java 处理异常的方法的叙述错误是()A.Java通过面向对象的方法来处理异常B.在一个方法的运行过程中,如果发生了一个异常,则 Java虚拟机会创建一个异常对象,然后把这个异常对象交给Java 的异常处理机制去处理C.由于 Java 有专门处理异常的机制,所以我们自己在写程序的时候对异常就可以什么都不做了D.Java 异常处理机制接收到异常对象后,通常会调用程序员编写的一些异常处理程序,以便将程序从错误状态中恢复或者做一些简单地处理后结束程序知识点: 阶段作业二学生答案:[C;]得分: [10] 试题分值:10.0提示:6.有如下代码段class COuter {int x = 10;void showA() {System.out.println(x);}void print() {(new CInner() {void showB() {S ystem.out.println(x);}}).showB();}class CInner {int x = 20;}}public class Try2 {public static void main(String[] args) {COuter o = new COuter();o.print();}}则下面说法正确的是()A.程序有错,方法print()内的代码有语法错误B.程序有错,Try2类的声明有语法错误C.输出为20D.输出为10知识点: 阶段作业二学生答案:[C;]得分: [10] 试题分值:10.0提示:7.(错误)有如下代码段class COuter {int x = 10;void showA() {System.out.println(x);}void print() {showB();}class CInner {int x = 20;void showB() {System.out.prin tln(x);}}}则下面说法正确的是()A.这段程序有错,原因是CInner类的定义放到了COuter类的类体中,而这是不允许的B.这段程序有错,原因是外部类直接使用了内部类的成员,而这是不对的C.这段程序有错,原因是内部类重复定义了外部类的变量x,而这是不允许的D.这段程序完全正确知识点: 阶段作业二学生答案:[CA;]得分: [0] 试题分值:10.0提示:8.设有如下程序public class Try2 {public static void main(String[] args) {Circle c = new Circle(2);System.out.println(c.getArea());}}interface IShape {double PI = 3.14;double getArea();}class Circle implements IShape {private double radius;Circle(double radius) {this.radius = radius;}public double getArea() {return (PI * radius * radius);}}则下面说法正确的是()A.编译时发生错误B.运行时发生错误C.输出为12.56D.输出为0知识阶段作业二点:学生[C;]答案:得[10] 试题分值: 10.0分:提Java 类文件实际上不一定非要用 Java 语言编写示: 源程序然后用 Java 编译器编译得到,实际上还有许多其它的办法得到。
北邮函授Java技术时期作业2

}
}
则下面说法正确的是()
A.编译时发生错误
B.运行时发生错误
C.输出为20
D.输出为10
知识点:
阶段作业二
学生答案:
[C;]
得分:
[10]
试题分值:
10.0
提示:
8.下面关于“回调”的说法错误的是( )
A.“回调”是一种程序设计模式,而不是Java的专门语法规则
B.通过回调,对象被赋予一些信息,这些信息允许它在稍后的某个时刻返回头去调用初始对象
}
catch (ArrayIndexOutOfBoundsExceptione) {
System.out.println("condition 2");
}
catch (Exception e) {
System.out.println("condition 3");
}
finally {
System.out.println("finally");
B.程序有错,Try2类的声明有语法错误
C.输出为20
D.输出为10
知识点:
阶段作业二
学生答案:
[C;]
得分:
[10]
试题分值:
10.0
提示:
7.有如下代码段
classCOuter{
intx = 10;
voidshowA() {
System.out.println(x);
}
void print() {
booleanb = ( x = y );
System.out.println(b);
}
}
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
StartGame00.java/*** A class that takes in Hangman game in GUI interface, which extends StartGame.* @author Yuewen Li* @created 2013* @version 1.0* @version 1.1*/import javax.swing.*;import java.awt.*;import java.io.*;import java.util.*;public class StartGame00 extends StartGame{JPanel thePanel; //The new variable for painting.int miss=0; //This variable is to determine the steps of drawing the hangman. It increaces in each round of//guess with the wrong guess./*** Override the constructor of parent class. Add the initialization of thePanel.*/public StartGame00(){super();this.thePanel=new StartGameGUI();}/*** Override super.go(). Add two instructions in super.go() to repaint thePanel.*/public void go(){getDictionary();startGuess();System.out.println("Would you like to play again?");System.out.println("Yes----------------Enter 1");System.out.println("No-----------------Enter 2");Scanner myChoice=new Scanner(System.in);int choice=myChoice.nextInt();switch(choice){case 1:this.miss=0; //This is the new partthePanel.repaint(); //to repaint.go();case 2:System.out.println("Game over!");System.exit(1);}}/*** Override super.startGuess(). Add the new function to repaint thePanel for every wrong guess. */public void startGuess(){this.guessNum++;int missTime=0;String missLetter="";int allRightLetters=0;String questWord=this.dictionary.toLowerCase();ArrayList<Character> display=new ArrayList<Character>();ArrayList<Character> myScanner=new ArrayList<Character>();System.out.print("Word: ");for(int i=0;i<questWord.length();i++){display.add('_');}for(int p=0;p<display.size();p++){System.out.print(display.get(p)+" ");}System.out.println("");System.out.println("Misses: ");System.out.print("Enter Guess: ");do{Scanner myGuess=new Scanner(System.in);String word=myGuess.next();word=check(word);word=word.toLowerCase();char theLetter=word.charAt(0);int rightLetter=0;for(int j=0;j<questWord.length();j++){if(theLetter==questWord.charAt(j)){int u=0;for(int y=0;y<myScanner.size();y++){if(theLetter==myScanner.get(y)){u++;}}if(u==0){rightLetter++;display.remove(j);display.add(j,this.dictionary.charAt(j));myScanner.add(theLetter);}}}allRightLetters+=rightLetter;if(rightLetter==0){missTime++;this.miss=missTime; //This is the new partthePanel.repaint(); //to repaint.missLetter+=word;System.out.print("Word: ");for(int p=0;p<display.size();p++){System.out.print(display.get(p)+" ");}System.out.println("");System.out.println("Misses: "+missLetter);System.out.print("Enter Guess: ");}else{if(allRightLetters==questWord.length()){System.out.println("Congratulations, you win! You have guessed the word: "+this.dictionary+" in "+(missTime+1)+" guesses.");missTime=10;}else{System.out.print("Word: ");for(int p=0;p<display.size();p++){System.out.print(display.get(p)+" ");}System.out.println("");System.out.println("Misses: "+missLetter);System.out.print("Enter Guess: ");}}}while(missTime<6);if(missTime!=10){System.out.println("");System.out.println("You have run out of guesses. The word was: "+this.dictionary+".");}}/*** Inner class to create thePanel and paint the hangman in GUI.*/public class StartGameGUI extends JPanel{public void paintComponent(Graphics g){g.setColor(Color.white);g.fillRect(0,0,300,500);g.setColor(Color.blue);g.drawLine(30,450,100,450);g.drawLine(65,450,65,50);g.drawLine(65,50,180,50);g.drawLine(180,50,180,80);g.setColor(Color.black);if(miss>=1){ //Steps of drawing with the wrong guess.g.drawOval(150,80,60,60);}if(miss>=2){g.drawLine(180,140,180,300);}if(miss>=3){g.drawLine(100,160,180,220);}if(miss>=4){g.drawLine(260,160,180,220);}if(miss>=5){g.drawLine(180,300,120,400);}if(miss>=6){g.drawLine(180,300,240,400);}}}}StartGame.java/*** A class that takes in Hangman game in command line interface.* @author Yuewen Li* @created 2013* @version 1.0* @version 1.1*/import java.io.*;import java.util.*;public class StartGame{String fileName="dictionary.txt";String dictionary=""; //The word for once guessstatic int wordNum=0; //The number of words in dictionary.txt.static int randomWord=0; //Generate a random word.static int guessNum=0; //Count how many rounds.static ArrayList<String> tempDictionary; //Generate a word list for game./*** Constructor. Read the file "dictionary.txt" and get an ArrayList of words, tempDictionary.*/public StartGame(){tempDictionary=new ArrayList<String>();try{FileReader fileReader=new FileReader(fileName);BufferedReader bufferedReader=new BufferedReader(fileReader);String aWord="";aWord=bufferedReader.readLine();while(aWord!=null){tempDictionary.add(aWord);this.wordNum++;aWord=bufferedReader.readLine();}bufferedReader.close();fileReader.close();}catch(IOException e){System.out.println("Error occured");System.exit(1);}}/*** A getDictionary() method to get a word randomly for game.*/public void getDictionary(){if(guessNum==wordNum){System.out.println("Words run out! Game over!");System.exit(1);}else{this.randomWord=(int)(Math.random()*(wordNum-1-guessNum));this.dictionary=tempDictionary.get(randomWord);tempDictionary.remove(randomWord); //This part is to generate a} //different word for every round.}/*** A startGuess() method to start one round of the game.*/public void startGuess(){this.guessNum++;int missTime=0;String missLetter="";int allRightLetters=0;String questWord=this.dictionary.toLowerCase();ArrayList<Character> display=new ArrayList<Character>();ArrayList<Character> myScanner=new ArrayList<Character>(); //This list, myScanner is toSystem.out.print("Word: "); //avoid that a same letter isfor(int i=0;i<questWord.length();i++){ //typed many times.display.add('_');}for(int p=0;p<display.size();p++){System.out.print(display.get(p)+" ");}System.out.println("");System.out.println("Misses: ");System.out.print("Enter Guess: ");do{ //This loop is to help finishi one round ofScanner myGuess=new Scanner(System.in); //guess.String word=myGuess.next();word=check(word);word=word.toLowerCase();char theLetter=word.charAt(0);int rightLetter=0;for(int j=0;j<questWord.length();j++){if(theLetter==questWord.charAt(j)){int u=0;for(int y=0;y<myScanner.size();y++){ //myScanner works inif(theLetter==myScanner.get(y)){ //this part.u++;}}if(u==0){rightLetter++;display.remove(j);display.add(j,this.dictionary.charAt(j));myScanner.add(theLetter);}}}allRightLetters+=rightLetter; //That allRightLetters equals the length ofif(rightLetter==0){ //questWord indicates the user has won.missTime++;missLetter+=word;System.out.print("Word: ");for(int p=0;p<display.size();p++){System.out.print(display.get(p)+" ");}System.out.println("");System.out.println("Misses: "+missLetter);System.out.print("Enter Guess: ");}else{if(allRightLetters==questWord.length()){System.out.println("Congratulations, you win! You have guessed the word: "+this.dictionary+" in "+(missTime+1)+" guesses.");missTime=10; //Make missTime the value of 10 to break} //the do-while loopelse{System.out.print("Word: ");for(int p=0;p<display.size();p++){System.out.print(display.get(p)+" ");}System.out.println("");System.out.println("Misses: "+missLetter);System.out.print("Enter Guess: ");}}}while(missTime<6);if(missTime!=10){System.out.println("");System.out.println("You have run out of guesses. The word was: "+this.dictionary+".");}}/*** A check(String) method to ensure the entered character is valid.*/public String check(String word){boolean a=word.matches("[A-z]{1}");if(!a){System.out.println("Words only contain letters, no number or other characters.");Scanner newGuess=new Scanner(System.in);word=newGuess.next();word=check(word);return word;}elsereturn word;}/*** A go() method to start and end the Hangman Game. Ask users to continue or end game.*/public void go(){this.getDictionary();this.startGuess(); //start a round of guess.System.out.println("Would you like to play again?");System.out.println("Yes----------------Enter 1");System.out.println("No-----------------Enter 2"); //Ask user whether to continue or not.Scanner myChoice=new Scanner(System.in);int choice=myChoice.nextInt();switch(choice){case 1:go(); //Start another guess and ask and choice again. This//loop is to control the whole game.case 2:System.out.println("Game over!");System.exit(1); //Exit the game.}}}HangmanCL.java/*** A class that starts Hangman game in command line interface. * @author Yuewen Li* @created 2013* @version 1.0* @version 1.1*/public class HangmanCL{/***A main method to start the Hangman game.*/public static void main(String[] args){StartGame a=new StartGame();System.out.println("Welcome to Hangman:");a.go();}}HangmanGUI.java/*** A class that starts Hangman game in GUI interface.* @author Yuewen Li* @created 2013* @version 1.0* @version 1.1*/import javax.swing.*;import java.awt.*;import java.util.*;public class HangmanGUI extends JFrame{/***A main method to start Hangman game in GUI interface.*/public static void main(String[] args){JFrame frame=new JFrame("Hangman");StartGame00 a=new StartGame00();frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);frame.getContentPane().add(a.thePanel);frame.setSize(300,500);frame.setVisible(true);System.out.println("Welcome to Hangman:");a.go();}}。