当前位置:文档之家› 实验八 Java综合实验及练习

实验八 Java综合实验及练习

实验八 Java综合实验及练习
实验八 Java综合实验及练习

Java实验八综合实验及练习

第一部分:编程题

1、编写程序实现输入整数n,输出如下所示由数字组成的菱形。(图中n=5)1

1 2 1

1 2 3 2 1

1 2 3 4 3 2 1

1 2 3 4 5 4 3 2 1

1 2 3 4 3 2 1

1 2 3 2 1

1 2 1

1

package ex8_1;

public class Demo {

public static void main(String[] args){

for(int i=1;i<6;i++){

for(int j=1;j<=i;j++)

System.out.printf("%d ",j);

for(int j=i-1;j>0;j--)

System.out.printf("%d ",j);

System.out.println();

}

for(int i=4;i>0;i--){

for(int j=1;j<=i;j++)

System.out.printf("%d ",j);

for(int j=i-1;j>0;j--)

System.out.printf("%d ",j);

System.out.println();

}

}

}

2.给出年、月、日,计算该日是该年的第几天?

package ex8_2;

import java.util.Scanner;

public class DateFun {

public static boolean YearDemo(int year){

boolean flage=true;

if((year%4==0&&year%100!=0)||year%400==0)

flage=true;

else flage=false;

return flage;

}

public static void main(String[] args){

Scanner scan=new Scanner(System.in);

System.out.println("请输入年月日");

int sum=0;int year;int month; int day;

year=scan.nextInt();

month=scan.nextInt();

day=scan.nextInt();

if(YearDemo(year)){

int [] days={31,29,31,30,31,30,31,31,30,31,30,31};

for(int i=1;i

sum+=days[i-1];

sum+=day;

System.out.println("该日是当年的"+sum+"天");

}

else {

int [] days={31,28,31,30,31,30,31,31,30,31,30,31};

for(int i=1;i

sum+=days[i-1];

sum+=day;

System.out.println("该日是当年的"+sum+"天");

}

}

}

3、利用求素数的方法,就6~2000000之间的所有偶数验证歌德巴赫猜想:任何一个大于6的偶数可以分解为两个素数之和。

package ex8_3;

import java.util.Scanner;

public class Gede {

public static boolean Demo(int a){

boolean flage =true;

for(int i=1;i

int b=0;

for(int j=1;j

if(i%j==0)

flage=false;

if(flage)

for(int x=1;x

if((a-i)%x==0)

b++;

if(b==0){

flage=true;

break;

}

}

return flage;

}

public static void main(String [] args){

Scanner scan=new Scanner(System.in);

System.out.println("请输入一个大于6的偶数");

int a=scan.nextInt();

if(Demo(a))

System.out.println("哥德巴赫猜想成立");

else System.out.println("哥德巴赫猜想不成立");

}

}

4、现有15位选手参加比赛,有6个评委每个评委都要给每位选手打分,分数为60~100分,现需要定义二维数组存储选手成绩,每行存储一位选手打分情况,要求输出选手得分以及选手最后得分,以及选手名次。

评分规则:分数为60~100分。选手最后得分为:去掉一个最高分和一个最低分后其余4个分数的平均值。

package Ex8_4;

import java.util.*;

public class test {

public static int[][] initArr(){

int[][] a = new int [15][6];

for(int i=0;i<15;i++)

for(int j=0;j<6;j++)

a[i][j]=(int)(Math.random()*41+60);

return a;

}

public static float average(int[] a){

float sum=0;

float avg=0;

int max=0; int min=100;

int maxrow=0; int minrow=0;

for(int i=0;i

if(a[i]>max)

max=a[i];

}

for(int i=0;i

if(a[i]

min=a[i];

}

for(int i=0;i

sum=sum+a[i];

}

sum=sum-max-min;

avg=sum/(a.length-2);

return avg;

}

public static void main(String[] args) {

int[][] a=initArr();

for(int i=0;i

for(int j=0;j

System.out.printf("%-4d",a[i][j]);

System.out.println();

}

for(int i=0;i

System.out.println("NO."+(i+1)+"'s"+" score is "+average(a[i]));

}

}

5、设计一个描述二维平面上点的类Position,该类需要描述点的横坐标和纵坐标,并提供属性的set/get访问器方法和计算两点间距离的方法。写一个程序测试这个类

package Ex8_5;

public class Position {

private int x,y;

public Position(){

}

public Position(int x,int y){

this.x=x;

this.y=y;

}

public int getX(){

return x;

}

public int getY(){

return y;

}

public void setX(int x){

this.x=x;

}

public void setY(int y){

this.y=y;

}

public double distance(Position p){

double d=0.0;

d=Math.sqrt((this.x-p.x)*(this.x-p.x)+(this.y-p.y)*(this.y-p.y));

return d;

}

}

package Ex8_5;

public class Test {

public static void main(String[] args){

Position p1=new Position(1,0);

Position p2=new Position(2,0);

double d=p1.distance(p2);

System.out.println(d);

}

}

6、设计一个表示二维平面上点的类Point,包含有表示坐标位置的protected类型的成员变量x和y,获取和设置x 和y值的public方法。

设计一个表示二维平面上圆的类Circle,它继承自类Point,还包含有表示圆半径的

protected类型的成员变量r、获取和设置r值的public方法、计算圆面积的public方法。package Ex8_6;

public class Point {

protected int x,y;

public Point(){

}

public Point(int x,int y){

this.x=x;

this.y=y;

}

public int getX(){

return x;

}

public int getY(){

return y;

}

public void setX(int x){

this.x=x;

}

public void setY(int y){

this.y=y;

}

}

package Ex8_6;

public class Circle extends Point {

protected int r;

public Circle(){

}

public Circle(int x,int y,int r){

super(x,y);

this.r=r;

}

public void setR(int r){

this.r=r;

}

public int getR(){

return r;

}

}

package Ex8_6;

public class Test {

public static void main(String[] args) {

Circle c1=new Circle(2,3,4);

Circle c2=new Circle();

c2.setR(8);

c2.setX(2);

c2.setY(4);

System.out.println(c1.x+" "+c1.y+" "+c1.r);

System.out.println(c2.x+" "+c2.y+" "+c2.r);

}

}

7、编写一个完整的Java Application 程序。包含接口Shape,MyRectangle类,MyTriangle 类及Test类,具体要求如下:

⑴、接口Shape:

double area():求一个形状的面积

double perimeter ():求一个形状的周长

⑵、类 MyRectangle:

实现Shape接口,并有以下属性和方法:

①属性

width:double类型,表示矩形的长

height:double类型,表示矩形的高

②方法

MyRectangle(double w, double h):构造函数

ToString()方法:输出矩形的描述信息,如“width=1.0,height=2.0, perimeter=6.0, area=2.0”

⑶、类MyTriangle:

实现Shape 接口,并有以下属性和方法:

① 属性

x,y,z: double 型,表示三角形的三条边

s: 周长的1/2(注:求三角形面积公式为))()((z s y s x s s ---,s=(x+y+z)/2 ,

开方可用Math.sqrt(double)方法)

② 方法

MyTriangle(double x, double y, double z):构造函数,给三条边和s 赋

初值。

ToString():输出矩形的描述信息,如“three sides:3.0,4.0,5.0,perimeter=12.0,area=6.0” ⑷、Test 类作为主类要完成测试功能

① 生成MyRectangle 对象

② 调用对象的ToString 方法,输出对象的描述信息 package Ex8_7;

public interface Shape {

public abstract double area();

public abstract double perimeter(); }

package Ex8_7;

public class MyTriangle implements Shape{

public int x ,y ,z ;

public MyTriangle(int x,int y,int z){

this .x =x;

this .y =y;

this .z =z;

}

public double area(){

double s=(x +y +z )/2;

double area=Math.sqrt (s*(s-x )*(s-y )*(s-z ));

return area;

} public double perimeter() {

return x +y +z ; }

public String toString(){

return "three sides:"+x +","+y +","+z +",perimeter=" +perimeter()+",area="+area();

} }

package Ex8_7;

public class Test {

public static void main(String[] args) {

Shape t=new MyTriangle(3,4,5);

System.out.println(t.toString());

}

}

8 完成以下窗体制作

参考:这一题考虑使用组合布局,将上面控件放置在JPanel上,再将JPanel放到内容面板的中间。下面四个按钮先放在某JPanel再放置在内容面板的South部分

package Ex8_8;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

public class LoginFrm extends JFrame implements ActionListener { JLabel lb_name=new JLabel("姓名:");

JLabel lb_sex=new JLabel("性别:");

JLabel lb_profession=new JLabel("身份:");

JLabel lb_unit=new JLabel("单位:");

JLabel lb_IDnum=new JLabel("证件号码:");

JLabel lb_rDate=new JLabel("注册日期:");

JLabel lb_eDate=new JLabel("有效日期:");

JComboBox cmb_profession=new JComboBox();

JComboBox cmb_unit=new JComboBox();

JTextField txt_IDnum=new JTextField();

JTextField txt_rDate=new JTextField();

JTextField txt_eDate=new JTextField();

JButton btn_ADD=new JButton("添加");

JButton btn_DEL=new JButton("删除");

JButton btn_BACK=new JButton("撤销");

JButton btn_ESC=new JButton("退出");

public LoginFrm(){

JPanel jp=(JPanel)this.getContentPane();

JPanel jp1=new JPanel();

jp1.setLayout(new GridLayout(7,2,5,10));

jp1.add(lb_name);jp1.add(txt_name);

cmb_sex);

jp1.add(lb_profession);jp1.add(cmb_profession);

cmb_profession.addItem("学生");

cmb_profession.addItem("教师");

cmb_profession.addItem("职工");

cmb_profession.setEditable(true);

jp1.add(lb_unit);jp1.add(cmb_unit);

cmb_unit.addItem("计算机系");

jp1.add(lb_IDnum);jp1.add(txt_IDnum);

jp1.add(lb_rDate);jp1.add(txt_rDate);

jp1.add(lb_eDate);jp1.add(txt_eDate);

jp.add(jp1,BorderLayout.CENTER);

JPanel jp2=new JPanel();

jp2.setLayout(new GridLayout(1,4));

jp2.add(btn_ADD);jp2.add(btn_DEL);

jp2.add(btn_BACK);jp2.add(btn_ESC);

JScrollPane jsp_table = new JScrollPane(table);

jp.add(jsp_table);

jp.add(jp2,BorderLayout.SOUTH);

this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

this.setTitle("图书证办理");

btn_ADD.addActionListener(this);

btn_DEL.addActionListener(this);

btn_BACK.addActionListener(this);

btn_ESC.addActionListener(this);

}

public void actionPerformed(ActionEvent e){

}

public static void main(String[] args){

JFrame.setDefaultLookAndFeelDecorated(true);

LoginFrm frm=new LoginFrm();

frm.setSize(500, 400);

frm.setVisible(true);

}

}

9、以JDBC技术创建一个通讯录应用程序,要求通讯录中必须含有编号、姓名,性别、电话、地址、Email等等。实现该类并包含添加、删除、修改、按姓名查等几个方法。编写主程序测试。

参考如下:

第一步:编写一个Person联系人类

public class Person {

private int pid; //编号

private String name; //姓名

private String sex; //性别

private String tel; //电话

private String address; //地址

private String email; //email

/*构造函数以及set-get函数*/

}

第二步:编写一个PersonDao封装对联系人类的有关操作

public class PersonDao {

//添加联系人

public void addPerson(Person p){

String sql=””;

DBHelper.executeUpdate(sql);

}

//通过人的编号删除联系人

public void deletePersonByID(int pid){

String sql=”delete from person where pid=”+pid;

DBHelper.executeUpdate(sql);

}

//通过人的姓名查找联系人,返回一个集合

public List queryPersonByName(String name){

….

}

//...其余方法

}

第三步:编写一个测试Swing类,有界面使用JTable显示,参考书本上关于JTable控件的使用,参考界面如下

package Ex8_9;

import java.sql.*;

public class PersonDao {

private String driver = "sun.jdbc.odbc.JdbcOdbcDriver";

private String url = "jdbc:odbc:mydb";

private void executeUpdate(String sql) {

try {

Class.forName(driver);

Connection con = DriverManager.getConnection(url);

Statement cmd = con.createStatement();

cmd.executeUpdate(sql);

con.close();

} catch (Exception ex) {

ex.printStackTrace();

}

}

public void addStudent(String sno, String sname, String major, int zg) { String sql = "insert into student1 values('"+ sno + "','"+ sname+ "','" + major + "'," + zg + ")";

executeUpdate(sql);

}

public void deleteStudentBySno(String sno) {

String sql = "delete from student1 where sno='" + sno + "'";

executeUpdate(sql);

}

public String[][] queryPerson(){

String[][] table=null;

try{

Class.forName(driver);

Connection conn=DriverManager.getConnection(url);

Statement stmt=conn.createStatement();

ResultSet rs=stmt.executeQuery("SELECT count(*) FROM student1");

rs.next();

int c=rs.getInt(1);

table=new String[c][3];

c=0;

rs=stmt.executeQuery("SELECT * FROM student1");

while(rs.next()){

table[c][1]=rs.getString(1);

table[c][2]=rs.getString(2);

table[c][3]=rs.getString(3);

c++;

}

conn.close();

}catch(Exception e){

e.printStackTrace();

}

return table;

}

}

package Ex8_9;

import javax.swing.*;

import java.awt.*;

import java.awt.event.*;

import javax.swing.table.DefaultTableModel;

public class MyFrm extends JFrame{

public JTable table=null;

public String[] cols={"sno","sname","sbrith"};

PersonDao Student1_Dao=new PersonDao();

public MyFrm(){

JPanel jp = (JPanel) this.getContentPane();

String[][] rows = Student1_Dao.queryPerson();

JTable table=new JTable(rows,cols);

JScrollPane jsp_table = new JScrollPane(table);

jp.add(jsp_table);

table.setModel(new DefaultTableModel(rows, cols));

this.setSize(600, 400);

this.setVisible(true);

}

public static void main(String[] args) {

new MyFrm();

}

}

第二部分:选择题

B1、下面关于变量及其作用范围的陈述哪个是不对的?()

A.实例变量是类的成员变量。

B.实例变量用关键字static声明。

C.在方法中定义的局部变量在该方法被执行时创建。

D.局部变量在使用前必须被初始化。

B2、下面哪条语句把方法声明为抽象的公共方法?()

A.public abstract method();

B.public abstract void method();

C.public abstract void method(){}

D.public void method() extends abstract;

C 3、若在某一个类定义中定义有如下的方法:final void aFinalFunction( );

则该方法属于()。

A、本地方法

B、静态方法

C、最终方法

D、抽象方法

C 4、在Java中,一个类可同时定义许多同名的方法,这些方法的形式参数个数、

类型或顺序各不相同,传回的值也可以不相同。这种面向对象程序的特性称为()。

A、隐藏

B、覆盖

C、重载

D、Java不支持此特性

C 5、在Java applet程序中,用户自定义的Applet子类常常覆盖父类的( )

方法来完成applet界面的初始化工作。

A、start( )

B、stop( )

C、init( )

D、paint( )

C 6、下列关于构造方法的叙述中,错误的是()

A.Java语言规定构造方法名与类名必须相同

B.Java语言规定构造方法没有返回值,但不用void声明

C.Java语言规定构造方法不可以重载

D.Java语言规定构造方法只能通过new自动调用

C 7、关于被私有访问控制符private修饰的成员变量,以下说法正确的是()

A.可以被三种类所引用:该类自身、与它在同一个包中的其他类、

在其他包中的该类的子类

B.可以被两种类访问和引用:该类本身、该类的所有子类

C.只能被该类自身所访问和修改

D.只能被同一个包中的类访问

A 8、执行完以下代码int [ ] x = new int[10];后,以下哪项说明是正确的()

A.x[9]为0

B.x[9]未定义

C.x[10]为0

D.x[0]为空

B 9、类Test1定义如下:

1. public class Test1{

2.public float aMethod(float a, float b){ }

3.

4.}

将以下哪种方法插入行3是不合法的。()

A、public float aMethod(float a,float b,float c){ }

B、public float aMethod(float c,float d){ }

C、public int aMethod(int a,int b){ }

D、private float aMethod(int a,int b,int c){ }

D 10、以下哪个接口的定义是正确的?( )

A、interface A

{ void print() { } ;}

B、abstract interface A

{ void print() ;}

C、abstract interface A extends I1, I2 // I1、I2为已定义的接口

{ abstract void print(){ };}

D、interface A

{ void print();}

C 11、关于以下程序段,正确的说法是( )

1. String s1=“a”+“b”;

2. String s2=new String(s1);

3.if(s1==s2)

4.System.out.println(“= =is succeeded”);

5. if (s1.equals(s2))

6.System.out.println(“.equals() is succeeded”);

A.行4与行6都将执行 B.行4执行,行6不执行

C.行6执行,行4不执行 D.行4、行6都不执行

D 12、下面哪个函数是public void aMethod(){...}的重载函数?()

A、void aMethod( ){...}

B、public int aMethod(){...}

C、public void aMethod ( ){...}

D、public int aMethod ( int m){...}

D 13、下面关于继承的哪些叙述是正确的? ( )

A.在java中允许多继承。

B.在java中一个类只能实现一个接口。

C.在java中一个类不能同时继承一个类和实现一个接口。

D. java的单一继承使代码更可靠。

C 14、关于length()这个方法的表述正确的是哪个? ( )

A.数组有length()这个方法,string也有length()这个方法。

B.数组有length()有这个方法,string没有length()这个方法。

C.数组没有length()这个方法,string有length()这个方法。

D.数组没有length()这个方法,string也没有length()这个方法。

BA 15、选择排序的思想是,将数据序列划分为两个子列,一个子列是排好序的,另一个是尚未排序的。现若想将数据序列由小到大排序,则每次放到有序子列尾部位置的元素,应从无序序列中选择( )。

A)最大的B)最小的C)任意的D)头上的

A 16、类与对象的关系是( )。

A. 类是对象的抽象

B. 类是对象的具体实例

C. 对象是类的抽象

D. 对象是类的子类

BD 17、下列关于修饰符混用的说法,错误的是( )

A. abstract不能与final并列修饰同一个类

B. abstract类中不可以有private的成员

C. abstract方法必须在abstract类中

D. static方法中能处理非static的属性

B 18、编译并运行下述程序段的结果是:( )。

public class Test{

public static void main(String argv[]){

int[] count = new int[4];

System.out.println(count[4]);

}

}

A.编译时错误

B.运行时错误

C.输出0

CB 19、下面是有关子类继承父类构造函数的描述,其中正确的是( )。

A.创建子类的对象时, 先调用子类自己的构造函数,然后调用父类的构造函数。B.子类无条件地继承父类不含参数的构造函数。

C.子类必须通过super关键字调用父类的构造函数。

D.子类无法继承父类的构造函数。

DC 20、下面哪个不是String类的方法?()

A、subString()

B、startsWith()

C、toString()

D、t oUpperCase()

A 21、编译并运行以下程序段的结果是:()

public class MyClass{

final static int i;

MyClass(){i =0;}

public static void main(String args[]){

System.out.println(i);

}

}

A、编译出错

B、null

C、1

D、0

C 22、下面关于java中类的说法哪个是不正确的?()

A、类体中只能有变量定义和成员方法的定义,不能有其他语句。

B、构造函数是类中的特殊方法。

C、类一定要声明为public的,才可以执行。

D、一个java文件中可以有多个class定义。

D 23、下列哪个类声明是正确的? ( )

A、 abstract final class H1{…}

B、 abstract private move(){…}

C、 protected private number;

D、 public abstract class Car{…}

A 24、方法重载是指 ( )

A.两个或两个以上的方法取相同的方法名,但形参的个数或类型不同

B.两个以上的方法取相同的名字和具有相同的参数个数,但形参的类型可以不同

C.两个以上的方法名字不同,但形参的个数或类型相同

D.两个以上的方法取相同的方法名,并且方法的返回类型相同

B 25、Frame的默认的布局管理器是下列哪一个? ( )

A.FlowLayout

B.BorderLayout

C.GridLayout

D.CardLayout

D 26、下面的哪个用户界面组件不是容器? ( )

A. JScrollPane

B. JFrame

C. JWindows

D. JScrollBar

C 27、在下列事件处理机制中哪个不是机制中的角色? ( )

A. 事件

B. 事件源

C. 事件接口

D. 事件处理者

B 28.欲构造ArrayList类的一个实例,此类继承了List接口,下列哪个方法是正确的?( )

A、 ArrayList myList=new Object();

B、 List myList=new ArrayList();

C、 ArrayList myList=new List();

D、 List myList=new List();

B 29器被重新设置大小后,哪种布局管理器的容器中的组件大小不随容器大小的变化而改变? ( )

A、 CardLayout

B、 FlowLayout

C、 BorderLayout

D、 GridLayout

B 30个关键字可以对对象加互斥锁? ( )

A、 transient

B、 synchronized

C、 serialize

D、 static

D 31Teacher和Student是类Person的子类;

Person p;

Teacher t;

Student s;

//p, t and s are all non-null.

if(t instanceof Person) { s = (Student)t; }

最后一句语句的结果是: ( )

A、将构造一个Student对象;

B、表达式是合法的;

C、表达式是错误的;

D、编译时正确,但运行时错误。

D 32行下列程序, 会产生什么结果 ( )

public class X extends Thread implements Runable{

public void run(){

System.out.println("this is run()");

}

public static void main(String args[])

{

Thread t=new Thread(new X());

t.start();

}

}

A、 in the Inner outer

B、 outer

C、 in the Inner

D、编译不通过

A 33下面哪个是对字符串String的正确定义()

A、String s1=null;

B、String s2=’null’ ;

C、String s3=(String) ‘abc’ ;

D、String s4=(String) ‘\uface’;

A 34下面哪条语句定义了5个元素的数组()

A、int [] a={22,23,24,25,12};

B、int a []=new int(5);

C、int [5] array;

D、int [] arr;

D 35给出一段程序,选择运行结果

public class sss {

public static void main(String args[])

{

String s1=args[1]; String s2=args[2];

String s3=args[3]; String s4=args[4];

System.out.println(“args[2]=”+s2);

}

}

命令行执行: java sss 1 2 3 4 结果是下面哪一个?( )

A、args[2]=2

B、args[2]=null

C、args[2]=1

D、运行出现异常

C 36下面哪个描述是正确的()

A、Applet程序中不需要main()方法,也不能有

B、Application程序中可以没有main()方法。

C、Applet程序中可以不定义init( )方法

D、Application程序中必须有run( )方法

B 37给出一段程序,试判断哪个是正确的结果()

public class rtExcept{

public static void throwit(){

System.out.print(“throwit”);

throw new RuntimeException(); }

public static void main(String [] aa){

try{

System.out.print(“hello “);

throwit(); }

catch(Exception re){

System.out.print(“caught ”); }

finally{

System.out.print(“finally ”); }

System.out.print(“after ”);

}

}

A、hello throwit caught

B、hello throwit caught finally after

C、hello throwit RuntimeException after

D、hello throwit caught finally after RuntimeException

C 38下面哪个描述是正确的()

A、Applet程序中不需要main()方法,也不能有

B、Application程序中可以没有main()方法。

C、Applet程序中可以不定义init( )方法

D、Application程序中必须有run( )方法

C 39面哪个修饰符修饰的变量是所有同一个类生成的对象共享的()A、public B、private C、static D、final

C 40面关于java中类的说法哪个是不正确的()

A、类体中只能有变量定义和成员方法的定义,不能有其他语句。

B、构造函数是类中的特殊方法。

C、类一定要声明为public的,才可以执行。

D、一个java文件中可以有多个class定义。

CD 41下面程序运行后的输出结果为()

class A

{static int y=3;

void showy( ){System.out.println(“y=”+y); } }

class testA

{

public static void main(String aaa [])

{ A a1=new A( );

A.y+=1; a1.y++;

a1.showy( );

}

}

输出结果选择:

A、y=3;

B、y=4;

C、y=5;

D、程序运行出错

A 43在java的一个异常处理中,哪个语句块可以有多个()

A、catch

B、finally

C、try

D、throws

B 44果希望所有的控件在界面上均匀排列,应使用下列那种布局管理器?( ) A、BoxLayout B、GridLayout C、BorderLayout D、FlowLouLayout

CD 132.给出如下代码:

class Test{

private int m;

public static void fun() {

// some code...

}

}

如何使成员变量m 被函数fun()直接访问? ( )

A、将private int m 改为protected int m

B、将private int m 改为 public int m

C、将private int m 改为 static int m

D、将private int m 改为 int m

8-实验八Java多线程操作(实验报告内容)

实验八 Java多线程操作 (实验报告) 一、目的 1.掌握Java多线程操作。 二、实验内容 启动线程,线程休眠,线程同步,等待和唤醒 三、实验环境 JDK1.6+dos环境 四、实验原理 通过案例掌握多线程操作。 五、实验步骤 1、设计一个线程操作类,要求可以产生三个线程对象,并可以分 别设置三个线程的休眠时间,如下所示: 线程A,休眠10秒 线程B,休眠20秒 线程C,休眠30秒 2、生产者与消费者问题,生产者生产一台电脑,消费者马上将生 产出的电脑取走。 六、实验小结 1、class MyThread implements Runnable{

String name; int time; public MyThread(String name,int time){ https://www.doczj.com/doc/8314333711.html,=name; this.time=time; } public void run(){ try{ Thread.sleep(this.time); } catch(Exception e){ } System.out.println(https://www.doczj.com/doc/8314333711.html,+"线程,休眠"+this.time/1000+"秒"); } } public class Demo08{ public static void main(String args[]){ MyThread mt1=new MyThread("线程A",10000); MyThread mt2=new MyThread("线程B",20000); MyThread mt3=new MyThread("线程C",30000);

Java语言程序设计第九版第八章答案

Chapter 8 Objects and Classes 1. See the section "Defining Classes for Objects." 2. The syntax to define a class is public class ClassName { } 3.The syntax to declare a reference variable for an object is ClassName v; 4.The syntax to create an object is new ClassName(); 5. Constructors are special kinds of methods that are called when creating an object using the new operator. Constructors do not have a return type—not even void. 6. A class has a default constructor only if the class does not define any constructor. 7. The member access operator is used to access a data field or invoke a method from an object. 8.An anonymous object is the one that does not have a reference variable referencing it. 9.A NullPointerException occurs when a null reference variable is used to access the members of an object. 10.An array is an object. The default value for the elements of an array is 0 for numeric, false for boolean, ‘\u0000’ for char, null for object element type. 11.(a) There is such constructor ShowErrors(int) in the ShowErrors class. The ShowErrors class in the book has a default constructor. It is actually same as public class ShowErrors { public static void main(String[] args) {

Java集合框架实验报告

浙江大学城市学院实验报告 课程名称Java高级程序设计 实验项目名称Java集合框架实验 学生姓名专业班级学号 一、实验目的 1.理解Java集合框架的特点、接口与类之间的关系 2.掌握Java集合框架的List接口,以及List接口的重要实现类LinkedList、ArrayList 3.掌握Java集合框架的Set、SortedSet接口,以及重要实现类HashSet与TreeSet 4.掌握Java集合框架的Map、SortedMap接口及其重要实现类HashMap、TreeMap 5.掌握Java集合框架的Collection与Iterator接口的特点与使用方式 二、实验内容 1、使用List管理对象集合 2、使用Map管理对象集合 3、使用Set管理对象集合 4、设计一个自定义的集合类 三、实验步骤 1、在Eclipse中新建工程(即项目) 2、使用List管理对象集合 1)新建一个包listExample 2)在这个包中新建三个类:Student类,StudentList类,StudentListTest类。 参考代码: Student、java, StudentList、java,StudentListTest、java 3)完善上面三个类,相关要求参考源代码程序的注释,即根据要求修改源代码程序, 给出具体的实现代码(不使用泛型类)。

void addStudent(Student student){//添加一个学生对象 boolean a=true; for(int i=0;i

JAVA实验_题目8

第八章类和对象的扩展 【实验目的】 (1) 类的继承 a. 掌握父类及子类的关系及创建方法 b. 掌握上转型对象的使用方法 c. 掌握子类对象创建过程中与父类构造方法的关系,及super关键字的用法 (2) 多态与接口 a. 掌握抽象类与抽象方法的概念 b. 掌握多态的实现原理及方法 c. 了解成员变量的隐藏 d. 掌握接口的设计方法 【实验范例】 例1:(继承) (1)编写一个圆类Circle,该类拥有: ①一个成员变量 Radius(私有,浮点型);ustID == id) ind=i; } while (true) { "\n1.存款"); "2.取款"); "3.修改密码"); "4.查询"); "5.退出"); sc = new Scanner; switch()) { case 1: "请输入存款金额:"); money = (); cust[ind].deposit(money); cust[ind].displayAccout(); break; case 2: "请输入取款金额:"); money = (); if (cust[ind].withdraw(money)) cust[ind].displayAccout(); else "您的账号余额不足!"); break;

