基于《java2實用教程》的java知識點(diǎn)復(fù)習(xí)整理【 歸納總結(jié)篇】
第1章?Java入門
1. 開發(fā)與運(yùn)行Java程序需要經(jīng)過哪些主要步驟和過程?
答:(1)編寫Java源文件:使用文本編輯器(Edit或記事本),拓展名為.java
(2)編譯Java源文件:使用Java編譯器(javac.exe)。得到字節(jié)碼文件*.class
(3)運(yùn)行Java程序:Java應(yīng)用程序使用Java解釋器(java.exe)執(zhí)行字節(jié)碼文件;
Java小應(yīng)用程序使用支持Java標(biāo)準(zhǔn)的瀏覽器來執(zhí)行。
2. 怎樣區(qū)分應(yīng)用程序和小應(yīng)用程序?應(yīng)用程序的主類或小應(yīng)用程序的主類必須用public修飾嗎?
答:?①應(yīng)用程序必須有main方法,這個方法是程序執(zhí)行的入口。
小應(yīng)用程序沒有main方法。
②應(yīng)用程序的主類不一定用public修飾;小應(yīng)用程序的主類必須用public修飾。
3. Java程序是由什么組成的?一個程序中必須要有public類嗎?Java源文件的命名規(guī)則是怎樣的?
答:?①Java程序由類組成。
②應(yīng)用程序可以沒有public類;小應(yīng)用程序一定有一個類是public類(主類)。
③應(yīng)用程序:如果只有一個類,源文件名與該類的類名相同,拓展名為.java;
有多個類時,如果有public類(最多一個),源文件名與public類的類
名相同,拓展名是.java;沒有public類,源文件名與任何一個類的類名
相同即可,拓展名為.java。
小應(yīng)用程序:源文件名與主類的類名相同,拓展名是.java。
4. 在運(yùn)行小程序的HTML文件中可以使用codebase屬性指定小程序的字節(jié)碼所駐留的目錄。如果不使用codebase屬性,小程序的字節(jié)碼文件必須和運(yùn)行它的HTML文件在同一目錄中。編寫一個小程序并將小程序的字節(jié)碼存放在某個目錄中,比如C:\5000;把運(yùn)行該小程序的HTML文件(注意其中的codebase屬性):
<applet code=你的小程序的字節(jié)碼?width=200 height=300 codebase=C:\5000>
</applet>
存放在另一個目錄中。
答:?以書中小應(yīng)用程序為例進(jìn)行說明:
①編寫Java小應(yīng)用程序源代碼
import java.applet.*;
import java.awt.*;
public class Boy extends Applet
{
public void paint(Graphics g)
{
g.setColor(Color.red);
g.drawString("我一邊喝著咖啡,一邊學(xué)Java呢",5,30);
g.setColor(Color.blue);
g.drawString("我學(xué)得很認(rèn)真",10,50);
}
}
②將上述代碼命名為Boy.java并進(jìn)行編譯得到Boy.class字節(jié)碼文件;將得到的字節(jié)碼文件存放在
?
C:\5000文件夾下;
③編寫小應(yīng)用程序的HTML源文件:
<applet code=Boy.class wdith=200 height=300 codebase=C:\5000> </applet>
④將上述編寫好的代碼命名為Boy.html;并將此文件存放在C:\5000文件夾以外的任意一個文件夾中(如C:\1000);
⑤運(yùn)行Boy.html。
第2章?標(biāo)識符、關(guān)鍵字和數(shù)據(jù)類型
1. 什么叫標(biāo)識符?標(biāo)識符的規(guī)則是什么?
答:①用來標(biāo)識類名、變量名、、方法名、類型名、數(shù)組名、文件名的有效字符序列。
②由字母、下劃線、美元符號和數(shù)字組成,并且第一個字符不能是數(shù)字字符,而且關(guān)鍵字不能作為標(biāo)識符。
2. 什么叫關(guān)鍵字?請說出5個關(guān)鍵字。
答:①Java語言中已經(jīng)被賦予特定意義的一些單詞。
②class break public return static extends等。
3. Java的基本數(shù)據(jù)類型都是什么?
答:boolean(邏輯型) char(字符型) float、double(浮點(diǎn)型) byte、short、int、long(整型)。
4. 下列哪些語句是錯誤的:
int x = 8;
byte b = 127;
b = x;
答:b=x語句錯誤;原因是高級別的變量賦值給低級別的變量時,一定要用顯式轉(zhuǎn)換即b=(byte)x; 。
5. 下列程序的輸出結(jié)果是什么?
public class E
{
public static void main(String args[])
{
long[] a={1,2,3,4};
long[] b={100,200,300,400,500};
b=a;
System.out.println("數(shù)組b的長度:"+b.length);
System.out.println("b[0]="+b[0]);
}
}
答: 數(shù)組b的長度:4
b[0]=1
7. System.out.println(“你好”);可輸出字符串,也可以使用System.out.println( )輸出變量或表達(dá)式的值,只需使用并置符號“+”將變量、表達(dá)式或一個常數(shù)值與一個字符串并置即可,如: System.out.println(“?”+x);System.out.println(“:”+123+“大于”+122);等。上機(jī)調(diào)試下列程序,注意觀察結(jié)果,特別注意System.out.print( )和System.out.println( )的區(qū)別。
public class OutputData
{
public static void main(String args[])
{
int x=234,y=432;
System.out.println(x+"<"+(2*x));
System.out.print("我輸出結(jié)果后不回車");
System.out.println("我輸出結(jié)果后自動回車到下一行");
System.out.println("x+y= "+(x+y));
System.out.println(" "+x+y+"=234432");
}
}
答: 234<468
我輸出結(jié)果后不回車我輸出結(jié)果后自動回車到下一行
x+y= 666
234432=234432
8.一個簡單的JAVA程序
答:
public class E
{
???public static void main(String args[])
???{System .out .println("這是我的第一個程序");}
}
編寫一個Java應(yīng)用程序,輸出全部的希臘字母。
public class Hello {
public static void main(String[] args) {
char a='α',b='ω';
System.out.print("全部的希臘字母為:");
for(;a<=b;a++) {
System.out.print(a+" ");
}
}
}
?
第3章?運(yùn)算符、表達(dá)式和語句
1. 下列程序的輸出結(jié)果是什么?
public class E
{
public static void main(String args[])
{
char x='你',y='e',z='吃';
if(x>'A')
{
y='愛';
z='情';
}
else
y='我';
z='她';
System.out.println(" "+x+y+z);
}
}
答: 你愛她
2. 下列程序的輸出結(jié)果是什么?
public class E3
{
public static void main(String args[])
{
char c='\0';
for(int i=1;i<=4;i++)
{
switch(i)
{
case 1:c='b';
System.out.print(c);
case 2:c='e';
System.out.print(c);
break;
case 3:c='p';
System.out.print(c);
default:
System.out.print("!");
}
}
}
}
答:beep?。?/span>
3. 編寫應(yīng)用程序,求1!+2!+…+10!。
答:
class Fact
{
public static void main(String args[])
{
int fact,sum=0;
for(int i=1;i<=10;i++)
{
fact=1;
for(int j=1;j<=i;j++)
fact*=j;
sum+=fact;
}
System.out.println("1到10的階乘之和是:"+sum);
}
}
4. 編寫一個應(yīng)用程序,求100以內(nèi)的全部素數(shù)。
答:
class Primes
{
public static void main(String args[])
{
int w=1;
for(int i=2;i<=100;i++)
{
for(int j=2;j<i;j++)
{
w=i%j;
if(w==0)
break;
}
if(w!=0)
System.out.println(i+"是素數(shù)");
}
}
}
5. 分別用do―while和for循環(huán)計算1+1/2!+1/3!+1/4!+…的前20項和。
答: ①for循環(huán)
class Sum
{
public static void main(String args[])
{
int fact;
double sum=0;
for(int i=1;i<=20;i++)
{
fact=1;
for(int j=1;j<=i;j++)
fact*=j;
sum+=1.0/fact;
}
System.out.println(sum);
}
}
②do―while循環(huán)
class Sum
{
public static void main(String args[])
{
int i=1;
int fact;
double sum=0;
do
{
fact=1;
int j=0;
while(++j<=i)
fact*=j;
sum+=1.0/fact;
}
while(++i<=20);
System.out.println(sum);
}
}
6. 一個數(shù)如果恰好等于它的因子之和,這個數(shù)就稱為“完數(shù)”。編寫應(yīng)用程序,求1000之內(nèi)的所有完數(shù)。
答:
class Wanshu
{
public static void main(String args[])
{
int x,i,sum;
for(x=1;x<=1000;x++)
{
sum=0;
for(i=1;i<x;i++)
{
if(x%i==0)
sum+=i;
}
if(x==sum)
System.out.println(x+"是完數(shù)");
}
}
}
7. 編寫應(yīng)用程序,分別使用while和for循環(huán)計算8+88+888+…前10項之和。
答: ①for循環(huán)
class TheSum
{
public static void main(String args[])
{
long sum=0,data=8;
for(int i=1;i<=10;i++)
{
sum=sum+data;
data=data*10+8;
}
System.out.println(sum);
}
}
②while循環(huán)
class TheSum
{
public static void main(String args[])
{
long sum=0,data=8,i=0;
while(++i<=10)
{
sum=sum+data;
data=data*10+8;
}
System.out.println(sum);
}
}
8. 編寫應(yīng)用程序,輸出滿足1+2+3+…+n<8888的最大正整數(shù)n。
答:
class Maxn
{
public static void main(String args[])
{
int k=1,sum=0;
while((sum+=k)<8888)
k++;
k--;
System.out.println("最大能取到:"+k);
}
}
第4章?類、對象和接口
1. 類中的實例變量在什么時候會被分配內(nèi)存空間?
答: 當(dāng)該類創(chuàng)建對象之后,實例變量才會被分配相應(yīng)的內(nèi)存空間。
2. 什么叫方法的重載?構(gòu)造方法可以重載嗎?
答:①一個類中可以有多個方法具有相同的名字,但這些方法的參數(shù)必須不同,即或者是參數(shù)的個數(shù)不同,或者是參數(shù)的類型不同(方法的重載體現(xiàn)了多態(tài)性,即功能多態(tài)性)。
②構(gòu)造方法可以重載。
3. 類中的實例方法可以操作類變量(static變量)嗎?類方法(static方法)可以操作實例變量嗎?
答:①類中的實例方法可以操作類變量。
②類方法不可以操作實例變量
4. 類中的實例方法可以用類名直接調(diào)用嗎?
答: 類中的實例方法不可以用類名直接調(diào)用。
5. 舉例說明protected方法和友好方法的區(qū)別。
答: 當(dāng)子類與父類不在同一個包中時,子類可以繼承父類的protected方法;而友好方法此時則不能被子類繼承。
6. 舉例說明類變量和實例變量的區(qū)別。
答:⑴書寫: 定義成員變量時,類變量有static修飾;實例變量沒有static修飾。
例: class A
{
int x; //實例變量
static int y; //類變量
}
⑵內(nèi)存: 不創(chuàng)建對象,類的實例變量不會被分配內(nèi)存空間;類變量被分配相應(yīng)的內(nèi)存空間。
不同對象的實例變量被分配不同的內(nèi)存空間;不同對象的類變量被分配相同的內(nèi)存空間。
任何一個對象改變類變量,其他對象的相應(yīng)類變量也發(fā)生相應(yīng)變化。
一個對象的實例變量發(fā)生改變,不影響其他對象的相應(yīng)實例變量。
例: 執(zhí)行語句:?A1.x=10; A1.y=20;
這時A2.x的值也是10;而A2.y的值保持原來的初值。
⑶使用: 類變量可以被類方法操作;而實例變量不能被類方法操作。
例:?class A
{
int x;
static int y;
static void func()
{
b=10; //合法
a=20; //非法
}
}
類變量可以通過類名訪問;實例變量不能通過類名訪問。
例: class A
{
int x;
static int y;
}
class B
{
public void func();
{
A.x=10; //非法
A.y=20; //合法
}
}
7. 子類將繼承父類的哪些成員變量和方法?子類在什么情況下隱藏父類的成員變量和方法?在子類中是否允許有一個方法和父類的方法名字相同,而類型不同?
答:①子類和父類在同一個包中時,子類可以繼承父類的除private屬性的所有方法和成員變量,當(dāng)子類與
父類不在同一個包中時,子類只能繼承父類的protected和public屬性的成員變量和方法。
②子類中定義的成員變量和父類中的成員變量同名時,子類就隱藏了繼承的成員變量;子類中定義一個方法,并且這個方法的名字、返回類型、參數(shù)個數(shù)和類型與從父類繼承的方法完全相同,子類就隱藏從父類繼承來的方法(方法的重寫)。
③在子類中允許有一個方法和父類的方法名字相同而類型不同。
8. 父類的final方法可以被子類重寫嗎?
答: 父類的final方法不能被子類重寫。
9. 什么類中可以有abstract方法?
答: abstract類中可以有abstract方法。
10.什么叫對象的上轉(zhuǎn)型對象?
答: B類是A類的子類或間接子類,當(dāng)用子類B創(chuàng)建一個對象b并把這個對象的引用放到A類的對象a中時,稱A類對象a是子類對象b的上轉(zhuǎn)型對象。
11.什么叫接口的回調(diào)?
答: 可以把實現(xiàn)某一接口的類創(chuàng)建的對象的引用賦給該接口聲明的接口變量中。
12.下列程序有什么錯誤?
public class Takecare
{
int a=90;
static float b=10.98f;
public static void main(String args[])
{
float c=a+b;
System.out.println("c="+c);
}
}
答: 語句float c=a+b;錯誤。原因是類方法main操作了實例變量a。
13. 請寫出下列程序的輸出結(jié)果。
class A
{
public int f(int x)
{
return x+1;
}
}
class B extends A
{
public int f(int x)
{
return x*x;
}
}
public class E
{
public static void main(String args[])
{
A a=new B();
int m=a.f(10);
System.out.println(m);
}
}
答: 100
14. 請寫出下列程序的輸出結(jié)果。
class A
{
int x;
public void setX(int x)
{
this.x=x;
}
int getX()
?
{
return x;
}
}
class B
{
public void f(A a)
{
a.setX(100);
}
}
public class E
{
public static void main(String args[])
{
A a=new A();
a.setX(8);
System.out.println(a.getX());
B b=new B();
b.f(a);
System.out.println(a.getX());
}
}
答: 8
100
15.使用接口有哪些注意事項?模仿例子4.27,編寫一個類實現(xiàn)兩個接口的程序。
答:①一個類使用接口時,要有implements關(guān)鍵字,當(dāng)一個類使用多個接口時,接口名要用逗號“,”隔開;使用接口的類除abstract類外,必須實現(xiàn)接口的所有方法,并且實現(xiàn)接口的方法時,方法名字、返回類型、參數(shù)個數(shù)及類型必須與接口中的完全一致;類在實現(xiàn)接口時,方法體一定要用public修飾,如果接口方法的返回類型不是void型,在類中實現(xiàn)接口時,方法體至少有一個return語句。
②?interface 表面積
{
double allArea(double r);
}
interface 體積
{
double volu(double r);
}
class Sph implements 表面積,體積
{
double PI=3.14159;
public double allArea(double r)
{
return 4*PI*r*r;
}
public double volu(double r)
{
return 4.0/3*PI*r*r*r;
}
}
public class Test
{
public static void main(String args[])
{
double r=5.0;
Sph a=new Sph();
System.out.println("半徑為5的球的表面積是:"+a.allArea(r));
System.out.println("半徑為5的球的體積是:"+a.volu(r));
}
}
16.編寫一個類A,該類創(chuàng)建的對象可以調(diào)用方法f輸出英文字母表,然后再編寫一個該類的子類B,要求子類B必須繼承A類的方法f(不允許重寫),子類創(chuàng)建的對象不僅可以調(diào)用方法f輸出英文字母表,而且調(diào)用子類新增的方法g輸出希臘字母表。
答: class A
{
int m;
void f()
{
for(m=65;m<91;m++)
System.out.print((char)m+" ");
for(m=97;m<123;m++)
System.out.print((char)m+" ");
System.out.println(" ");
}
}
class B extends A
{
int i;
void g()
{
for(i=913;i<930;i++)
System.out.print((char)i+" ");
for(i=931;i<938;i++)
System.out.print((char)i+" ");
for(i=945;i<962;i++)
System.out.print((char)i+" ");
for(i=963;i<970;i++)
System.out.print((char)i+" ");
?
System.out.println(" ");
}
}
public class Test
{
public static void main(String args[])
{
B b=new B();
System.out.println("我調(diào)用方法f輸出英文字母表:");
b.f();
System.out.println("我調(diào)用方法g輸出希臘字母表:");
b.g();
}
}
17.編寫一個異常類MyException,再編寫一個類Student,該類有一個產(chǎn)生異常的方法public void speak(int m) throws MyException,要求參數(shù)m的值大于1000時,方法拋出一個MyException對象。最后編寫主類,在主類的main方法中用Student創(chuàng)建一個對象,讓該對象調(diào)用speak方法。
答: class MyException extends Exception
{
String str1;
MyException(int m)
{
str1=m+"出現(xiàn)錯誤?可能造成的原因是取值大于1000";
}
public void showStr1()
{
System.out.println(str1);
}
}
class Student
{
public void speak(int m) throws MyException
{
if(m>1000)
{
MyException exception=new MyException(m);
throw exception;
}
else
System.out.println(m);
}
}
public class Test
{
?
public static void main(String agrs[])
{
int m;
Student stu1=new Student();
m=987;
try
{
stu1.speak(m);
m=1234;
stu1.speak(m);
}
catch(MyException e)
{
e.showStr1();
}
}
}
18.編寫一個類,該類有一個方法public int f(int a,int b),該方法返回a和b的最大公約數(shù)。然后再編寫一個該類的子類,要求子類重寫方法f,而且重寫的方法將返回a和b的最小公倍數(shù)。要求在重寫的方法的方法體中首先調(diào)用被隱藏的方法返回a和b的最大公約數(shù)m,然后將乘積(a*b)/m返回。要求在應(yīng)用程序的主類中分別使用父類和子類創(chuàng)建對象,并分別調(diào)用方法f計算兩個正整數(shù)的最大公約數(shù)和最小公倍數(shù)。
答: class A
{
public int f(int a,int b)
{
if(a<b)
{
int temp=0;
temp=a;
a=b;
b=temp;
}
int r=a%b;
while(r!=0)
{
a=b;
b=r;
r=a%b;
}
return b;
}
}
class B extends A
{
public int f(int a,int b)
{
int m;
m=super.f(a,b);
return (a*b)/m;
}
}
public class Test
{
public static void main(String args[])
{
A a=new A();
System.out.println("18和102的最大公約數(shù)是:"+a.f(18,102));
B b=new B();
System.out.println("18和102的最小公倍數(shù)是:"+b.f(18,102));
}
}
第5章?字符串
1. 使用String類的public String toUpperCase()方法可以將一個字符串中的小寫字母變成大寫字母,使用public String toLowerCase()方法可以將一個字符串中的大寫字母變成小寫字母。編寫一個程序,使用這兩個方法實現(xiàn)大小寫的轉(zhuǎn)換。
答: class Test
{
public static void main(String args[])
{
String str="I can use Java";
System.out.println("要轉(zhuǎn)換的字符串是:"+str);
String s=str.toUpperCase();
System.out.println("轉(zhuǎn)換成大寫字符串是:"+s);
s=str.toLowerCase();
System.out.println("轉(zhuǎn)換成小寫字符串是:"+s);
}
}
2. 使用String類的public String concat(String str)方法可以把調(diào)用該方法的字符串與參數(shù)指定的字符串連接,把str指定的串連接到當(dāng)前串的尾部獲得一個新的串。編寫一個程序通過連接兩個串得到一個新串,并輸出這個新串。
答: class Test
{
public static void main(String args[])
{
String str1="I can u";
String str2="se Java";
String s=str1.concat(str2);
System.out.println("將字符串"+str1+"與字符串"+str2+"連接后得到的新字符串是:");
System.out.println(s);
}
}
3. String類的public char charAt(int index)方法可以得到當(dāng)前字符串index位置上的一個字符。說出下列程序的輸出結(jié)果。
public class E3
{
public static void main(String args[])
{
String s="中國科學(xué)技術(shù)大學(xué)";
char a=s.charAt(2),b=s.charAt(6);
System.out.print(a);
System.out.println(b);
}
}
答: 科大
4. 使用java.util包中的Arrays類的靜態(tài)方法public static void sort(double a[])可以把參數(shù)a指定的double型數(shù)組按升序排序,使用java.util包中的Arrays類的靜態(tài)方法public static void sort(double a[],int start,int end)可以把參數(shù)a指定的double型數(shù)組中從位置start到end-1位置的數(shù)按升序排序。寫出下列程序的輸出結(jié)果。
import java.util.*;
public class E4
{
public static void main(String args[])
{
int a[]={23,67,89,90,-987};
double b[]={12.89,90.87,34,678.987,-98.78,0.89};
Arrays.sort(a);
Arrays.sort(b,1,4);
for(int i=0;i<=4;i++)
{
System.out.print(a[i]+",");
}
for(int i=0;i<b.length;i++)
{
System.out.print(b[i]+",");
}
}
}
答: -987,23,67,89,90,12.89,34.0,90.87,678.987,-98.78,0.89,
5. 使用java.lang包中System類的靜態(tài)方法arraycopy可以實現(xiàn)數(shù)組的快速復(fù)制,上機(jī)實習(xí)下列程序,并總結(jié)出arraycopy方法參數(shù)的使用規(guī)則。?
public class ArrayCopy
{
public static void main(String args[])
{
char a1[]={'a','b','c','d','e','f'},b1[]={'1','2','3','4','5','6'};
System.arraycopy(a1,0,b1,1,a1.length-1);
System.out.println(new String(a1));
System.out.println(new String(b1));
byte a2[]={97,98,99,100,101,102},b2[]={65,67,68,69,70,71};
System.arraycopy(b2,0,a2,3,b2.length-3);
System.out.println(new String(a2));
System.out.println(new String(b2));
}
}
答:①運(yùn)行結(jié)果:abcdef
1abcde
abcACD
ACDEFG
②arraycopy的方法是public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length)。其中五個參數(shù)分別表示:
src - 被復(fù)制的數(shù)組
srcPos - 從第幾個元素開始復(fù)制
dest - 要復(fù)制到的數(shù)組
destPos - 從第幾個元素開始粘貼
length - 一共需要復(fù)制的元素個數(shù)
第6章?時間、日期和數(shù)字
1. 用Data類不帶參數(shù)的構(gòu)造方法創(chuàng)建日期,要求日期的輸出格式是:星期?小時?分?秒。
答: import java.util.*;
import java.text.*;
class Test
{
public static void main(String args[])
{
Date 時間=new Date();
SimpleDateFormat s=new SimpleDateFormat("E HH時?mm分?ss秒");
System.out.println(s.format(時間));
}
}
2. 輸出2006年2月的日歷頁,程序需處理閏年問題。
答: import java.util.*;
class Test
{
public static void main(String args[])
{
int year=2006,month=2;
int allDay;
if((year%4==0&&year%100!=0)||(year%400==0))
allDay=29;
else
allDay=28;
Calendar feb=Calendar.getInstance();
feb.set(2006,1,1);
int dat=feb.get(Calendar.DAY_OF_WEEK)-1;
String a[]=new String[dat+allDay];
for(int i=0;i<dat;i++)
{
a[i]=" ";
}
for(int i=dat,n=1;i<(dat+allDay);i++)
{
if(n<=9)
a[i]=String.valueOf(n)+" ";
else
a[i]=String.valueOf(n)+" ";
n++;
}
System.out.println(" "+year+" 年?"+month+"月");
System.out.println("日?一?二?三?四?五?六");
for(int j=0;j<a.length;j++)
{
if(j%7==0)
{
System.out.println(" ");
}
System.out.print(a[j]);
}
}
}
3. 計算某年、某月、某日和某年、某月、某日之間的天數(shù)間隔。要求年、月、日通過main方法的參數(shù)傳遞到程序中。
答: import java.util.*;
class Test
{
public static void main(String args[])
{
Calendar c=Calendar.getInstance();
c.set(2000,0,1);
?
long time1=c.getTimeInMillis();
c.set(2008,7,8);
long time2=c.getTimeInMillis();
long dayCous=(time2-time1)/(1000*60*60*24);
System.out.println("2008年8月8日和2000年1月1日相隔"+dayCous+"天");
}
}
4. 編程練習(xí)?Math類的常用方法。
答: import java.text.*;
public class Test
{
public static void main(String args[])
{
double a=Math.abs(-10);
System.out.println("-10的絕對值是:"+a);
double maxNum=Math.max(123.456,-5.4321);
System.out.println("123.456與-5.4321中的最大值是:"+maxNum);
double minNum=Math.min(123.456,-5.4321);
System.out.println("123.456與-5.4321中的最小值是:"+minNum);
int randomNum=(int)(Math.random()*10)+1;
System.out.println("輸出一個1到10的隨機(jī)數(shù)是:"+randomNum);
double powNum=Math.pow(2,10);
System.out.println("2的10次冪是:"+powNum);
double sqrtNum=Math.sqrt(10);
System.out.println("10的平方根是:"+sqrtNum);
double logNum=Math.log(2);
System.out.println("2的對數(shù)是:"+logNum);
double sinNum=Math.sin(-10);
System.out.println("-10的正弦值是:"+sinNum);
double asinNum=Math.asin(0.5);
System.out.println("0.5的反正弦值是:"+asinNum);
System.out.println("格式化之前的數(shù)是:"+sqrtNum);
NumberFormat f=NumberFormat.getInstance();
f.setMaximumFractionDigits(10);
f.setMinimumIntegerDigits(4);
String s=f.format(sqrtNum);
System.out.println("格式化后:"+s);
}
}
5. 使用BigInteger類計算1!+3!+5!+7!+…的前30項的和。
答: import java.math.*;
public class Test
{
public static void main(String args[])
?
{
BigInteger sum=new BigInteger("0"),
jieCheng=new BigInteger("1"),
ONE=new BigInteger("1"),
i=ONE;
int k=0;
while(++k<=30)
{
sum=sum.add(jieCheng);
i=i.add(ONE);
jieCheng=jieCheng.multiply(i);
i=i.add(ONE);
jieCheng=jieCheng.multiply(i);
}
System.out.println(sum);
}
}
第7章?AWT組件及事件處理
1. Frame類對象的默認(rèn)布局是什么布局?和Panel類對象的默認(rèn)布局相同嗎?
答:①Frame類對象的默認(rèn)布局是BorderLayout布局;
②不相同,Panel類對象的默認(rèn)布局是FlowLayout布局。
2. 一個容器對象是否可以使用add方法添加一個Frame窗口?
答: 不可以。
3. Checkbox對象可以觸發(fā)ItemEvent事件嗎?
答: 可以。
一個動物聲音“模擬器”。希望模擬器可以模擬許多動物的叫聲,要求如下
Animal.java
public abstract class Animal {
abstract void cry();
? ? abstract void getAnimaName();
}
Dog.java
public class Dog extends Animal{
void cry(){
System.out.println("狗的叫聲:汪汪汪");
}
void getAnimaName(){
System.out.println("名字:狗");
}
}
Cat.java
public class Cat extends Animal{
void cry(){
System.out.println("貓的叫聲:喵喵喵");
}
void getAnimaName(){
System.out.println("名字:貓");
}
}
Simulator,java
public class Simulator {
void playSound(Animal animal){
animal.getAnimaName();
animal.cry();
}
}
public class Application {
public static void main(String args[]){
Simulator simulator=new Simulator();
simulator.playSound(new Cat());
simulator.playSound(new Dog());
}
}
計一個動物聲音“模擬器”,需要用到接口。希望模擬器可以模擬許多動物的叫聲,要求如下。
Animal.java
public interface Animal{
? ? public abstract void cry();
? ? public abstract String getAnimalName();
}
Simulator.java
public class Simulator{
? ? public void playSound(Animal animal){
? ? System.out.print("現(xiàn)在播放"+animal.getAnimalName()+"類的聲音:");
? ? animal.cry();
? ? }
}
Dog.java
public class Dog implements Animal{
? ? public void cry(){
? ? ? ? System.out.println("汪汪...汪汪");
? ? }
? ? public String getAnimalName(){
? ? ? ? return "狗";
? ? }
}
Cat.java
public class Cat implements Animal{
? ? public void cry(){
? ? ? ? System.out.println("喵喵...喵喵");
? ? }
? ? public String getAnimalName(){
? ? ? ? return "貓";
? ? }
}
Application.java
public class E{
? ? public static void main(String args[]){
? ? ? ? Simulator simulator = new Simulator();
? ? ? ? simulator.playSound(new Dog());
? ? ? ? simulator.playSound(new Cat());
? ? }
}
第3章中的例子9的程序允許用戶在鍵盤依次輸入若干個數(shù)字(每輸入一個數(shù)字都需要按回車鍵確認(rèn)),程序?qū)⒂嬎愠鲞@些數(shù)的和以及平均值。請在第3章的例子9中增加斷言語句,當(dāng)用戶輸入的數(shù)字大于100或小于0時,程序立刻終止執(zhí)行,并提示這是一個非法的成績數(shù)據(jù)。
import java.util.*;
public class E{
? 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< 100:"數(shù)據(jù)不合理";
? ? ? ? m = m+1;
? ? ? ? sum = sum+x;
? ? ? ? }
? ? ? ? System.out.printf("%d個數(shù)的和為%f\n",m,sum);
? ? ? ? System.out.printf("%d個數(shù)的平均值為%f\n",m,sum/m);
? ? ? ? }
? ? }
編寫應(yīng)用程序,有一個標(biāo)題為“計算的窗口”的窗口,窗口的布局為FlowLayout布局。窗口中添加兩個文本區(qū),當(dāng)我們在一個文本區(qū)中輸入若干個數(shù)時,另一個文本區(qū),同時對輸入的數(shù)進(jìn)行求和運(yùn)算并求出平均值,也就是說隨著輸入的變化,另一個文本區(qū)不斷地更新求和及平均值。
答: import java.awt.*;
import java.awt.event.*;
import java.util.*;
class Calculated extends Frame implements TextListener
{
TextArea text1,text2; //定義了2個文本區(qū)
Calculated(String s) //標(biāo)題為“計算的窗口”的窗口
{
super(s);
setLayout(new FlowLayout()); //窗口布局為FlowLayout
text1=new TextArea(5,23);
text2=new TextArea(5,23);
add(text1);
add(text2);
text2.setEditable(false); //顯示求和結(jié)果和平均值的文本區(qū)禁止編輯
text1.addTextListener(this);
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
}
);
setBounds(100,100,400,160);
setVisible(true);
validate();
}
public void textValueChanged(TextEvent e)
{
String s=text1.getText();
StringTokenizer geshu=new StringTokenizer(s);
int n=geshu.countTokens();
double a[]=new double[n];
for(int i=0;i<n;i++)
{
String temp=geshu.nextToken();
double date=Double.parseDouble(temp);
a[i]=date;
}
double sum=0,average;
for(int i=0;i<n;i++)
{
sum=sum+a[i];
}
average=sum/n;
text2.setText(null);
text2.append("和:"+sum+"\n"+"平均數(shù):"+average);
}
}
public class Test
{
public static void main(String args[])
{
Calculated calc=new Calculated("計算的窗口");
}
}
判斷回文數(shù)
import java.util.Scanner;
public class Number {
? ? public static void main(String args[]) {
? ? ? ? int number = 0, d5, d4, d3, d2, d1;
? ? ? ? Scanner reader = new Scanner(System.in);
? ? ? ? System.out.println("輸入一個1至99999之間的數(shù)");
? ? ? ? number = reader.nextInt();
?
? ? ? ? if (number >= 1 && number <= 99999)? ? //判斷number在1 ~ 99999之間的條件
? ? ? ? {
? ? ? ? ? ? d5 = number / 10000;? ? //計算number的最高位(萬位)d5
? ? ? ? ? ? d4 = number % 10000 / 1000;//計算number的千位d4
? ? ? ? ? ? d3 = number % 1000 / 100;//計算number的百位d3
? ? ? ? ? ? d2 = number % 100 / 10;
? ? ? ? ? ? d1 = number % 10;
? ? ? ? ? ? if (number > 9999)? ? //判斷number是5位數(shù)的條件
? ? ? ? ? ? {
? ? ? ? ? ? ? ? System.out.println(number + "是5位數(shù)");
? ? ? ? ? ? ? ? if (d5 == d1 && d4 == d2)? ? //判斷number是回文數(shù)的條件
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "是回文數(shù)");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "不是回文數(shù)");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else if (number < 10000 && number > 999)? ? //判斷number是4位數(shù)的條件
? ? ? ? ? ? {
? ? ? ? ? ? ? ? System.out.println(number + "是4位數(shù)");
? ? ? ? ? ? ? ? if (d4 == d1 && d3 == d2)? ? //判斷number是回文數(shù)的條件
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "是回文數(shù)");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "不是回文數(shù)");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else if (number < 1000 && number > 99)? ? //判斷number是3位數(shù)的條件
? ? ? ? ? ? {
? ? ? ? ? ? ? ? System.out.println(number + "是3位數(shù)");
? ? ? ? ? ? ? ? if (d3 == d1)? ? //判斷number是回文數(shù)的條件
? ? ? ? ? ? ? ? {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "是回文數(shù)");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "不是回文數(shù)");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else if (d2 != 0) {
? ? ? ? ? ? ? ? System.out.println(number + "是2位數(shù)");
? ? ? ? ? ? ? ? if (d1 == d2) {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "是回文數(shù)");
? ? ? ? ? ? ? ? } else {
? ? ? ? ? ? ? ? ? ? System.out.println(number + "不是回文數(shù)");
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } else if (d1 != 0) {
? ? ? ? ? ? ? ? System.out.println(number + "是1位數(shù)");
? ? ? ? ? ? ? ? System.out.println(number + "是回文數(shù)");
? ? ? ? ? ? }
? ? ? ? ? ? //}
? ? ? ? ? ? else {
? ? ? ? ? ? ? ? System.out.printf("\n%d在不1~99999之間", number);
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
輸出希臘字母表
```java
public class GreekAlphabet {
? ? public static void main(String args[]) {
? ? ? ? int startPosition = 0, endPosition = 0;
? ? ? ? char cStart = 'α', cEnd = 'ω';
? ? ? //cStart做int轉(zhuǎn)換運(yùn)算,并將結(jié)果賦值給startPosition
? ? ? ? startPosition=(int)cStart;
? ? ? //cEnd做int轉(zhuǎn)換運(yùn)算,并將結(jié)果賦值給endPosition
? ? ? ? endPosition=(int)cEnd;
? ? ? ? System.out.println("希臘字母\'α\'在unicode表的順序位置:" + startPosition);
? ? ? ? System.out.println("希臘字母\'ω\'在unicode表的順序位置:" + endPosition);
? ? ? ? System.out.println("希臘字母表:");
? ? ? ? for (int i = startPosition; i <= endPosition; i++) {
? ? ? ? ? ? char c = '\0';
? ? ? ? ?//i做char型轉(zhuǎn)換運(yùn)算,并將結(jié)果賦值給c
? ? ? ? ? ? c=(char)i;
? ? ? ? ? ? System.out.print("? " + c);
? ? ? ? ? ? if ((i - startPosition + 1) % 10 == 0) {
? ? ? ? ? ? ? ? System.out.println("");
? ? ? ? ? ? }
? ? ? ? }
? ? }
}
實驗2.2 數(shù)組的引用與元素
public class InputArray {
? ? public static void main(String args[]) {
? ? ? ? int[] a = {100, 200, 300};
? ? ? //輸出數(shù)組a的長度
? ? ? ? System.out.println("數(shù)組a的長度="+a.length);
? ? ? //輸出數(shù)組a的引用
? ? ? ? System.out.println("數(shù)組a的位置="+a);
? ? ? ? int b[][] = {{1}, {1,1}, {1,2,1}, {1,3,3,1}, {1,4,6,4,1}};
? ? ? //輸出二維數(shù)組b的一維數(shù)組的個數(shù)
? ? ? ? System.out.println(b[0].length);
? ? ? ? System.out.println(b[4][2]);
? ? ? //將數(shù)組a的引用賦給b[4];
? ? ? ? b[4]=a;
? ? ? ? System.out.println(b[4][2]);
? ? }
}
實驗4.1 機(jī)動車
public class Vehicle {
? ? ? ? double speed;//聲明double型變量speed,刻畫速度
? ? ? ? int power;? //聲明int型變量power,刻畫功率
?
? ? void speedUp(int s) {
? ? ? ? speed = s+speed;//將參數(shù)s的值與成員變量speed的和賦值給成員變量speed
? ? }
? ? void speedDown(int d) {
? ? ? ? speed= speed-d; //將成員變量speed與參數(shù)d的差賦值給成員變量speed
? ? }
? ? void setPower(int p) {
? ? ? ? power = p; //將參數(shù)p的值賦值給成員變量power
? ? }
? ? int getPower() {
? ? ? ? return? power; //返回成員變量power的值
? ? }
? ? double getSpeed() {
? ? ? ? return speed;
? ? }
}
public class User {
? ? public static void main(String args[]) {
? ? ? ? Vehicle car1, car2;
? ? ? car1 = new Vehicle();? //使用new運(yùn)算符和默認(rèn)的構(gòu)造方法創(chuàng)建對象car1
? ? ? car2 = new Vehicle();//使用new運(yùn)算符和默認(rèn)的構(gòu)造方法創(chuàng)建對象car2
? ? ? ? car1.setPower(128);
? ? ? ? car2.setPower(76);
? ? ? ? System.out.println("car1的功率是:"+car1.getPower());
? ? ? ? System.out.println("car2的功率是:"+car2.getPower());
? ? ? car1.speedUp(80);//car1調(diào)用speedUp()方法將自己的speed的值增加80
? ? ? car2.speedUp(80);//car2調(diào)用speedUp()方法將自己的speed的值增加80
? ? ? ? System.out.println("car1目前的速度:"+car1.getSpeed());
? ? ? ? System.out.println("car2目前的速度:"+car2.getSpeed());
? ? ? ? car1.speedDown(10);
? ? ? ? car2.speedDown(20);
? ? ? ? System.out.println("car1目前的速度:"+car1.getSpeed());
? ? ? ? System.out.println("car2目前的速度:"+car2.getSpeed());
? ? }
}
實驗3.2 猜數(shù)字游戲
import java.util.Scanner;
import java.util.Random;
public class GuessNumber {
? ? public static void main(String args[]) {
? ? ? ? Scanner reader = new Scanner(System.in);
? ? ? ? Random random = new Random();
? ? ? ? System.out.println("給你一個1至100之間的整數(shù),請猜測這個數(shù)");
? ? ? ? int realNumber = random.nextInt(100) + 1;? //random.nextInt(100)是[0,100)
? ? ? ? //中的隨機(jī)整數(shù)
? ? ? ? int yourGuess = 0;
? ? ? ? System.out.print("輸入您的猜測:");
? ? ? ? yourGuess = reader.nextInt();
? ? ? ? while (yourGuess != realNumber)? ? //循環(huán)條件
? ? ? ? {
? ? ? ? ? ? if (yourGuess > realNumber)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? System.out.print("猜大了,再輸入你的猜測:");
? ? ? ? ? ? ? ? yourGuess = reader.nextInt();
? ? ? ? ? ? }
? ? ? ? ?else if (yourGuess < realNumber)
? ? ? ? ? ? {
? ? ? ? ? ? ? ? System.out.print("猜小了,再輸入你的猜測:");
? ? ? ? ? ? ? ? yourGuess = reader.nextInt();
? ? ? ? ? ? }
?
? ? ? ? }
? ? ? ? System.out.println("猜對了");
?
? ? }
}
while放在外面,是因為while的循環(huán)條件是yourGuess != realNumber。如果要放在while循環(huán)里里面則要改變循環(huán)條件,同時要放進(jìn)判斷語句里面。