JAVA语法基础 动手动脑及课后作业
?
動手動腦1:
仔細閱讀示例:?EnumTest.java,運行它,分析運行結果?
public?class?EnumTest?{
?
public?static?void?main(String[]?args)?{
Size?s=Size.SMALL;
Size?t=Size.LARGE;
//s和t引用同一個對象?
System.out.println(s==t);??//
//是原始數據類型嗎?
System.out.println(s.getClass().isPrimitive());
//從字符串中轉換
Size?u=Size.valueOf("SMALL");
System.out.println(s==u);??//true
//列出它的所有值
??for(Size?value:Size.values()){
System.out.println(value);
}
}
}
enum Size{SMALL,MEDIUM,LARGE};
運行結果:false??false??true??SMALL??MEDIUM??LARGE
?
?
你能得到什么結論?你掌握了枚舉類型的基本用法了嗎?
枚舉類型的常量以字符串的形式順序儲存,枚舉類型是引用類型,枚舉不屬于原始數據類型,它的每個具體值都引用一個特定的對象。相同的值則引用同一個對象。可以使用“==”和equals()方法直接比對枚舉變量的值,換句話說,對于枚舉類型的變量,“==”和equals()方法執行的結果是等價的。
動手動腦2:看著這個圖,再查查Java中每個數據類型所占的位數,和表示數值的范圍,你能得出什么結論?
?
char?8位二進制數范圍是-2的7次方到2的7次方-1,byte?8位帶符號整數-128到127之間的任意整數,short?16位無符號整數-32768到32767之間的任意整數,int?32位帶符號整數-2的31次方到2的31次方-1之間的任意整數,long?64位帶符號整數-2的63次方到2的63次方-1之間的任意整數,float?32位單精度浮點數,double?64位雙精度浮點數。
結論是:Java會自動完成從低級類型向高級類型轉換,即取值范圍相對較小的數據類型轉換成取值范圍相對較大的數據類型。
動手實驗:請運行以下代碼(TestDouble.java)
public?class?TestDouble?{
?
????public?static?void?main(String?args[])?{
????????System.out.println("0.05?+?0.01?=?"?+?(0.05?+?0.01));
????????System.out.println("1.0?-?0.42?=?"?+?(1.0?-?0.42));
????????System.out.println("4.015?*?100?=?"?+?(4.015?*?100));
????????System.out.println("123.3?/?100?=?"?+?(123.3?/?100));
????}
}
你看到了什么樣的輸出,意外嗎?
輸出結果:
0.05?+?0.01?=?0.060000000000000005
1.0?-?0.42?=?0.5800000000000001
4.015?*?100?=?401.49999999999994
123.3?/?100?=?1.2329999999999999
實驗截圖:
為什么double類型的數值進行運算得不到“數學上精確”的結果?
請通過互聯網查找資料,或者是閱讀相關計算機教材,解決這個問題。
提示:這個問題,與浮點數在計算機內部的表示方法有關系。可以使用這個知識在搜索引擎中查找相關資料
事實上浮點運算很少是精確的,只要是超過精度能表示的范圍就會產生誤差。往往產生誤差不是?因為數的大小,而是因為數的精度。因此,產生的結果接近但不等于想要的結果。尤其在使用?float?和?double?作精確運?算的時候要特別小心。可以考慮采用一些替代方案來實現。如通過使用?long?類型來轉換。我們知道在計算機中浮點數的表示方法是由一個整數(即尾數)乘以一個基數(計算機中一般為2)的整次冪得到。(類似于科學計數法,科學記數法基數為10)float的內存結構為:符號位表示正負,1位?指數位,8位?尾數位,32位(符號位1表示負,0表示正)指數是以2為底的,范圍是?-128?到?127,如果超過了127,則從-128開始計。?即:127+1=-128尾數都省去了第1位的1,所以在還原時要先在第一位加上1。它可能包含整數和純小數兩部分,也可能只包含其中一部分,視數字大小而定。對于帶有整數部分的浮點數,其整數的表示法有兩種,當整數大于十進制的16777215時使用的是科學計數法,如果小于或等于則直接采用一般的二進制表示法。科學計數法和小數的表示法是一樣的。小數部分則是直接使用科學計數法,形式是X?*?(?2?^?n?)。這樣就導致浮點類型在計算機的存貯中無法精確表示。
動手動腦3:
以下代碼的輸出結果是什么?
int?X=100;
int?Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
為什么會有這樣的輸出結果?
輸出結果是:X+Y=100200
????????????300=X+Y
原因:System.out.println("X+Y="+X+Y)中的“+”為連接運算符,
System.out.println(X+Y+"=X+Y")中的“+”為加法運算符,即為兩個數相加。
課后練習:閱讀相應教材,或者使用互聯網搜索引擎,弄清楚反碼、補碼跟原碼這幾個概念,然后編寫示例程序,對正數、負數進行各種位操作,觀察輸出結果,與手工計算的結果進行比對,看看Java中的數是采用上述哪種碼表示的。
在計算機內,定點數有3種表示法:原碼、反碼和補碼。反碼是數值存儲的一種,但是由于補碼更能有效表現數字在計算機中的形式,所以多數計算機一般都不采用反碼表示數。
所謂原碼就是二進制定點表示法,即最高位為符號位,“0”表示正,“1”表示負,其余位表示數值的大小。
反碼表示法規定:正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但符號位除外。
原碼10010=?反碼11101?(10010,1為符號碼,故為負)
(11101)?二進制=?-2?十進制
補碼表示法規定:正數的補碼與其原碼相同;負數的補碼是在其反碼的末位加1。
?
課后作業:編寫一個程序,用戶輸入兩個數,求出其加減乘除,并用消息框顯示計算結果。
import?javax.swing.JOptionPane;
public?class?Yusuan?{
?
public?static?void?main(String[]?args)?{
//?TODO?自動生成的方法存根
String?firstNumber,secondNumber;
int?number1,number2,sum,minus,multiply,divide;
?//?read?in?first?number?from?user?as?a?string
??????firstNumber?=JOptionPane.showInputDialog(?"Enter?first?integer"?);
?
??????//?read?in?second?number?from?user?as?a?string
??????secondNumber?=JOptionPane.showInputDialog(?"Enter?second?integer"?);
?
??????//?convert?numbers?from?type?String?to?type?int
??????number1?=?Integer.parseInt(?firstNumber?);?
??????number2?=?Integer.parseInt(?secondNumber?);
?
??????//?yunsuan?the?numbers
??????sum?=?number1?+?number2;
??????minus=number1?-?number2;
??????multiply=number1*number2;
??????divide=number1/number2;
??????
??????//?display?the?results
??????JOptionPane.showMessageDialog(null,"和為:?"+sum+"?差為:"+minus+"?積為:"+multiply+"?商為:"+divide,"Results",JOptionPane.PLAIN_MESSAGE);//在窗口上顯示結果
??????System.exit(0);//釋放空間
?
}
?
}
輸出結果:
?
?
轉載于:https://www.cnblogs.com/qianxia/p/4857664.html
總結
以上是生活随笔為你收集整理的JAVA语法基础 动手动脑及课后作业的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 有些事关于敏捷
- 下一篇: LayoutInflater类详解