《Java编程语言原理与范例》课后实验源程序代码.docx
《《Java编程语言原理与范例》课后实验源程序代码.docx》由会员分享,可在线阅读,更多相关《《Java编程语言原理与范例》课后实验源程序代码.docx(61页珍藏版)》请在冰豆网上搜索。
《Java编程语言原理与范例》课后实验源程序代码
第一章
实验一
packagech01;
importjava.text.SimpleDateFormat;
importjava.util.Date;
classTimerextendsThread{
privateSimpleDateFormatsdf=newSimpleDateFormat("yyyy年MM月dd日HH:
mm:
ss");
publicvoidrun(){
while(true){
System.out.print("\r现在时间是:
");
Datenow=newDate();
System.out.print(sdf.format(now));
try{
sleep(1000);
}catch(InterruptedExceptione){
e.printStackTrace();
}
}
}
}
publicclassClock{
publicstaticvoidmain(String[]args){
Timertimer=newTimer();
timer.start();
}
}
实验二
packagech01;
importjava.awt.event.MouseAdapter;
importjava.awt.event.MouseEvent;
importjava.util.Random;
importjavax.swing.JButton;
importjavax.swing.JFrame;
publicclassMagicButtonextendsMouseAdapter{
JFramewin;
JButtonbutton=newJButton("你点不到我");
Randomrand=newRandom();
voidinitUI(){
win=newJFrame();
win.setLayout(null);
button.setSize(100,40);
button.addMouseListener(this);
win.add(button);
win.setSize(400,300);
win.setResizable(false);
win.setLocationRelativeTo(null);
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
win.setVisible(true);
}
publicstaticvoidmain(String[]args){
MagicButtondemo=newMagicButton();
demo.initUI();
}
publicvoidmouseEntered(MouseEvente){
intmouseX=button.getX()+e.getX();
intmouseY=button.getY()+e.getY();
while(true){
intbuttonX=rand.nextInt(win.getWidth()-button.getWidth());
intbuttonY=rand.nextInt(win.getHeight()-button.getHeight());
button.setLocation(buttonX,buttonY);
if(!
button.getBounds().contains(mouseX,mouseY)){
break;
}
}
}
}
第二章
实验一
/*********************************
2.交换两个变量的值(不允许使用中间变量)。
**********************************/
packagech03;
publicclassExp2_2{
publicstaticvoidmain(String[]args){
inta=2,b=3;
ints=a*b;
a=s/a;
b=s/a;
System.out.println("a="+a+",b="+b);
}
}
实验二
/*********************************
3.逆序输出一个7位整数,如8639427输出为7249368(不允许使用循环语句)。
**********************************/
packagech03;
publicclassExp2_3{
publicstaticvoidmain(String[]args){
longa=8639427;
System.out.print(a%10);
System.out.print(a/10%10);
System.out.print(a/100%10);
System.out.print(a/1000%10);
System.out.print(a/10000%10);
System.out.print(a/100000%10);
System.out.print(a/1000000%10);
}
}
实验三
/*********************************
4.对于int型变量a,以最快的速度计算34×a的值。
**********************************/
packagech03;
publicclassExp2_4{
publicstaticvoidmain(String[]args){
inta=3;
intb=(a<<5)+(a<<1);
System.out.println(a+"*34="+b);
}
}
实验四
/*********************************
5.字符型变量ch中存放着一个大小写未知的英文字母,判断其大小写后,将ch的值转为小写或大写字母(不允许使用加减运算符和if语句)。
**********************************/
packagech03;
publicclassExp2_5{
publicstaticvoidmain(String[]args){
charch='E';
ch=(char)((ch&32)==0?
ch|32:
ch&(Integer.MAX_VALUE-32));
System.out.println("ch1="+ch);
}
}
实验5
/*********************************
6.使用嵌套的条件运算符,求a、b、c中的最大者。
**********************************/
packagech03;
publicclassExp2_6{
publicstaticvoidmain(String[]args){
inta=2,b=4,c=3;
intmax=(a>b?
a:
b)>c?
(a>b?
a:
b):
c;
System.out.println("max="+max);
}
}
第三章
实验一
/*********************************
2.使用循环结构逆序输出任意位数的整数。
**********************************/
packagech04;
importjava.util.Scanner;
publicclassExp3_2{
publicstaticvoidmain(String[]args){
Scanners=newScanner(System.in);
System.out.println("输入整数:
");
longn=s.nextLong();
while(n>0){
System.out.print(n%10);
n/=10;
}
}
}
实验二
/*********************************
3.输出以下由数字组成的菱形(要求将输出行数存放于变量中以便随时更改)。
1
121
12321
1234321
12321
121
1
**********************************/
packagech04;
importjava.util.Scanner;
publicclassExp3_3{
publicstaticvoidmain(String[]args){
introws;
Scanners=newScanner(System.in);
System.out.print("输入行数:
");
rows=s.nextInt();
for(inti=-rows/2;i<=rows/2;i++){
System.out.printf("%-"+(3*Math.abs(i)+1)+"s","");
for(intj=Math.abs(i)-rows/2;j<=rows/2-Math.abs(i);j++){
System.out.printf("%-3d",rows/2+1-Math.abs(i)-Math.abs(j));
}
System.out.println();
}
}
}
实验三
/*********************************
4.输出以上由数字组成的三角形(要求将输出行数存放于变量中以便随时更改)。
136101521
2591420
481319
71218
1117
16
**********************************/
packagech04;
importjava.util.Scanner;
publicclassExp3_4{
publicstaticvoidmain(String[]args){
introws;
Scanners=newScanner(System.in);
System.out.print("输入行数:
");
rows=s.nextInt();
intfirstNumOfRow=1,nextNumOfRow;
for(inti=1;i<=rows;i++){
firstNumOfRow+=i-1;
intfirstStepOfRow=i+1;
nextNumOfRow=firstNumOfRow;
for(intj=1;j<=rows+1-i;j++){
System.out.printf("%-4d",nextNumOfRow);
nextNumOfRow+=firstStepOfRow++;
}
System.out.println();
}
}
}
实验四
/*********************************
5.计算多项式8+88+888+8888+88888+...的前8项之和。
输出结果:
98765424
**********************************/
packagech04;
publicclassExp3_5{
publicstaticvoidmain(String[]args){
longsum=0;
for(inti=1;i<=8;i++){
longnum=0;
for(intj=1;j<=i;j++){
num=num*10+8;
}
sum+=num;
}
System.out.println(sum);
}
}
第四章
实验一
/*********************************
1.产生10个100以内的随机整数以填充一维数组,实现以下功能。
①找出最大以及最小值。
②查找给定整数a在数组中最后一次出现的位置,若不存在则提示。
③判断数组是否呈非递减排列。
④将数组元素翻转存放。
**********************************/
packagech05;
importjava.util.Random;
importjava.util.Scanner;
publicclassExp4_1{
int[]init(){
int[]a=newint[10];
Randomr=newRandom();
for(inti=0;ia[i]=r.nextInt(100);
}
returna;
}
voidprint(int[]a){
for(inti=0;iSystem.out.printf("%-5d",a[i]);
}
System.out.println();
}
intfindMax(int[]a){
intmax=a[0];
for(inti=1;iif(maxmax=a[i];
}
}
returnmax;
}
intfindMin(int[]a){
intmin=a[0];
for(inti=1;iif(min>a[i]){
min=a[i];
}
}
returnmin;
}
intfindLastLocation(int[]a,intx){
for(inti=a.length-1;i>=0;i--){
if(a[i]==x){
returni;
}
}
return-1;
}
booleanisAsc(int[]a){
for(inti=0;iif(a[i]>a[i+1]){
returnfalse;
}
}
returntrue;
}
voidreverse(int[]a){
for(inti=0;iinttemp=a[i];
a[i]=a[a.length-i-1];
a[a.length-i-1]=temp;
}
}
publicstaticvoidmain(String[]args){
Exp4_1t=newExp4_1();
int[]a=t.init();
t.print(a);
System.out.println("max="+t.findMax(a));
System.out.println("min="+t.findMin(a));
System.out.print("输入要查找的数:
");
Scanners=newScanner(System.in);
intx=s.nextInt();
inti=t.findLastLocation(a,x);
if(i==-1){
System.out.println(x+"在数组中不存在。
");
}else{
System.out.printf("Lastlocationof%d:
%d。
\n",x,i);
}
if(t.isAsc(a)){
System.out.println("数组是非递减排列!
");
}else{
System.out.println("数组不是非递减排列!
");
}
t.reverse(a);
System.out.println("翻转后的数组:
");
t.print(a);
}
}
实验二
/*********************************
2.将a插入到一个长度不小于10且元素呈递增排列的一维数组中,并保证插入之后的数组依然递增(若a在插入前的数组中存在,则输出提示并忽略)。
**********************************/
packagech05;
importjava.util.Scanner;
publicclassExp4_2{
inta[]={2,4,5,7,9,11,15,17,20,22,Integer.MAX_VALUE};
voidprint(booleanisAfterInsert){
intend=isAfterInsert?
a.length:
a.length-1;
for(inti=0;iSystem.out.printf("%-5d",a[i]);
}
System.out.println();
}
intfindInsertLocation(intx){
inti=0;
for(;iif(a[i]==x){
return-1;
}elseif(a[i]>x){
returni;
}
}
returni;
}
voidinsert(inti,intx){
for(intj=a.length-2;j>=i;j--){
a[j+1]=a[j];
}
a[i]=x;
}
publicstaticvoidmain(String[]args){
Exp4_2t=newExp4_2();
t.print(false);
System.out.print("输入要插入的数:
");
Scanners=newScanner(System.in);
intx=s.nextInt();
inti=t.findInsertLocation(x);
if(i==-1){
System.out.println(x+"在数组中已经存在,放弃插入!
");
}else{
t.insert(i,x);
t.print(true);
}
}
}
实验三
/*********************************
3.找出阶数不小于8的方阵的鞍点值及位置(鞍点值在该行上最大、该列上最小),若无鞍点则提示。
**********************************/
packagech05;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.Random;
importjava.util.Scanner;
/**
*鞍点对象类
*/
classAnDian{
privateintrow;//鞍点所在行下标
privateintcol;//鞍点所在列下标
privateintvalue;//鞍点值
//完全构造方法
publicAnDian(introw,intcol,intvalue){
this.row=row;
this.col=col;
this.value=value;
}
//gettersandsetters
publicintgetRow(){
returnrow;
}
publicvoidsetRow(introw){
this.row=row;
}
publicintgetCol(){
returncol;
}
publicvoidsetCol(intcol){
this.col=col;
}
publicintgetValue(){
returnvalue;
}
publicvoidsetValue(intvalue){
this.value=value;
}
}
/**
*测试类(整体上是若干个并列的2重循环,时间复杂度较3重循环低)
*/
publicclassExp4_3{
int[][]a;//矩阵
intmaxOfRows[];//存放每行的最大值
intminOfCols[];//存放每列的最小值
finalintLIMIT=3;//矩阵元素值的上限(为测试方便此处写死,也可在运行时由用户输入)
//初始化矩阵
voidinitArray(){
Scannerscanner=newScanner(System.in);
System.out.print("输入矩阵行数:
");
intm=sca