case 3: "请输入新密码:"); cust[ind].custPWD = (); break; case 4: cust[ind].displayAccout(); break; case 5: "欢迎使用xxx银行系统!"); (1); } } } } 【练习题目】 8-1 (继承与多态)有哺乳动物类mammal,将其作为父类,从其派生出子类猫cat和子类狗dog,基类中有方法speak()。 8-2 (重载)编写一个Java应用程序,从键盘读取用户输入两个字符串,并重载3个strAdd函数分别实现这两个字符串的拼接、整数相加和浮点数相加。要进行异常处理,对输入的不符合要求的字符串提示给用户,不能使程序崩溃。(异常处理) 8-3 (接口) 1.利用接口继承完成对生物、动物、人三个接口的定义。其中生物接口定义呼吸抽象方法; 2.动物接口除具备生物接口特征之外,还定义了吃饭和睡觉两个抽象方法; 3.人接口除具备动物接口特征外,还定义了思维和学习两个抽象方法。 4.定义一个学生类实现上述人接口。 8-4 (继承、接口) 实现一个名为Person的类和它的子类Employee,Manager是Employee的子类,设计一个接口Wage,用于涨工资,普通员工一次能涨10%,经理能涨20%。 具体要求如下: (1)接口Wage包含addWage方法,创建类WageImpl用于实现接口Wage (2)Person类中的属性有:姓名name(String类型),地址address(String类型),定义该类的构造方法; (3)Employee类中的属性有:工号ID(String型),工资wage(double类型),工龄(int型),定义该类的构造方法; (4)Manager类中的属性有:级别level(String类型)定义该类的构造方法; (5)编写一个测试类,产生一个员工和一个经理给该员工和经理涨工资,并输出其具有的信息。

