Java语言程序设计(一)课后习题答案
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第一章Java语言基础
指出Java语言的主要特点和ava程序的执行过程。
答:强类型。
编译和解释。
自动无用内存回收功能。
面向对象。
与平台无关。
安全性。
分布式计算。
多线程。
2.说出开发与运行Java程序的主要步骤。
答:安装SUN的JDK,配置class path
编写源文件。
编译。
运行。
3.如何区分应用程序和小应用程序。
答:应用程序必须在一类中定义一个main()方法,该方法代表应用程序的入口。
小应用程序不必定义main()方法,但是必须继承applet类。
4.说出Java源文件的命名规则。
答:和类命名规则一样,首字母大写。
5.选择一种上机环境,参照实例,编写一个输出“hello world!”字样的Java程序。
答:选择SUN的IDE,用UltraEdit-32编写如下:
//HelloWorld.java
/**
*<p>这是第一个程序</p>
*@author 饶林
*@see
*/
class HelloWorld{
public static void main(String[] args) {
System.out.println("Hello World!");
}
}
6.Java用什么字符集?共有多少个不同的字符?
答:Java语言使用Unicode字符集,共有65535个字符。
7.Java语言标识符的命名规则是什么?
答:由字母(包括英文字母、下划线、美元字符、文字字符)和数字字符组成。
限定标识符的第一个字符不能是数字。
8.Java有哪些基本的数据类型,它们的常量又是如何书写的?
答:基本的数据类型也称为原始数据类型,是系统预先规定的一些常用类型。
它们是:整数类型、浮点数(实数)类型、字符(文字)类型、逻辑类型(布尔型)。
9.指出下列内容那些事Java语言的整形常量,哪些是浮点数类型常量,那些两者都不是?
1)E-4 2)A423 3)-1E-31 4)0xABCL 5).32E31 6)087 7)0x L
8)003 9)0x12.5 10)077 11)11E 12)056L 13)0. 14).0
答:整形常量:4,5,6,8,10,12
浮点型:1,3,9,13,14
两者都不是:2,7,11
第二章运算和语句
1.Java字符能参加算术运算吗?
答:能,例如char类型a自加后变b
2.占字节多的变量能直接赋给占字节少的变量吗?
答:不能,需强制类型转换。
3.试用Java语言表达式描述以下数学计算式或逻辑条件:
1)
V=(4/3)*math.PI*math.pow(r,3);
2)R=1/(1/R1+1/R2)
原式
3)y=x5+x3+6
y=pow(x,5)+pow(x,3)+6;
4)F=M1M2/R2
F=M1 *M2 /R*R
5)
Math.sin(x) / ax + Math.cos(π*x/2)>0 ? Math.cos(π*x/2) : - Math.cos(π*x/2);
6) 0 < a <10
a > 0 && a < 10
7) 条件x=1 与y=2 有且只有一个成立
( x == 1 && y != 2) || (x != 1 && y == 2)
4.设再求以下表达式之前,整形变量a的值是4,试指出在求表达式之后变量a,b
和c的值。
1)b=a*a++;
b = 16, a = 5;
2)c = ++a+a;
c = 10, a = 5;
5.编写一个程序示意前缀++和后缀++的区别,前缀—和后缀—的区别。
答:领悟第四题完全就可以理解前缀++后缀++
-- 亦如此。
6.若一个数恰好等于它的因子之和,则这个数称为“完全数”。
编写程序求1000之内的所有完全数。
解析:什么是数的因子?因子就是所有可以整除这个数的数,但是不包括这个数自身.
//HelloWorld.java
/**
*<p>这是第二个程序</p>
*@author 饶林
*@see
*/
public class Praxis2_6{
public static void main(String[] args) {
int i,j,sum;
for(i = 1; i <= 1000; i++){
//sum归0必须在此处
sum=0;
for(j=1; j<= i/2; j++){
if((i%j)==0)
sum = sum+j;
}
if(i == sum)
System.out.print(i + " ");
}
}
}
7.编写输入正实数x,求平方不超过x的最大正整数n,并输出。
解析:
/**
*<p>这是第三个程序</p>
*@author 饶林
*@see
*/
import java.util.*;
public class Praxis2_7
{
public static void main(String[]args)
{
Scanner consoleScanner = new Scanner( System.in );
System.out.print("请输入正实数X:" );
int x = consoleScanner.nextInt();
int y=(int)(Math.sqrt(x));
System.out.println("n = "+y);
}
}
8.输入正整数n输出n行n列星号字符组成三角图案。
/**
*<p>这是第四个程序</p>
*@author 饶林
*@see
*/
import java.util.*;
public class Praxis2_8{
public static void main(String[] args){
Scanner consoleScanner = new Scanner(System.in);
System.out.print("请输入正整数x:");
int x = consoleScanner.nextInt();
for(int y=0; y< x; y++){
for(int m=x-y-1; m>0; m--){
System.out.print(" ");
}
for(int n=0; n< y+1; n++){
System.out.print("*");
}
System.out.println();
}
}
}
9.设有整形变量x和y的值分别为5和110.指出执行了下列语句后,变量x和y后
的值分别是多少?
1)while(x <= y) x*=2;
X=160,y=110;
2) do {x = y/x; y= y-x;} while (y > = 1);
X=18,y=0;
10.水仙花数是一个n( >= 3)位的数,它等于每个数字的n次幂之和。
例如,153是
一个水仙花数,153=13+53+33,是编写一个程序,求小于999的所有水仙花数。
/**
*<p>这是第五个程序</p>
*@author 饶林
*@see
*/
public class Praxis2_10{
public static void main(String[] args){
int x,y,z;
for(int m=100; m< 999; m++){
x = m/100;
y = (m%100)/10;
z = (m%100)%10;
if(m== x*x*x+ y*y*y + z*z*z)
System.out.print(m + " ");
}
}
}
11.编程序解百鸡问题:鸡翁一,值钱五,鸡母一,值钱三,鸡邹三,值钱一,百钱
买百鸡,求鸡翁,鸡母,鸡邹各几何?
/**
*<p>这是第六个程序</p>
*@author 饶林
*@see
*/
public class Praxis2_11
{
public static void main(String args[])
{
for(int i=0;i<=100;i++)
for(int j=0;j<=100;j++)
for(int k=0;k<=100;k+=3) //鸡雏的个数必须使3的倍数
{
if(( (5*i+3*j+k/3)==100 )&& (i+j+k==100))
System.out.println("鸡翁:"+i+"; 鸡母:"+j+"; 鸡雏:"+k);
}
}
}
12.编写程序,按下面的公式计算自然对数底e的值:
e = 1+1/1! + 1/2! + 1/3!......
/**
*<p>这是第七个程序</p>
*@author 饶林
*@see
*/
public class Praxis2_12
{
public static void main(String args[])
{
int n=1000; //计算精度
double e=1.0;
for(int i=1;i<=n;i++)
{
e=e+1.0/Praxis2_12.factorial(i);
}
System.out.println("e = "+e);
}
static double factorial(int a) //计算阶乘的静态方法
{
double f=1.0;
for(int j=1;j<=a;j++)
f=f*j;
return f;
}
}
13.编写程序,用如下公式计算圆周率的近似值:
14.回文整数是正读反读相同的整数,编写一个程序,输入一个整数,判断是否为回
文整数。
/**
*<p>这是第八个程序</p>
*@author 饶林
*@see
*/
import java.util.*;
public class Praxis2_14 //输入整数,判断是否是回文整数
{
public static void main(String args[])
{
int a[]=new int[100];
int i=0;
boolean b=true;
Scanner consoleScanner = new Scanner( System.in );
System.out.print("请输入一个int型整数:" );
int x = consoleScanner.nextInt();
int test=x;
while(test>0) //把整数的各个位上的数存到数组里
{
a[i]=test%10;
test=test/10;
i++;
}
for(int j=0;j< i;j++)
{
if(a[j]!=a[i-j-1])
{
b=false;
break;
}
}
if(b) System.out.println(x+"是回文整数");
else System.out.println(x+"并不是回文整数");
}
}
15.草地上有一堆野果,有一只猴子每天要吃掉一半又一个,五天后刚好吃完,问有
多少个,猴子每天吃多少个?
/**
*<p>这是第九个程序</p>
*@author 饶林
*@see
*/
public class Praxis2_15{
public static void main(String[] args){
int day,x1,x2;
day = 5; x2= 0;
while(day > 0){
x1 = (x2+1)*2;
x2 = x1;
day--;
}
System.out.println("共有"+ x2+"个桃子。
");
System.out.println("----------------------------");
for(int i=1; i< 6; i++){
int east;
east = x2/2 + 1;
x2 = x2/2-1;
System.out.println("第" +i + " 天吃" + east + "个。
" );
}
System.out.println("----------------------------");
}
}
第三章面向对象编程基础
1.什么是面向对象技术?它有什么优点?
答:程序设计者考虑的是对象的描述,对象间的关系,类的管理、什么时候什么地方调用对象的那一种方法。
最大的优点是面向对象编程能有效地支持重用,是超大规模的程序也变得相对容易维护。
2.面向对象的程序设计与面向过程的程序设计有什么区别?
答:面向过程的语言编程编程模式是:
程序= 数据结构+ 算法
编程时需要考虑的是程序做什么,怎么做,重点考虑每个实现的细节。
面向对象的编程模式:
程序= 对象+ 消息
程序设计者考虑的是对象的描述、对象间的关系、类的管理、什么时候和什么地方调用对象的那一种方法。
3.在程序中对象有什么区别?
答:类是对同一种对象的描述,类概括了同类对象的共有性质:数据和方法。
类的每个对象都有自己的标识,但它们具有相同的一组属性和提供相同的一组方法。
4.举例说明类方法和实例方法,以及类变量和实例变量的区别。
什么情况下用实例
变量?什么情况下用类变量?
答:一般静态的数据和方法使用类变量。
5.子类能继承超类的那些成员变量和方法?
超类子类
Private No
(默认)Yes
Protect Yes
Public Yes
6.子类在什么情况下能隐藏超类的成员变量和方法?
答:重写
7.在子类中是否允许有一个方法和超类的方法名字相同,而类型不同?
答:不应许,子类中定义一个方法,并且这个方法的名字、返回类型、参数个数、和类型与从父类继承的方法完全相同。
例如:
class R{
int add(){
in t a=2;
return a++;
}
}
public class RR extends R{
float add(){
float a=2.0;
return a;
}
public static void main(String[] args){
System.out.println(add());
}
}
8.试说出对象、类、继承和多态性的概念。
9.略
10.接口与抽象类的区别。
答:抽象类:what can I do?
接口:I can do it.
例子:就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);一个门可以有锁(接口)也可以有门铃(多实现)。
门(抽象类)定义了你是什么,接口(锁)规定了你能做什么(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))。
11.指出Applet的程序结构及各方法的作用。
答:Java API 的Applet 类为您提供设计applet 程序外观并管理其动作时所需要的支持。
该类提供一种叫做Panel(面板)的图形用户界面(GUI)组件以及大量方法。
要创建一个applet 程序,就需要扩展该Applet 类(或创建子类)并实现您所需要的外观和动作。
12.以下程序的错误:
Takecare.java:5: 无法从静态上下文中引用非静态变量a
float c = a + b;
^
13.试声明一个复数类Complex。
解析:
//样例大家扩展
class Complex{
double a,b;
Complex(){}
Complex(double a, double b){
this.a = a;
this.b = b;
}
public String Print(){
String result= new String(this.a + (b>0?"+":"") + (b!=0?this.b + "i" :""));
return result;
}
public Complex add(Complex val){
Complex result = new Complex();
result.a = this .a + val.a;
result.b = this .b + val.b;
return result;
}
}
public class TestComplex{
public static void main(String [] args){
Complex complex1 = new Complex(1.0,2.0);
Complex complex2 = new Complex(2.0,3.0);
System .out.println(complex1.add(complex2).Print());
}
}
第四章数组和字符串 1.举例说明如何声明、创建初始化数组。
答:有三种方法。
书P69,不一一举例了。
2.略
3.一个数组能存储不同类型的元素吗?
答:不能。
4.编写一个Java 程序,形成以下形式的二维数组,并输出。
解析:
public class Arry{
public static void main(String [] args){
int [][] a = {{1,2,9,10,25},
{4,3,8,11,24},
{5,6,7,12,23},
{16,15,14,13,22},
{17,18,19,20,21}};
for(int i=0; i< a.length; i++){
for(int j= 0; j<a[i].length; j++){
if (a[i][j]<10){
System.out.print(" " + a[i][j]+ " ");
}else
System .out.print(a[i][j]+ " "
);
}
System .out.println();
}
} }
5.Java 中字符数组与字符串有什么区别?
答:数组是一个容器。
6.确定一个字符数组长度与确定一个Sting 对象的长度有什么区别?
答:确定字符数组的长度用属性length ,而String 对象用方法length()。
7.String 类的方法转换。
解析:
public class Convert{
public static void main(String [] args){
String a="StrIng";
System .out.println(a.toUpperCase());
System .out.println(new String (a.toLowerCase()));
}
}
8.使用String 类的concat 方法: 例:
public class TestConcat{
public static void main(String [] args){
String a = new String ("raoliv->");
String b = new String("");
System .out.println(a.concat(b));
}
}
9.试利用java.util.Date 类继承声明实现MyDate 类。
解析:
10.略 11.编写实现从两字符串找出最长的相同字符序列的代码。
解析:得到字符串str1,str2后,有一个为空则子列为空。
如果都不为空,开始下面的步骤。
求得两列的长度分别为n1,n2。
动态生n2行n1列矩阵(二维数组)。
取str2中每个元素(记位置为i)与str1中元素(记位置为j)逐个比较,如果相等则为矩阵中相应行列坐标的元素赋值为1,否则为0(可用循环嵌套完成)。
比如str1(abc0cbad) str2(cba1abc)两串的话,可以得到如图所示矩阵。
然后,不难看出,要进行如下步骤。
定义strax,用来记录最大子列中元素个数。
定义数组l[n2],用来记录最大子列的首字符地址(因为可能有不同最大子列,故用数组,而不是单个变量)。
判断矩阵中每一个元素,是否为1,如果是则记下此时行地址到l数组,然后判断相对于这个元素的下一行下一列的元素是否为1,如果是则继续判断,一直到为0。
记下此次判断(即一个while循环)中“1”的个数n,存入变量strax。
对于矩阵中的每一个元素都这么判断,如果判断中n的值大于strax那么把n付给strax,同时把这个子列的首地址付给l[0],l[0]后面的元素全赋值为-1。
如果,某次判断得到的n 与strax相同,即有相同最大子列,那么把它的首地址存入l数组的下一个位置。
当这个矩阵的每一个元素都判断完毕后,会得到strax,和数组l,然后用循环做如下输出过程:依次以l数组中的每个元素为首地址,输出str2字符串中以相应序号开头的strax个字符,那么完成所有最大子列的输出。
例子:
输入:
aabcbcb
bcabcbac
输出:
abcb
public class test1{
public static void main(String[] args){
int max = 0;
int current = 0;
String str1 = new String("aabcbcb");
String s tr2 = new String("bcabcbac");
int len1 = str1.length();
int len2 = str2.length();
int arr[][];
arr = new int[len1][len2];
//初始化数组
for(int i= 0; i< str1.length(); i++)
for(int j= 0; j< str2.length(); j++)
arr[i][j] = 0;
for(int k = 0; k< str1.length(); k++){
char a = str1.charAt(k);
for(int l= 0; l< str2.length(); l++){
char b = str2.charAt(l);
if (a==b){
arr[k][l]=1;
}else{
arr[k][l] = 0;
}
}
}
for(int i= 0; i< str1.length(); i++)
for(int j= 0; j< str2.length(); j++){
if(arr[i][j] == 1&&arr[i-1][j-1] ==1)
arr[i][j] = arr[i-1][j-1] + 1;
if(max < arr[i][j]){
max = arr[i][j];
current = i;
}
if(max == 0){
System.out.println("没有找到。
");
}else{
System.out.println(str1.substring(current+1-max,max));
}
}
}
}
12.整理字符串将前后空白删去。
并把中间的多个空白保留一个。
解析:用String类的split 方法拆分再连接然后用trim方法去掉前后空格。
public class test2{
public static void main(String[] args) {
String s = " hello raoliv-> Welcome to ";
System.out.println("原来为:" + s);
s= s.trim();
s = s.replaceAll("\\s+","#");
String ss[] = s.split("#");
System.out.print("替换后:");
for(int i=0;i<ss.length;i++){
System.out.print(ss[i]+ " ");
}
}
}
13.略
第五章图形界面设计(一)
1.Swing与AWT有何关系?
答:Swing是AWT的提高和扩展,共存于Java基础类。
AWT依赖于平台绘制用户界面组件,而Swing有自己的机制。
2.什么是组件对象?什么是容器?容器和其它类型的组件有什么不同?
答:略P86
3.略
4.略
5.略
6.编一小应用程序,小应用程序窗口有一个按钮,当点击时点击的次数会显示在按
钮上。
解析:先用javac编译成class字节码,再在当前文件夹下建一个html页面源文件如下.。
import java.applet.*;
import javax.swing.*;
import java.awt.event.*;
public class Praxis5_6 extends Applet implements ActionListener
{
int num=0;
public void init()
{
setSize(300,200);
button1=new JButton(""+num);
button1.addActionListener(this);
add(button1);
}
public void actionPerformed(ActionEvent e)
{
button1.setText(""+num++);
}
}
/*html页面
<html>
<body>
<applet code="Praxis5_6.class" width="300" height="300">
</applet>
</body>
</html>
*/
7.创建一个有文本框和三个按钮的程序当按下某个按钮时使不同的文字显示在文本
框中。
解析:
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Praxis5_7{
public static void main(String[] args){
ButtonDemo buttondemo = new ButtonDemo();
}
}
class ButtonDemo extends JFrame implements ActionListener{
JTextField text;
JButton button1,button2;
ButtonDemo() {
supe r("Praxis5_8");
Container con=this.getContentPane();
setLayout(new FlowLayout());
text=new JTextField(10);
button1 = new JButton("raoliv");
button2 = new JButton("欢迎来到");
button1.addActionListener(this);
button2.addActionListener(this);
con.add(text);
con.add(button1);
con.add(button2);
setSize(300,200);
setVisible(true);
}
public void actionPerformed(ActionEvent e){
if(e.getSource() == button1)
text.setText(button1.getLabel());
else if(e.getSource() == button2)
text.setText(button2.getLabel());
}
}
8.编写一个有两个文本狂的小应用程序,在第一个文本框输入英文单词,第二个文本
框自动显示汉语解释,或在第一个文本框输入单词,第二个文本框显示英语。
解析:只增加了一个单词raoliv->饶林饶林->raoliv 可以多写几个.。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Praxis5_8{
public static void main(String[] args){
MyWindow a = new MyWindow();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyWindow extends JFrame implements ActionListener{
JTextField text1,text2;
JLabel label;
MyWindow() {
super("Praxis5_8");
setLayout(new FlowLayout());
text1 = new JTextField(10);
text2 = new JTextField(10);
text2.setEditable(false);
label = new JLabel("输入字符:");
this.getContentPane().add(label);
this.getContentPane().add(text1);
this.getContentPane().add(text2);
text1.addActionListener(this);
setSize(400,100);
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e){
String word = text1.getText();
if(word.equals("raoliv")) Array text2.setText("饶林");
else if(word.equals("饶林"))
text2.setText("raoliv");
else
text2.setText("没有找到");
}
}
9.编写一个有标签、有文本框、文本区和两个按钮的小应用程序。
,,,
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
public class Praxis5_9{
public static void main(String[] args){
MyWindow a = new MyWindow();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class MyWindow extends JFrame implement s ActionListener{
JLabel label;
JTextField text;
JButton button1,button2;
JTextAre a textArea;
JPanel pan1,pan2;
MyWindow(){
super("Praxis5_9");
setSize(300,300);
setLayout(new FlowLayout());
label = new JLab el();
text = new JTextField(15);
textArea = new JTextArea(10,10);
button1 = new JButton("S UM");
button2 = new JButton("A VG");
pan1 = new JPanel();
pan2 = new JPanel();
JScrollPane jsp = new JScrollPane(textArea);
jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS);
jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALW AYS);
getContentPane().add(jsp);
getContentPane().add(button1);
getContentPane().add(button2);
getContentPane().add(label);
getContentPane().add(text);
button1.addActionListener(this );
button2.addActionListener(this );
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e){
String s = textArea.getText();
StringTokenizer t = new String Tokenizer(s,"'\n',;. ");
int n = t.countTokens();
int a[] = new int[n];
for(int i = 0; i< n; i++){
a[i] = Integer.parseInt(t.nextToken());
}
if (e.getSource() == button1){
label.setText("输入数的和为:");
int sum = 0;
for(int i = 0; i< n; i++){
sum = sum+ a[i];
}
text.setText ("" + sum);
}else
if(e.getSource() == button2){
label.setText ("输入数平均值为:");
int sum = 0;
for(int i = 0; i< n; i++){
sum = sum+ a[i];
}
text.setText("" + sum/n);
}
} }
10.布局如下:
import java.awt.*;
import javax.swing.*;
public class Praxis5_10{
public static void main(String args[]){
window win=new
window();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
class window extends JFrame{
JScrollPane jsp1,jsp5;
JPanel panel2,panel3,panel4,panel6;
JTextArea jsp1_Text,jsp5_Text;
JLabel panel2_Label;
JTextField panel2_Field;
JPanel
panel3_p1,panel3_p2,panel4_p1,panel4_p2,panel4_p3,panel6_p1,panel6_p2,panel6_p3;
JButton panel4_b1,panel4_b2;
window(){
super("Praxis5_10");
setSize(600,120);
setLayout(new GridLayout(2,3));
setVisible(true);
jsp1_Text=new JTextArea("文本区(带滚动条)");
JScrollPane jsp1=new JScrollPane(jsp1_Text);
panel2=new JPanel();
panel2_Label=new JLabel("标签");
panel2_Field=new JTextField("文本框");
panel3=new JPanel();
panel3_p1=new JPane l();
panel3_p2=new JPanel();
panel4=new JPane l();
panel4_b1=new JButton("按钮");
panel4_b2=new JButton("按钮");
panel4_p1=new JPanel();
panel4_p2=new JPanel();
panel4_p3=new JPanel();
jsp5_Text=new JTextArea("文本区(带滚动条)");
JScrollPane jsp5=new JScrollPane(jsp5_Text);
panel6=new JPanel();
panel6_p1=new JPane l();
panel6_p2=new JPanel();
panel6_p3=new JPanel();
jsp1.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
jsp1.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AL WAYS);
jsp5.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS) ;
jsp5.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_AL WAYS);
panel2.setLayout(new GridLayout(2,1));
panel2.add(panel2_Label);panel2.add(panel2_Field);
panel3.setLayout(new GridLayout(1,2));
panel3_p1.setBackground(Color.BLACK);
panel3_p2.setBackground(Color.BLUE);
panel3.add(panel3_p1);panel3.add(panel3_p2);
panel4.setLayout(new GridLayout(1,3));
panel4_p1.setLayout(new GridLayout(2,1));
panel4_p1.add(panel4_b1);panel4_p1.add(panel4_b2);
panel4_p2.setBackground(Color.BLUE);
panel4_p3.setBackground(Color.BLACK);
panel4.add(panel4_p1);panel4.add(panel4_p2);panel4.add(panel4_p3);
panel6.setLayout(new GridLayout(1,3));
panel6_p1.setBackground(Color.RED);
panel6_p2.setBackground(Color.GREEN);
panel6_p3.setBackground(Color.orange);
panel6.add(panel6_p1);panel6.add(panel6_p2);panel6.add(panel6_p3);
add(jsp1);
add(panel2);
add(panel3);
add(panel4);
add(jsp5);
add(panel6);
validate();
}
}
第六章图形界面设计(二)
1.设计一个面板,该面板中有四个运动项目选择框和一个文本区。
当某个选择项目
被选中时,在文本区中显示该选择项目。
解析:选多个
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class panel extends JPanel{
JCheckBox box1,box2,box3,box4,box5;
//ButtonGroup g;
JTextArea text;
panel(){
setLayout(new GridLayout(1,6));
//g = new ButtonGroup();
box1 = new JCheckBox("高丽华");
box2 = new JCheckBox("饶林");
box3 = new JCheckBox("谌凯");
box4 = new JCheckBox("韩伟虎");
box5 = new JCheckBox("梁继杰");
text = new JTextArea(5,5);
//g.add(box1);g.add(box2);g.add(box3);g.add(box4);g.add(box5);
add(box1); add(box2); add(box3);add(box4);add(box5);
add(text);
}
}
class MyWindow extends JFrame implements ItemListener{
panel panel1;
MyWindow(){
super("Praxis6_1");
Container con = this.getContentPane();
con.setLayout(new FlowLayout());
setSize(400,100);
panel1 = new panel();
add(panel1);
panel1.box1.addItemListener(this);
panel1.box2.addItemListener(this);
panel1.box3.addItemListener(this);
panel1.box4.addItemListener(this);
panel1.box5.addItemListener(this);
setVisible(true);
pack();
}
public void itemStateChanged(ItemEvent e){
if(e.getItemSelectable()== panel1.box1)
panel1.text.append("高丽华"+ "\n");
else if(e.getItemSelectable()== panel1.box2)
panel1.text.append("饶林"+ "\n");
else if(e.getItemSelectable()== panel1.box3)
panel1.text.append("谌凯"+ "\n");
else if(e.getItemSelectable()== panel1.box4)
panel1.text.append("韩伟虎"+ "\n");
else if(e.getItemSelectable()== panel1.box5)
panel1.text.append("梁继杰"+ "\n");
}
}
public class Praxis6_1{
public static void main(String[] args){
MyWindow win = new MyWindow();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
2. 设计一个面板,该面板中有四个运动项目单选框和一个文本框。
当某个选择项目
被选中时,在文本框中显示该选择项目。
解析:只能选一个,按上一题,先把注释填上,然后修改如下。
public void itemStateChanged(ItemEvent e){
if(e.getItemSelectable()== panel1.box1)
panel1.text. setText ("高丽华);
panel1.text. setText ("饶林");
else if(e.getItemSelectable()== panel1.box3)
panel1.text. setText ("谌凯");
else if(e.getItemSelectable()== panel1.box4)
panel1.text. setText ("韩伟虎");
else if(e.getItemSelectable()== panel1.box5)
panel1.text. setText ("梁继杰");
}
}
3.略
4. 设计一个窗口,取默认布局BorderLayout布局。
北面添加一个列表,列表有4
门课程选项。
中心添加一个文本区,当选择列表中的某门课程后,文本区显示相应课程的介绍
解析:
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
class window extends JFrame implement s ListSelectionListener
{
JList list;
JTextArea textArea;
String names[]={"C++","JA V A","马哲","法基"};
String times[]={"好学的课","好学的课","无聊的课","无聊的课"};
window()
{
super("Praxis6_4");
textArea=new JTextArea(5,10);
list=new JList(names);
list.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
list.addListSelectionListener(this);
textArea.setBackground(Color.GREEN);
add(list,BorderLayout.NORTH);
add(textArea,BorderLayout.CENTE R);
setBounds(50,50,400,200);
setVisible(true);
validate();
}
public void valueChanged(ListSelectionEvent e) {
JList listValue=(JList)e.getSource();
int i=listValue.getSelectedIndex();
textArea.setText(""+names[i]);
textArea.append(""+times[i]+"开课");
}
}
public class Praxis6_4
{
public static void main(String
args[])
{
window win=new window();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
5.略了吧。
自己改改。
6. 设计一个JFrame窗口,窗口中心添加一个文本区。
另添加4个菜单,每个菜单
都有菜单项,每个菜单项都有对应快捷键,选择某个菜单项时,窗口中心的文本区显示相应信息。
解析:仿记事本。
import java.util.*;
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import javax.swing.event.*;
clas s MyWindow extends JFrame implements ActionListener{
JMenuBa r menubar;
JMenu menu1,menu2,menu3,menu4;
JMenuItem item1,item2,item3,item4,item5,item6,item7,item8,item9;
JTextArea text;
MyWindow(){
super("Praxis6_6");
setSize(500,500);
menubar = new JMenuBar();
menu1 = new JMenu("文件(F)");
menu2 = new JMenu("编辑(E)");
menu3 = new JMenu("查看(V)");
menu4 = new JMenu("帮助(H)");
item1 = new JMenuItem("新建(N)");
item2 = new JMenuItem("打开(O)");
item3 = new JMenuItem("保存(S)");
item4 = new JMenuItem("退出(X)");
item5 = new JMenuItem("全选(A)");
item6 = new JMenuItem("时间/日期(F5)");
item7 = new JMenuItem("状态(S)");
item8 = new JMenuItem("帮助主题(H)");
item9 = new JMenuItem("关于(A)");
text = new JTextArea();
menu1.setMnemonic(KeyEvent.VK_F);
menu2.setMnemonic(KeyEvent.VK_E);
menu3.setMnemonic(KeyEvent.VK_V);
menu4.setMnemonic(KeyEvent.VK_H);
menubar.add(menu1);menubar.add(menu2);menubar.add(menu3);menubar.add(menu4);
menu1.add(item1);menu1.add(item2);menu1.add(item3);menu1.add(item4);
menu2.add(item5);menu2.add(item6);
menu3.add(item7);
menu4.add(item8);menu4.add(item9);
item1.addActionListener(this);
item2.addActionListener(this);
item3.addActionListener(this);
item4.addActionListener(this);
item5.addActionListener(this);
item6.addActionListener(thi s);
item7.addActionListener(this);
item8.addActionListener(this);
item9.addActionListener(this);
setJMenuBar(menubar);
add(text,BorderLayout.CENTER);
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e){
text.setText(e.getActionCommand() + "被选中。
");
}
}
public class Praxis6_6{
public static void main(String[] args){
MyWindow win = new MyWindow();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
7. 设计一个窗口,窗口有两个依赖于它的对话框,一个对话框负责求园的面积;另
一个负责求三角形的面积。
窗口中一个菜单负责打开这两个对话框。
几个图形的数据通过对话框输入。
8.略9.略
10. 编写一个演示鼠标拖动和移动的程序。
界面设有一个文本区,当鼠标拖动或移
动时,在文本区中输出指明鼠标拖动或鼠标移动,及鼠标位置的字样。
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
class MyWindow extends JFrame implements MouseMotionListener{
JTextArea text;
MyWindow(){
super("Praxis6_10");
setSize(500,500);
text = new JTextArea();
text.addMouseMotionListener(this);
add(text,BorderLayout.CENTER);
setVisible(true);
validate();
}
public void mouseDragged(MouseEvent e){
text.setForeground(Color.RED);
text.setText("鼠标拖拽:坐标:("+e.getX()+","+e.getY()+")");
}
public void mouseMoved(MouseEvent e){
text.setForeground(Color.BLUE);
text.setText("鼠标移动:坐标:("+e.getX()+","+e.getY()+")");
}
}
public class Praxis6_10{
public static void main(String[] args){
MyWindow a = new MyWindow();
a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
第七章图形、图像与多媒体-不重要
1.绘制五角星。
第八章多线程
1.建立线程的两种方法?
答:继承Thread类或实现Runnable接口。
2.略
3.编写一个小应用程序,有两个线程,一个负责模仿圆转运动另一个模仿椭圆运动。
解析:
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
public class Praxis8_3 extends Applet implements Runnable{ Thread redBall,blueBall;
Graphics redPen,bluePen;
int blueSeta=0,redSeta=0;
int a = 150, b = 100;
public void init(){
redBall = new Thread(this);
blueBall = new Thread(this);
redPen = getGraphics();
bluePen = getGraphics();
redPen.setColor(Color.red);bluePen.setColor(Color.blue);
setBackground(Color.gray);
}
public void start(){
redBall.start();blueBall.start();
}
public void run(){
while(true){
if(Thread.currentThread() == redBall){
int x = (int)(80.0*Math.cos(Math.PI/180.0*redSeta));
int y = (int)(80.0*Math.sin(Math.PI/180.0*redSeta));
redPen.setColor(Color.gray);
redPe n.fillOval(100+x,100+y,10,10);
redSeta+=3;
if(redSeta>=360) redSeta=0;
x = (int)(80.0*Math.cos(Ma th.PI/180.0*redSeta));
y = (int)(80.0*Math.sin(Math.PI/180.0*redSeta));
redPen.setColor(Color.red);
redPen.drawOval(20+5,20+5,160,160);
redPen.fillOval(100+x,100+y,10,10);
try{
redBall.sleep(20);
}
catch (InterruptedException e){
}
}
else if(Thread.currentThread() == blueBall){
int x=(int)(a*Math.cos(Math.PI/180.0*blueSeta));
int y=(int)(b*Math.sin(Math.PI/180.0*blueSeta));
bluePen.setColor(Colo r.gray);
bluePen.fillOval(300+x,100+y,10,10);
blueSeta+=3;
if(blueSeta>=360) blueSeta=0;
x=(int)(a*Math.cos(Math.PI/180.0*blueSeta));
y=(int)(b*Math.sin(Math.PI/180.0*blueSeta));
bluePen.setColor(Color.BLUE);
bluePen.drawOval(300+5-a,100+5-b,a*2,b*2);
bluePen.fillOval(300+x,100+y,10,10);
try{blueBall.sleep(20);}
catch(InterruptedException e){}
}
}
}
}
4.略
5.略
6.模拟多人排队买球票,设球票五元一张,购票者有持五元的有持5,10,20,50,
100的已知排队者持钱情况序列,试给出排队购票情况。
第九章输入输出流
1.略
2.设计一个界面,有一个文本区和一个按钮,输出到指定文件中。
import java.util.*;
import java.awt.*;。