java的實驗報告
『壹』 java實驗報告總結
源代碼:
public class Exe1_1 {
public static void main (String args[]){
byte a1=127;
int a2=12345;
long a3=123456789L;
float a4=1.23e-5f;
double a5=1.4567e3;
char a6=65;
boolean a7=true;
System.out.println("a1="+a1+"\na2="+a2+"\na3="+a3+"\na4="+a4+"\na5="+a5+"\na6="+a6+"\na7="+a7);
}
}運行結果:
2.編寫Java小應用程序,輸出兩行字元串:「Java很有趣。」和「努力學習Java編程。」,輸出的起點坐標是(20,20),行距是50像素。源程序代碼:
import java.awt.Graphics;
import java.applet.Applet;
public class Exe1_2 extends Applet{
public void paint(Graphics g){
g.drawString("Java很有趣。",20,20);
g.drawString("努力學習Java編程。",20,70);
}
}運行情況:
3.使用算術運算符得到一個4位十進制數的各位數字並輸出,然後輸出該數的逆序數和各位數字平方後相加的和。
源程序代碼:
public class Exe1_3 {
public static void main (String args[]){
int n=3756,a,b,c,d,n1;
a=n/1000;
b=(n-1000*a)/100;
d=n%10;
c=(n%100-d)/10;
System.out.println("3756的逆序數為:"+d+" "+c+" "+b+" "+a);
System.out.print("各位數字平方後相加的和為:");
System.out.print(a*a+b*b+c*c+d*d);
}
}
運行結果:
三、實驗總結(是否完成實驗、實驗過程中的問題以及解決方法分析等)
本次是我第一次使用JAVA來進行編程,感覺很是不一樣,在前兩節課中我們學習了有關Java的一些簡單知識。然後這次的實驗是對最初的一種練習。
在第一題中,我們重要是認識java的運行環境,並且了解各種變數的數據類型。只要通過簡單的語句就可以通過運行。其中出現了一些單詞的拼寫錯誤,這些是可以修改正確的。第二題我們練習的十一個小的applet應用程序,需要設置一個網頁來顯示,這是一個很不一樣的地方,最後成功測試,裡面需要注意的是顯示位置的問題。第三題我們做的是一個有演算法要求的解決問題,在測試中出現了一點小問題,程序的演算法出了錯。還有一個問題是有關於顯示問題,最後的數據輸出需要用到兩行分別顯示字元和數據,這樣才不會出錯。
『貳』 Java程序設計實驗報告 繼承與多態
package MyShape;
public class Test {
/**
* @param args
*/
public static void main(String[] args) {
Circle c = new Circle(2,4,3);
c.printItMyWay();
}
}
abstract class Shape{
public abstract float getCir();
public abstract float getArea();
}
class Point extends Shape implements Printable{
public int x;
public int y;
public Point(int x, int y){
this.x= x;
this.y=y;
}
public Point (){
}
@Override
public float getCir() {
// TODO Auto-generated method stub
return 0;
}
@Override
public float getArea() {
// TODO Auto-generated method stub
return 0;
}
public int getX() {
return x;
}
public void setX(int x) {
this.x = x;
}
public int getY() {
return y;
}
public void setY(int y) {
this.y = y;
}
@Override
public void printItMyWay() {
System.out.println(" Point ("+x+","+y+")");
System.out.println(" Point Area:"+this.getArea());
System.out.println(" Point Circle:"+this.getCir());
}
}
class Circle extends Point implements Printable{
public float r ;
public Circle(){
}
public Circle(float r,int x, int y ){
if(r>0){
this.r =r;
this.x =x;
this.y=y;
}
}
public float getR() {
return r;
}
public void setR(float r) {
this.r = r;
}
@Override
public float getArea() {
return (float) (r*r*3.14/2);
}
@Override
public float getCir() {
return (float) (3.14*r*2);
}
@Override
public void printItMyWay() {
System.out.println(" Circle ("+x+","+y+")");
System.out.println(" Circle R:"+r);
System.out.println(" Circle Area:"+this.getArea());
System.out.println(" Circle Circle:"+this.getCir());
}
}
interface Printable {
public void printItMyWay();
}
『叄』 求JAVA的實驗報告
一、實驗目的1.掌握類的聲明。2.掌握對象的創建。3.掌握方法的定義和調用。4.掌握構造函數的使用。二、實驗內容1.編程創建一個Box類,在其中定義三個變數表示一個立方體的長、寬和高,再定義一個方法setDemo對這三個變數進行初始化,然後定義一個方法求立方體的體積。創建一個對象,求給定尺寸的立方體的體積。2.將上題的方法setDemo改用構造函數實現初始化。三、實驗步驟1.創建一個box類,在其中定義三個變數表示立方體的長、寬、高,再定義構造函數setDemo對三個變數進行初始化,然後定義一個方法求立方體的體積。關鍵代碼如下: class Box{protected int length,width,height;public void setDemo(int l,int w,int h){length=l;width=w;height=h;}public void Cub(){int cub=length*width*height; System.out.println("立方體的體積為:"+cub);}
『肆』 問: java中多分支語句和普通的if語句有什麼不同,在使用時應該注意什麼這是實驗報告,別告訴
switch與if..else 的執行的效率問題
今天讀一前輩的程序,發現其在串口中斷裡面為了分析協議的報文類型,在中斷函數裡面使用if..else語句。因為報文類型在現在看來只有兩種,以後有可能還會增加,不確定。
本人以為這樣用有些不妥,為什麼不用switch語句呢?猜想是不是因為效率方面的考慮呢,畢竟我們應該盡量是中斷的處理代碼更加簡潔,時間效率更高才好。
所以本人就查找相關資料,資料顯示switch語句反而比ifelse的執行效率要高。
下面來詳細描述switch與ifelse的區別。
switch...case
與if...else的根本區別在於,switch...case會生成一個跳轉表來指示實際的case分支的地址,而這個跳轉表的索引號與switch
變數的值是相等的。從而,switch...case不用像if...else那樣遍歷條件分支直到命中條件,而只需訪問對應索引號的表項從而到達定位分
支的目的。
具體地說,switch...case會生成一份大小(表項數)為最大case常量+1的跳錶,程序首先判斷switch變數是否大於
最大case
常量,若大於,則跳到default分支處理;否則取得索引號為switch變數大小的跳錶項的地址(即跳錶的起始地址+表項大小*索引號),程序接著跳
到此地址執行,到此完成了分支的跳轉。
//
int main()
{
unsigned int i,j;
i=3;
switch (i)
{
case 0:
j=0;
break;
case 1:
j=1;
break;
case 2:
j=2;
break;
case 3:
j=3;
break;
case 4:
j=4;
break;
default:
j=10;
break;
}
}
用gcc編譯器,生成匯編代碼(不開編譯器優化)
.file "shiyan.c"
.text
.globl main
.type main, @function
main:
leal 4(%esp), %ecx
andl $-16, %esp
pushl -4(%ecx)
pushl %ebp
movl %esp, %ebp
pushl %ecx
subl $20, %esp
movl $3, -8(%ebp)
cmpl $4, -8(%ebp)
ja .L2
movl -8(%ebp), %eax
sall $2, %eax
movl .L8(%eax), %eax
jmp *%eax
.section .rodata
.align 4
.align 4
.L8:
.long .L3
.long .L4
.long .L5
.long .L6
.long .L7
.text
.L3:
movl $0, -12(%ebp)
jmp .L11
.L4:
movl $1, -12(%ebp)
jmp .L11
.L5:
movl $2, -12(%ebp)
jmp .L11
.L6:
movl $3, -12(%ebp)
jmp .L11
.L7:
movl $4, -12(%ebp)
jmp .L11
.L2:
movl $10, -12(%ebp)
.L11:
addl $20, %esp
popl %ecx
popl %ebp
leal -4(%ecx), %esp
ret
.size main, .-main
.ident "GCC: (Ubuntu 4.3.3-5ubuntu4) 4.3.3"
.section .note.GNU-stack,"",@progbits
由此看來,switch有點以空間換時間的意思,而事實上也的確如此。
1.當分支較多時,當時用switch的效率是很高的。因為switch是隨機訪問的,就是確定了選擇值之後直接跳轉到那個特定的分支,但是if。。else是遍歷所以得可能值,知道找到符合條件的分支。如此看來,switch的效率確實比ifelse要高的多。
2.由上面的匯編代碼可知道,switch...case佔用較多的代碼空間,因為它要生成跳錶,特別是當case常量分布范圍很大但實際有效值又比較少的情況,switch...case的空間利用率將變得很低。
3.switch...case
只能處理case為常量的情況,對非常量的情況是無能為力的。例如 if (a > 1 && a <
100),是無法使用switch...case來處理的。所以,switch只能是在常量選擇分支時比ifelse效率高,但是ifelse能應用於更
多的場合,ifelse比較靈活。
由此看來,上面前輩的中斷處理程序中用switch是比較合適的,即節省了時間,而且對於以後程序的擴展也是很方便。因為報文類型這個值基本上都是用整形常量來表示的。