java习题及答案第8章 习题参考答案

第8章图形用户界面编程 8.1 什么是组件?什么是容器?并说明各自的作用。 答:从实现角度来看,组件(Component)是构成GUI 的基本要素,作用是通过对不同事件的响应来完成和用户的交互或组件之间的交互;容器是能容纳和排列组件的对象,如Applet、Panel(面板)、Frame(窗口)等,作用就是放置组件并控制组件位置。 8.2 叙述AWT和Swing组件的关系,指出Swing组件的优点。 答:Swing是在AWT基础上扩展而来的,提供了非常丰富的组件,远远多于AWT,并且引入了新的概念和性能,这使得基于Swing开发GUI应用程序比直接使用AWT开发更为灵活、方便、效率高,而且能设计出更优美的、感受更好的GUI。Swing是由javax.swing包提供的,主要包括两种类型的组件:顶层容器和轻量级组件。它们都以“J”开头。 8.3 总结JFrame的使用要点,并说明如何实现窗体的正常退出。 答:JFrame类包含很多设置窗体的方法,可以用setTitle(String title)方法设置窗体标题,用setBounds(int x,int y,int width,int height)方法设置窗体显示的位置及大小,用setVisable(Boolean b)方法设置可见与否(默认不可见)。此外,向JFrame添加组件有两种方式:调用getContentPane()方法获得内容面板,而后向其中添加组件,或者创建一个中间容器并将组件添加其中,而后用setContentPane()方法把该中间容器设置为JFrame的内容面板。由于JFrame对象的关闭按钮的默认动作只是将窗体隐藏,所以为了正确关闭窗体,应通过setDefaultCloseOperation(int operation)方法设置关闭按钮的动作。 8.4 总结常用Swing组件使用特点。 答:常用Swing组件使用时,首先要创建对应组件的对象,并放置在容器中,一般来说可用setText(String t)设置其的文本信息,setFont(Font font):设置文本的字体及大小,对于列表类组件还可以用AddItem()等方法加入选项,用getSelectedIndices()以int[]形式获得被选中的所有选项的索引值,具体使用方法可参照例8.6。 8.5 查阅资料,简述三个菜单类组件之间的关系,并编写一个带有文件菜单的GUI程序。 答:菜单相关的类主要有菜单栏类JMenuBar、菜单类JMenu和菜单项类MenuItem,此外,还有单选菜单项类JRadioButtonMenuItem和复选菜单项类JCheckBoxMenuItem以及弹出式菜单类JPopupMenu等。前三者的关系是菜单放置在菜单栏上,菜单由若干个菜单项组成。 提示:带有文件菜单的GUI程序核心代码如下:

