Java 2實用教程(第三版)實驗指導與習題解答and實驗模版程式碼及答案 (三)
實驗1 掃雷小遊戲
1.答案:
【程式碼1】: new LinkedList();
【程式碼2】: list.add(block[i][j]) ;
【程式碼3】: list.size();
【程式碼4】: (Block)list.get(randomIndex);
【程式碼5】: list.remove(randomIndex);
2.模板程式碼
Block.java
public class Block
{ String name;
int number;
boolean boo=false;
public void setName(String name)
{ this.name=name;
}
public void setNumber(int n)
{ number=n;
}
public int getNumber()
{ return number;
}
public String getName()
{ return name;
}
boolean isMine()
{ return boo;
}
public void setIsMine(boolean boo)
{ this.boo=boo;
}
}
LayMines.java
import java.util.LinkedList;
public class LayMines
{ public void layMinesForBlock(Block block[][],int mineCount)
{ int row=block.length;
int column=block[0].length;
LinkedList list=【程式碼1】 //建立空連結串列list
for(int i=0;i<row;i++)
{ for(int j=0;j<column;j++)
{ 【程式碼2】 // list新增節點,其中的資料為block[i][j]
}
}
while(mineCount>0)
{ int size=【程式碼3】 // list返回節點的個數
int randomIndex=(int)(Math.random()*size);
Block b=【程式碼4】 // list返回索引為randomIndex的節點中的資料
b.setName("雷");
b.setIsMine(true);
【程式碼5】 //list刪除索引值為randomIndex的節點
mineCount--;
}
for(int i=0;i<row;i++)
{ for(int j=0;j<column;j++)
{ if(block[i][j].isMine()){}
else
{ int mineNumber=0;
for(int k=Math.max(i-1,0);k<=Math.min(i+1,row-1);k++)
{ for(int t=Math.max(j-1,0);t<=Math.min(j+1,column-1);t++)
{ if(block[k][t].isMine())
mineNumber++;
}
}
block[i][j].setName(""+mineNumber);
block[i][j].setNumber(mineNumber);
}
}
}
}
}
BlockView.java
import java.awt.*;
public class BlockView extends Panel
{ Label blockName;
Button blockCover;
CardLayout card;
BlockView()
{ card=new CardLayout();
setLayout(card);
blockName=new Label();
blockCover=new Button();
add("cover",blockCover);
add("name",blockName);
}
public void setName(String name)
{ blockName.setText(name);
}
public String getName()
{ return blockName.getText();
}
public void seeBlockName()
{ card.show(this,"name");
validate();
}
public void seeBlockCover()
{ card.show(this,"cover");
validate();
}
public Button getBlockCover()
{ return blockCover;
}
}
MineFrame.java
import java.awt.*;
import java.awt.event.*;
public class MineFrame extends Frame implements ActionListener
{ Button reStart;
Block block[][];
BlockView blockView[][];
LayMines lay;
int row=10,colum=12,mineCount=22;
int colorSwitch=0;
Panel pCenter,pNorth;
public MineFrame()
{ reStart=new Button("重新開始");
pCenter=new Panel();
pNorth=new Panel();
pNorth.setBackground(Color.cyan);
block=new Block[row][colum];
for(int i=0;i<row;i++)
{ for(int j=0;j<colum;j++)
{ block[i][j]=new Block();
}
}
lay=new LayMines();
lay.layMinesForBlock(block,mineCount);
blockView=new BlockView[row][colum];
pCenter.setLayout(new GridLayout(row,colum));
for(int i=0;i<row;i++)
{ for(int j=0;j<colum;j++)
{ blockView[i][j]=new BlockView();
blockView[i][j].setName(block[i][j].getName());
pCenter.add(blockView[i][j]);
blockView[i][j].getBlockCover().addActionListener(this);
}
}
reStart.addActionListener(this);
pNorth.add(reStart);
add(pNorth,BorderLayout.NORTH);
add(pCenter,BorderLayout.CENTER);
setSize(200,232);
setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
});
validate();
}
public void actionPerformed(ActionEvent e)
{ Button source=(Button)e.getSource();
if(source!=reStart)
{ int m=-1,n=-1;
for(int i=0;i<row;i++)
{ for(int j=0;j<colum;j++)
{ if(source==blockView[i][j].getBlockCover())
{ m=i;
n=j;
break;
}
}
}
if(block[m][n].isMine())
{ for(int i=0;i<row;i++)
{ for(int j=0;j<colum;j++)
{ blockView[i][j].getBlockCover().removeActionListener(this);
if(block[i][j].isMine())
blockView[i][j].seeBlockName();
}
}
}
else
{ if(block[m][n].getNumber()>0)
blockView[m][n].seeBlockName();
else if(block[m][n].getNumber()==0)
for(int k=Math.max(m-1,0);k<=Math.min(m+1,row-1);k++)
{ for(int t=Math.max(n-1,0);t<=Math.min(n+1,colum-1);t++)
{ blockView[k][t].seeBlockName();
}
}
}
}
if(source==reStart)
{ for(int i=0;i<row;i++)
{ for(int j=0;j<colum;j++)
{ block[i][j].setIsMine(false);
}
}
lay.layMinesForBlock(block,mineCount);
for(int i=0;i<row;i++)
{ for(int j=0;j<colum;j++)
{ blockView[i][j].setName(block[i][j].getName());
blockView[i][j].seeBlockCover();
blockView[i][j].getBlockCover().addActionListener(this);
}
}
}
}
}
MineExample.java
public class LayMineMainClass
{ public static void main(String args[])
{ new MineFrame();
}
}
實驗2 排序與查詢
2.模板程式碼
Book.java
public class Book implements Comparable
{ double price;
String name;
public void setPrice(double c)
{ price=c;
}
public double getPrice()
{ return price;
}
public void setName(String n)
{ name=n;
}
public String getName()
{ return name;
}
public int compareTo(Object object)
{ Book bk=(Book)object;
int difference=(int)((this.getPrice()-bk.getPrice())*10000);
return difference;
}
}
SortSearchMainClass.java
import java.util.*;
public class SortSearchMainClass
{ public static void main(String args[])
{ LinkedList bookList=new LinkedList();
String bookName[]={"Java程式設計","XML基礎","JSP基礎","C++基礎",
"J2ME程式設計","作業系統","資料庫技術"};
double bookPrice[]={29,21,22,29,34,32,29};
Book book[]=new Book[bookName.length];
for(int k=0;k<book.length;k++)
{ book[k]=new Book();
book[k].setName(bookName[k]);
book[k].setPrice(bookPrice[k]);
bookList.add(book[k]);
}
Book newBook=new Book();
newBook.setPrice(29);
newBook.setName("Java與模式");
Collections.sort(bookList);
int m=-1;
System.out.println("新書:"+newBook.getName()+"("+newBook.getPrice()+
")與下列圖書:");
while((m=Collections.binarySearch(bookList,newBook))>=0)
{ Book bk=(Book)bookList.get(m);
System.out.println(" "+bk.getName()+"("+bk.getPrice()+")");
bookList.remove(m);
}
System.out.println("價錢相同");
}
}
實驗3 使用TreeSet排序
1.答案:
【程式碼1】: new TreeSet();
【程式碼2】: treeSet.add(stu);
【程式碼3】: tree.iterator();
【程式碼4】: te.hasNext()
【程式碼5】: (Student)te.next();
2.模板程式碼
Student.java
public class Student implements Comparable
{ String name;
int score;
Student(String name,int score)
{ this.name=name;
this.score=score;
}
public int compareTo(Object b)
{ Student st=(Student)b;
int m=this.score-st.score;
if(m!=0)
return m;
else
return 1;
}
public int getScore()
{ return score;
}
public String getName()
{ return name;
}
}
StudentFrame.java
import java.awt.*;
import java.awt.event.*;
import java.util.*;
public class StudentFrame extends Frame implements ActionListener
{ TextArea showArea;
TextField inputName,inputScore;
Button button;
TreeSet treeSet;
StudentFrame()
{ treeSet=【程式碼1】 //使用無引數構造方法建立treeSet
showArea=new TextArea();
showArea.setFont(new Font("",Font.BOLD,20));
inputName=new TextField(5);
inputScore=new TextField(5);
button=new Button("確定");
button.addActionListener(this);
Panel pNorth=new Panel();
pNorth.add(new Label("Name:"));
pNorth.add(inputName);
pNorth.add(new Label("Score:"));
pNorth.add(inputScore);
pNorth.add(button);
add(pNorth,BorderLayout.NORTH);
add(showArea,BorderLayout.CENTER);
setSize(300,320);
setVisible(true);
addWindowListener(new WindowAdapter()
{ public void windowClosing(WindowEvent e)
{ System.exit(0);
}
});
validate();
}
public void actionPerformed(ActionEvent e)
{ String name=inputName.getText();
int score=0;
try{ score=Integer.parseInt(inputScore.getText().trim());
if(name.length()>0)
{ Student stu=new Student(name,score);
【程式碼2】 // treeSet新增stu
show(treeSet);
}
}
catch(NumberFormatException exp)
{ inputScore.setText("請輸入數字字元");
}
}
public void show(TreeSet tree)
{ showArea.setText(null);
Iterator te=【程式碼3】 // treeSet 返回迭代器
while(【程式碼4】) //te判斷是否有下一個元素
{ Student stu=【程式碼5】 // te返回其中的下一個元素
showArea.append("Name:"+stu.getName()+" Score: "+stu.getScore()+"\n");
}
}
}
TreeSetMainClass.java
public class TreeSetMainClass
{ public static void main(String args[])
{ new StudentFrame();
}
}
上機實踐12 java Swing
實驗1 JLayeredPane分層窗格
1.答案:
【程式碼1】: pane.add(b5,JLayeredPane.DRAG_LAYER);
【程式碼2】: pane.add(b4,JLayeredPane.POPUP_LAYER);
【程式碼3】: pane.add(b3,JLayeredPane.MODAL_LAYER);
【程式碼4】: pane.add(b2,JLayeredPane.PALETTE_LAYER);
【程式碼5】: pane.add(b1,JLayeredPane.DEFAULT_LAYER);
2.模板程式碼
import javax.swing.*;
import java.awt.*;
class LayerExample
{ public static void main(String args[])
{ JFrame win=new JFrame("窗體");
win.setBounds(100,100,300,300);
win.setVisible(true);
JButton b1=new JButton("我在DEFAULT_LAYER"),
b2=new JButton("我在PALETTE_LAYER"),
b3 =new JButton("我在MODAL_LAYER"),
b4 =new JButton("我在POPUP_LAYER"),
b5=new JButton("我在DRAG_LAYER");
Container contenetPane=win.getContentPane();
JLayeredPane pane= new JLayeredPane();
pane.setLayout(null);
【程式碼1】 //pane將元件b5放置在DRAG_LAYER層
【程式碼2】 //pane將元件b4放置在POPUP_LAYER層
【程式碼3】 //pane將元件b3放置在MODAL_LAYER層
【程式碼4】 //pane將元件b2放置在PALETTE_LAYER層
【程式碼5】 //pane將元件b3放置在DEFAULT_LAYER層
b5.setBounds(50,50,200,100);
b4.setBounds(40,40,200,100);
b3.setBounds(30,30,200,100);
b2.setBounds(20,20,200,100);
b1.setBounds(10,10,200,100);
b1.setBackground(Color.red);
b2.setBackground(Color.pink);
b3.setBackground(Color.green);
b4.setBackground(Color.orange);
b5.setBackground(Color.yellow);
contenetPane.add(pane,BorderLayout.CENTER);
contenetPane.validate();
win.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
}
實驗2 使用表格顯示日曆
1.答案:
【程式碼1】: table=new JTable(rili,name);
【程式碼2】: table=new JTable(rili,name);
【程式碼3】: table=new JTable(rili,name);
2.模板程式碼
CalendarBean.java
import java.util.Calendar;
public class CalendarBean
{ int year=2005,month=0,nextDay;
public void setYear(int year)
{ this.year=year;
}
public int getYear()
{ return year;
}
public void setMonth(int month)
{ this.month=month;
}
public int getMonth()
{ return month;
}
public String[][] getCalendar()
{ String a[][]=new String[6][7];
Calendar 日曆=Calendar.getInstance();
日曆.set(year,month-1,1);
int 星期幾=日曆.get(Calendar.DAY_OF_WEEK)-1;
int day=0;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12)
{ day=31;
}
if(month==4||month==6||month==9||month==11)
{ day=30;
}
if(month==2)
{ if(((year%4==0)&&(year%100!=0))||(year%400==0))
{ day=29;
}
else
{ day=28;
}
}
nextDay=1;
for(int k=0;k<6;k++)
{ if(k==0)
for(int j=星期幾;j<7;j++)
{ a[k][j]=" "+nextDay ;
nextDay++;
}
else
for(int j=0;j<7&&nextDay<=day;j++)
{ a[k][j]=""+nextDay ;
nextDay++;
}
}
return a;
}
}
CalenderFrame.java
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class CalenderFrame extends JFrame implements ActionListener
{ JTable table;
Object name[]={"星期日","星期一","星期二","星期三", "星期四","星期五","星期六"};
JButton nextMonth,previousMonth;
int year=2006,month=5;
CalendarBean calendar;
String rili[][];
JLabel showMessage=new JLabel("",JLabel.CENTER);
JScrollPane scroll;
public CalenderFrame()
{ calendar=new CalendarBean();
calendar.setYear(year);
calendar.setMonth(month);
rili=calendar.getCalendar();
【程式碼1】 //使用陣列rili和name建立table
table.setRowSelectionAllowed(false);
nextMonth=new JButton("下月");
previousMonth=new JButton("上月");
nextMonth.addActionListener(this);
previousMonth.addActionListener(this);
JPanel pNorth=new JPanel(),
pSouth=new JPanel();
pNorth.add(previousMonth);
pNorth.add(nextMonth);
pSouth.add(showMessage);
showMessage.setText("日曆:"+calendar.getYear()+"年"+calendar.getMonth()+
"月" );
scroll=new JScrollPane(table);
add(scroll,BorderLayout.CENTER);
add(pNorth,BorderLayout.NORTH);
add(pSouth,BorderLayout.SOUTH);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100,100,400,240);
setVisible(true);
validate();
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==nextMonth)
{ month=month+1;
if(month>12)
month=1;
calendar.setMonth(month);
rili=calendar.getCalendar();
remove(scroll);
【程式碼2】 //使用陣列rili和name建立table
table.setRowSelectionAllowed(false);
scroll=new JScrollPane(table);
add(scroll,BorderLayout.CENTER);
}
else if(e.getSource()==previousMonth)
{ month=month-1;
if(month<1)
month=12;
calendar.setMonth(month);
rili=calendar.getCalendar();
remove(scroll);
【程式碼3】 //使用陣列rili和name建立table
table.setRowSelectionAllowed(false);
scroll=new JScrollPane(table);
add(scroll,BorderLayout.CENTER);
}
showMessage.setText("日曆:"+calendar.getYear()+"年"+calendar.getMonth()+"月" );
}
}
CalendarMainClass.java
public class CalendarMainClass
{ public static void main(String args[])
{ new CalenderFrame();
}
}
實驗3 多文件介面(MDI)
1.答案:
【程式碼1】: new JDesktopPane();
【程式碼2】: desk.getAllFrames();
【程式碼3】: desk.setLayer(a[i],JDesktopPane.DEFAULT_LAYER);
【程式碼4】: desk.add(newInternalFrame,JDesktopPane.DRAG_LAYER);
2.模板程式碼
MDIExample.java
import javax.swing.*;
import javax.swing.event.*;
import java.awt.*;
import java.awt.event.*;
class MyInternalFrame extends JInternalFrame
{ JTextArea text;
MyInternalFrame(String title)
{ super(title,true,true,true,true);
text=new JTextArea();
Container con=getContentPane();
con.add(new JScrollPane(text),BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
addInternalFrameListener(new InternalFrameAdapter ()
{ public void internalFrameActivated(InternalFrameEvent e)
{ setLayer(JDesktopPane.DRAG_LAYER);
}
public void internalFrameDeactivated(InternalFrameEvent e)
{ setLayer(JDesktopPane.DEFAULT_LAYER);
}
});
}
public JTextArea getJTextArea()
{ return text;
}
}
class Mywindow extends JFrame implements ActionListener
{ JDesktopPane desk;
JMenuBar menubar;
JMenu menu;
JMenuItem itemNew,itemCopy,itemCut,itemPaste;
Container con;
Mywindow()
{ setSize(360,360);
setVisible(true);
con=getContentPane();
desk=【程式碼1】 //建立JdesktopPane物件。
desk.setDesktopManager(new DefaultDesktopManager());
con.add(desk,BorderLayout.CENTER);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
menubar=new JMenuBar();
menu=new JMenu("編輯");
itemNew=new JMenuItem("新建");
itemCopy=new JMenuItem("拷貝");
itemCut=new JMenuItem("剪下");
itemPaste=new JMenuItem("貼上");
itemNew.addActionListener(this);
itemCopy.addActionListener(this);
itemCut.addActionListener(this);
itemPaste.addActionListener(this);
menu.add(itemNew);
menu.add(itemCopy);
menu.add(itemCut);
menu.add(itemPaste);
menubar.add(menu);
setJMenuBar(menubar);
validate();
}
public void actionPerformed(ActionEvent e)
{ if(e.getSource()==itemNew)
{ JInternalFrame a[]=【程式碼2】//desk返回其中的全部內部窗體
for(int i=0;i<a.length;i++)
{ 【程式碼3】 //desk 將a[i]放置在DEFAULT_LAYER層
}
JInternalFrame newInternalFrame=new MyInternalFrame("無標題");
newInternalFrame.setBounds(10,10,300,300);
newInternalFrame.setVisible(true);
【程式碼4】 //desk 將newInternalFrame放置在DRAG_LAYER層
desk.validate();
con.validate();
this.validate();
}
if(e.getSource()==itemCopy)
{ MyInternalFrame internalFrame=(MyInternalFrame)desk.getSelectedFrame();
JTextArea text=internalFrame.getJTextArea();
text.copy();
}
else if(e.getSource()==itemCut)
{ MyInternalFrame internalFrame=(MyInternalFrame)desk.getSelectedFrame();
JTextArea text=internalFrame.getJTextArea();
text.cut();
}
else if(e.getSource()==itemPaste)
{ MyInternalFrame internalFrame=(MyInternalFrame)desk.getSelectedFrame();
JTextArea text=internalFrame.getJTextArea();
text.paste();
}
}
}
public class MDIExample
{ public static void main(String args[])
{ Mywindow win=new Mywindow();
}
}
相關文章
- 【JAVA程式設計】實驗三 函式與物件Java程式設計函式物件
- Java實驗2 方法與陣列Java陣列
- Java實驗二:類程式設計實驗Java程式設計
- 【Java程式設計】Java上機實驗(三)Java程式設計
- 資料庫系統基礎教程第三版 部分實驗命令資料庫
- 實驗吧 —— web完整滲透測試實驗指導書(圖片版)Web
- 實驗2 類與物件物件
- java實現驗證碼Java
- 實驗 2
- MYSQL學習與實驗(八)——儲存過程實驗MySql儲存過程
- 實驗三驗收3
- OPP實驗三
- OOP實驗三OOP
- 南郵離散實驗三(JAVA)Java
- 實驗5 C語言指標應用程式設計C語言指標程式設計
- C語言程式設計實驗指導書 王明衍pdfC語言程式設計
- 實驗文件2
- 實驗三的分析與總結
- 資料結構實驗三 2024_樹與圖實驗資料結構
- 實驗三 類和物件 基礎程式設計2物件程式設計
- 實驗三 類和物件_基礎程式設計2物件程式設計
- 實習經驗
- 實驗三 程式模擬排程程式
- 實驗三 程式排程模擬程式
- 易優cms二次模版驗證問題答案忘記了, 二次模版驗證問題修改不了該改哪塊程式碼
- 實驗 2 Scala 程式設計初級實踐程式設計
- Java 繼承與多型實驗Java繼承多型
- 實驗三--測試
- 實驗1:UML與物件導向程式設計原則物件程式設計
- java圖形驗證碼實現Java
- java--實驗二語法基礎練習(2)AXJava
- 計算機網路實驗ns2實驗計算機網路
- OS課 Level 2 實驗(2):軟體的部署與應用
- 實驗2:需求分析
- 實驗作業2
- c語言程式實驗————實驗報告十二C語言
- c語言程式實驗——實驗報告五C語言
- c語言程式實驗————實驗報告十C語言