java基本数据类型习题(选择24)

1、下列哪一个是合法的标识符: A、12class; B、+viod; C、-5; D、_black; 2、下列哪一个不是JAVA语言中保留字: A、if; B、sizeof; C、private; D、null; 3、下列描述中正确的一项是: A、标识符首字符的后面可以跟数字; B、标识符不区分大小写; C、复合数据类型变量包括布尔型、字符型、浮点型; D、数组属于基本数据类型; 4、下列哪一项不属于变量的组成部分: A、变量名; B、变量属性; C、变量初值; D、变量大小; 5、下列关于变量组成部分描述正确的一项是: A、变量名不是标识符;

B、变量名是标识符; C、浮点型属于复合类型; D、变量属性分为:基本类型和符合类型; 6、下列选项中,哪一项不属于JAVA语言的简单数据类型: A、整数型; B、数组; C、字符型; D、浮点型; 7、下列关于变量作用域的描述中,不正确的一项是: A、变量属性是用来描述变量作用域的; B、局部变量作用域只能是它所在的方法的代码段; C、类变量能在类的方法中声明; D、类变量的作用域是整个类; 8、下列关于基本数据类型的说法中,不正确的一项是: A、boolean是JAVA非凡的置值,或者为真或者为假; B、float是带符号的32位浮点数; C、double是带符号的64位浮点数; D、char应该上是8位的Unicode字符; 9、下列关于溢出的说法中,正确的一项是: A、一个整型的数据达到整型能表示的最大数值后,再加1,则机器产生上溢,结果为整型的最大值; B、一个整型的数据达到整型能表示的最小数值后,再减1,

java 实验七 对象集合 实验报告

实验七对象集合的组织 实验目标: 1.了解Collection、List、Set、Map等常用数据结构的层次结构 2.掌握LinkList、Vector、ArrayList、HashTable、HashMap等类的用法 3.掌握Enumeration(枚举)及Iterator(迭代器)的遍历用法 4.了解自学HashSet、TreeSet这两个Set接口下的重要实现类 5.了解自学比较器接口 实验任务: 1. 填空 List 接口的特点是元素__有__(有|无)顺序,___可以___(可以|不可以)重复; Set 接口的特点是元素__无___(有|无)顺序,__不可以____(可以|不可以)重复; Map 接口的特点是元素是键、值对象,其中__键__可以重复,_值对象__不可以重复 2. (List)有如下代码: import java.util.*; public class TestList{ public static void main(String args[]){ List list = new ArrayList(); list.add(“Hello”); list.add(“World”); list.add(1, “Learn”); list.add(1, “Java”); printList(list); } public static void printList(List list){ //1 } } 要求: 1) 把//1 处的代码补充完整,要求输出list 中所有元素的内容,请使用三种方式来实现(课本227页,Iterator、增强for循环,普通循环)。 2) 三种代码与执行结果截图 1、用Iterator实现的代码如下: package zi; import java.util.*; publicclass Ex7_2{ publicstaticvoid main(String args[]){ List list = new ArrayList(); list.add("Hello"); list.add("World"); list.add(1, "Learn");

实验一java基础知识

实验一:java基础知识 实验目的: 1.掌握jave中变量的类型。 2.掌握常用的运算符 3.程序流程控制:顺序,选择和分支 实验内容: 1、回文数: 编写一个Java程序。用户从键盘输入一个1-9999之间的数,程序将判断这个数是几位数,并判断这个数是否回文数。回文数是指该数含有的数字逆序排列后得到的数和原数相同。 实验类别:验证性 2、猜数字游戏 编写一个Java应用程序,实现如下功能: 程序随机分配给客户一个1-100之间的整数 用户在输入对话框中输入自己的猜测 程序返回提示信息,提示信息分别是:“猜大了”、“猜小了”、和“猜对了”用户可以根据提示信息再次输入猜测,直到提示信息是“猜对了” 实验类别:设计性 3、输出希腊字母表 为了输出希腊字母表,首先获取希腊字母表的第一个字母和最后一个字母在unicode表中的位置,然后使用循环输出剩余的希腊字母 要观察一个字符在uniclde表中的顺序位置 实验类别:设计性

实验二类和对象 实验目的: 1.理解类的基本概念。 2.掌握如何定义类,定义类的成员变量和成员方法.创建和使用对象。 3.掌握定义重载方法和构造方法,方法参数的传递。 4. static变量和方法的使用。 实验内容: 1、定义一个名为Rectangle的类表示矩形,其中含有length,width两个double型 的成员变量表示矩形的长和宽。要求为每个变量定义访问方法和修改方法,定义求矩形周长的方法peremeter和求面积的方法area。定义一个带参数构造方法,通过给出的长和宽创建矩形对象。定义默认构造方法,在该方法中调用有参构造方法,将矩形长宽设置为1.0。 实验类别:验证性 2、方法重载: 编写一个Java程序,反映方法重载的使用特点,该程序包含多个重载的加法的运算,如整型加法,实型加法。 实验类别:验证性 3、学生类的创建: 1)创建一个student类,包括的域有学号、班号、姓名、性别、年龄等 2)声明一个构造方法,以初始化对象的所有域 3)声明分别获得各属性(学号、班号、姓名、性别、年龄)的各个public方法。4)声明修改各属性(学号、班号、姓名、性别、年龄)的各个public方法。5)创建一个具体学生对象,进行输出。 实验类别:设计性 4、定义一个类,类中有两个整型变量x和y,并定义构造函数初始化这两个变量。(通过构造函数传数据,数据值自定) 类中还可定义以下方法: 求两个数的和(x+y)并返回结果,求两个数的差(x-y)并返回结果,求两个数商(x/y)并返回结果,求两个数的余数(x%y)并返回结果,求两个数的最大值并返回结果。 编写应用程序,测试上面定义的类,使用类中定义的各个方法并将其结果输出。实验类别:验证性 5、用set()、get()方法传递数据: 本工程共有三个类,Person类、Employee类、和Test类,其中Test类 为测试类,其中有main()方法。 调用的是默认的构造方法,参数为空。 实验类别:设计性

java语言程序设计第八章第十一题参考答案

为一个2*2的线性方程设计一个名为LinearEquation的类,然后编写一个测试程序测试它: 代码:/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * * @author Administrator */ class LinearEquation{ int a,b,c,d,e,f; LinearEquation(int a,int b,int c,int d,int e,int f){ this.a=a; this.b=b; this.c=c; this.d=d;

this.e=e; this.f=f; } int getA(){ return a; } int getB(){ return b; } int getC(){ return c; } int getD(){ return d; } int getE(){ return e; } int getF(){ return f; } boolean isSolvable(){

return a*d-b*c!=0?true:false; } int getX(){ return (e*d-b*f)/(a*d-b*c); } int getY(){ return (a*f-e*c)/(a*d-b*c); } } public class XiTi811 { public static void main(String[] args){ System.out.println("请输入a,b,c,d,e,f的值:"); java.util.Scanner input=new java.util.Scanner(System.in); System.out.print("a="); int a=input.nextInt(); System.out.print("b="); int b=input.nextInt();

Java 基本数据类型取值范围讲解

Java 基本数据类型取值范围讲解 一、Java的类型词语理解: 1) 原始数据类型,简单类型,基本类型都是一个含义; 2)复合类型,扩展类型,复杂类型、引用类型都是一个含义; 3)浮点类型,实数、实型都是一个含义; 4)逻辑型、布尔型都是一个含义; 5)本人个人认同的类型分类: 阅读时需要理解: 定点:定点的意思是把小数点定在末尾,小数点后没有数字的数据,Java中通常把它们称为整数; 常量:就是直接的值; 变量:放置常量的容器,除了放置常量之外,也可以给变量一个运算式,变量中的值是可变的; 二、Java数据类型基本概念: 数据类型在计算机语言里面,是对内存位置的一个抽象表达方式,可以理解为针对内存的一种抽象的表达方式。接触每种语言的时候,都会存在数据类型的认识,有复杂的、简单的,各种数据类型都需要在学习初期去了解,Java是强类型语言,所以Java对于数据类型的规范会相对严格。数据类型是语言的抽象

原子概念,可以说是语言中最基本的单元定义,在Java里面,本质上讲将数据类型分为两种:基本类型和引用数据类型。 基本类型:简单数据类型是不能简化的、内置的数据类型、由编程语言本身定义,它表示了真实的数字、字符和整数。 引用数据类型:Java语言本身不支持C++中的结构(struct)或联合(union)数据类型,它的复合数据类型一般都是通过类或接口进行构造,类提供了捆绑数据和方法的方式,同时可以针对程序外部进行信息隐藏。 三、Java中的数据类型与内存的关系 在Java中,每个存放数据的变量都是有类型的,如: char ch;float x;inta,b,c; ch是字符型的,就会分配到2个字节内存。不同类型的变量在内存中分配的字节数不同,同时存储方式也 是不同的。 所以给变量赋值前需要先确定变量的类型,确定了变量的类型,即确定了数据需分配内存空间的大小,数 据在内存的存储方式。 四、Java数据类型在内存中的存储: 1)基本数据类型的存储原理:所有的简单数据类型不存在“引用”的概念,基本数据类型都是直接存储在内 存中的内存栈上的,数据本身的值就是存储在栈空间里面,而Java语言里面八种数据类型是这种存储模型; 2)引用类型的存储原理:引用类型继承于Object类(也是引用类型)都是按照Java里面存储对象的内存 模型来进行数据存储的,使用Java内存堆和内存栈来进行这种类型的数据存储,简单地讲,“引用”是存储 在有序的内存栈上的,而对象本身的值存储在内存堆上的; 区别:基本数据类型和引用类型的区别主要在于基本数据类型是分配在栈上的,而引用类型是分配在堆上的(需要java中的栈、堆概念), 基本类型和引用类型的内存模型本质上是不一样的。 例1:我们分析一下”==“和equals()的区别。 首先,我定以两个String对象 String a="abc";

实验二 Java类-实验报告

南京信息工程大学实验(实习)报告 实验(实习)名称Java类实验(实习)日期 10.17 得分指导教师刘文杰院计算机与软件学院专业软件工程年级 2017级班次 1 姓名张成学号20171344024 1.实验目的: 1)熟练MyEclipse工具的使用与调试; 2)掌握Java类、方法和变量的定义和使用; 3)熟悉方法重载和覆盖、掌握this和supper关键字使用; 4)掌握4类访问控制符的使用。 2.实验内容: (1)定义一个类Circle,实现其面积计算功能getArea(); (2)编写程序,读入一个正整数并按降序显示它的所有最小因子。(教材第3章习题9)(3)利用多态性编程,实现求三角形、正方形和圆形的面积。(教材第4章习题6) 3.实验步骤 1、 public class Circle { public double radius; public Circle(double r) { radius= r; } public double getArea() { return radius*radius*Math.PI; } public static void main(String[] args) { Circle area1 = new Circle(5); System.out.println("The area is " + area1.getArea()); } }

2、 import java.util.Scanner; public class Read { public static void main(String[] args) { Scanner input =new Scanner(System.in); System.out.print("输入一个正整数:"); int n=input.nextInt(); int []a=new int[n]; int []b=new int[n]; int p,q=0,m=0; for(p=2;p<=n;p++) { while(n%p==0) { n=n/p; if(n!=1) { a[q]=p; q++; } else { a[q]=p; } } } while(q!=-1) { b[m]=a[q]; m++; q--; } for(p=0;p

Java语言程序设计郑莉第八章课后习地的题目详解

Java语言程序设计 第八章课后习题答案 1.进程和线程有何区别,Java是如何实现多线程的。 答:区别:一个程序至少有一个进程,一个进程至少有一个线程;线程的划分尺度小于进程;进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。 Java程序一般是继承Thread 类或者实现Runnable接口,从而实现多线程。 2.简述线程的生命周期,重点注意线程阻塞的几种情况,以及如何重回就绪状态。 答:线程的声明周期:新建-就绪-(阻塞)-运行--死亡 线程阻塞的情况:休眠、进入对象wait池等待、进入对象lock池等待; 休眠时间到回到就绪状态;在wait池中获得notify()进入lock池,然后获得锁棋标进入就绪状态。 3.随便选择两个城市作为预选旅游目标。实现两个独立的线程分别显示10次城市名,每次显示后休眠一段随机时间(1000毫秒以内),哪个先显示完毕,就决定去哪个城市。分别用Runnable接口和Thread类实现。 (注:两个类,相同一个测试类) //Runnable接口实现的线程runable类 public class runnable implements Runnable {

private String city; public runnable() {} public runnable(String city) { this.city = city; } public void run() { for (int i = 0; i < 10; i++) { System.out.println(city); try { //休眠1000毫秒。 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } // Thread类实现的线程thread类 public class runnable extends Thread { private String city; public runnable() {}

实验3 JAVA基本数据类型

实训报告 实验三JA V A基本数据类型(2) 【实验目的】 1.掌握标识符的定义规则。 2.掌握表达式的组成。 3.掌握Java 基本数据类型及其使用方法。 4.理解定义变量的作用,掌握定义变量的方法。 5.掌握各种运算符的使用及其优先级控制。 6.通过以上内容,掌握Java 语言的编程规则。 【预习内容】 1.一个声明Java 不同数据类型:整形、浮点型、字符型等类型的特点。 2.JAVA各类运算符:算术运算符、关系运算符、逻辑运算符的使用方法。 3. JAVA各类表达式:算术表达式、关系表达式、逻辑表达式的综合应用。 4.熟练掌握JAVA常用输入输出方法的使用。 5.System.out以及Scanner类的使用的。 【实验内容及步骤】 1、请利用Scanner类通过键盘输入三个不同值的整数a、b和c,并将中间值的数显示于屏幕上。 [程序清单] import java.util.Scanner; public class xjp1 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int a,b,c; System.out.print("请输入a:"); a = scan.nextInt(); System.out.print("请输入b:"); b = scan.nextInt();

System.out.print("请输入c:"); c = scan.nextInt(); if(a>b && a>c) { if(b>c) System.out.println("中间值=" + b); else System.out.println("中间值=" + c); } if(b>a && b>c) { if(a>c) System.out.println("中间值=" + a); else System.out.println("中间值=" + c); } if(c>a && c>b) { if(a>b) System.out.println("中间值=" + a); else System.out.println("中间值=" + b); } } } [程序运行结果(截图)] 2、、请利用Scanner类通过键盘输入两个整型变量a,b的值,输出a+b,a-b,a*b,a/b,(float)a/b,a%b的结果,要求连同算式一起输出,每个算式占一行。 例:a等于10,b等于5, a+b的结果输成 10+5=15

JAVA实验报告-集合框架与泛型机制

Java 语言程序设计 C 实验报告 集合框架及泛型机制 学生姓名 专业、班级 指导教师 成绩 计算机与信息工程学院 年月日

一、实验目的 学习课程相关章节知识,通过上机练习,掌握以下知识: 1.掌握 List 接口下 ArrayList 及 LinkedList 的使用方法。 2.掌握 Map 接口下 HashMap 及 HashTable的使用方法 3.掌握集合中泛型的使用 二、实验内容 利用集合完成象数据库那样存储数据,并且可以简单查询,利用 map 存储学生信息,字段如下: id ,name,age,实现步骤: (1)创建类,类图如下: (2)在 main 方法编写逻辑代码 (3)运行程序并测试结果 package https://www.doczj.com/doc/8314333711.html,; public class Student { private String name ; private int age ; private String id ;

public String getName() { return name ; } public void setName(String name ) { this . name =name ; } public int getAge() { return age ; } public void setAge(int age ) { this. age=age ; } public String getId() { return id; } public void setId(String id) { this. id=id; } public Student(String name ,int age , String id ) { super(); this. name =name ; this. age=age ; this. id=id; } public void sayHi() { System.out.println("name=" +this.getName()+"age=" + this .getAge()+" " + "id=" + this.getId()); } }

《Java面向对象程序设计》实验-实验八(输入输出流)

广西科技大学 计通学院 《Java面向对象程序设计》实验实验八输入输出流 学生姓名:××× 学号:××× 班级:××× 指导老师:××× 专业:计算机科学与技术 提交日期:×××年××月××日 实验报告内容 1.实验目的 掌握字符输入、输出流用法; 掌握使用Scanner类解析文件; 掌握Console流的使用。 2.实验内容 实验教材-第12章实验1、2、3 字符输入输出流;Scanner类与Console类。 要求:完善程序,给出实验结果截图; 完成试验后练习。 3.程序代码及运行结果: 实验1 举重成绩单 //AnalysisResult、java import java、io、*; import java、util、*;

public class AnalysisResult { public static void main(String[] args) { File("score、txt"); File("scoreAnalysis、txt"); try{ Writer out=new (fWrite); BufferedWriter bufferWrite=new BufferedWriter(out); Reader in=new (fRead); BufferedReader bufferRead=new BufferedReader(in); String str=null; while((str=bufferRead、 readLine())!=null){ double totalScore=Fenxi、getTotalScore(str); str=str+"总成绩:"+totalScore; System、out、println(str); bufferWrite、write(str); bufferWrite、newLine(); } bufferRead、close(); bufferWrite、close(); } catch(IOException e){ System、out、println(e、toString()); } } } //Fenxi、java import java、util、*;

《java2实用教程》(第四版)课后答案 第七章-第八章

Java程序设计第三次作业 第7章习题 4.1程序代码 import java.util.*; public class SUMANDAVERAGE { public static void main(String[] args) { Scanner reader=new Scanner(System.in); double sum=0; int m=0; while(reader.hasNextDouble()){ double x=reader.nextDouble(); assert x>=0&&x<=100:"该数是非法的成绩数据!"; m=m+1; sum=sum+x; } System.out.printf("%d个数的和为%f\n", m,sum); System.out.printf("%d个数的平均值为%f\n",m,sum/m); } } 4.2运行结果 第8章习题 4.1程序代码 package kehou; import java.util.Calendar; import java.util.InputMismatchException; import java.util.Scanner; public class BC8_4 { public static void main(String[] args) { System.out.print("请选择你要完成的功能:\n1,转换字母大小写及连接两个字符串。\n2,得到字符串第一个和最后一个字符。\n3,计算两个时间之间的间隔天数。\n" + "4,使用简单的Math类用法。\n5,剔除字符串中的非数字字符。\n6,解析字符串。\n."); System.out.print("输入数字i(i=1...6;输入0结束!):"); Scanner reader=new Scanner(System.in);

操作系统实验报告java

操作系统实验报告 院系: 专业: 班级: 学号: 姓名: 指导老师:

进程调度的模拟与内存管理 一、实验目的 在采用多道程序设计的系统中,往往有若干个进程同时处于就绪状态。当就续进程个数大于处理器数时,就必须依照某种策略来决定哪些进程优先占用处理器。实验模拟实现处理机调度,以加深了解处理机调度的工作,并体会优先级和时间片轮转调度算法的具体实施方法。帮助了解在不同的存储管理方式下,应怎样实现主存空间的分配和回收。 二、实验要求 1、可随机输入若干进程,并按优先权排序; 2、从就绪队首选进程运行:优先权-1/要求运行时间-1 要求运行时间=0时,撤销该进程 3、重新排序,进行下轮调度。 4、可随时增加进程; 5、规定道数,设置后备队列和挂起状态。若内存中进程少于规定道数,可 自动从后备队列调度一作业进入。被挂起进程入挂起队列,设置解挂功 能用于将指定挂起进程解挂入就绪队列。 6、每次调度后,显示各进程状态。

7、自行假设主存空间大小,预设操作系统所占大小并构造未分分区表; 表目内容:起址、长度、状态(未分/空表目) 8、结合以上实验,PCB增加为: {PID,要求运行时间,优先权,状态,所需主存大小,主存起始位置, PCB指针} 9、采用最先适应算法分配主存空间; 10、进程完成后,回收主存,并与相邻空闲分区合并。 11、采用图形界面; 三、实验内容 选择一个调度算法,实现处理机调度。 1、设计一个按优先权调度算法实现处理机调度的程序; 2、设计按时间片轮转实现处理机调度的程序。 3、主存储器空间的分配和回收。在可变分区管理方式下,采用最先适应算法实现主存空间的分配和回收。 四、实验原理 该模拟系统采用java语言实现,要实现的功能有新建进程、进程调度、挂起进程、解挂进程、删除进程,道数和时间片大小可以由用户自己调整,有两种调度策略:按优先权调度和按时间片轮转调度。每个进程可能有5种状态:新建(new)、就绪(ready)、运行(running)、阻塞(waiting)、挂起(suspend)。每个状态都有一个队列用来存放处于该状态的进程,不同的调度策略采用不同的队列实现。当创建进程时,如果内存中的进程数还没达到规定道数,则将新建进程插入就绪

相关主题
文本预览
相关文档 最新文档