国庆课堂小结
一、仔細閱讀示例:?EnumTest.java,運行它,分析運行結果。你能得到什么結論?你掌握了枚舉類型的基本用法了嗎?實驗結果如圖
二、
請運行以下代碼(TestDouble.java)你看到了什么樣的輸出,意外嗎?
意外,發現使用double類型的數值進行計算,其結果是不精確的。這個涉及到二進制與十進制的轉換問題。 N進制可以理解為:數值×基數的冪,例如我們熟悉的十進制數123.4=1×102+2×10+3×(10的0次冪)+4×(10的-1次冪);其它進制的也是同理,例如二進制數11.01=1×2+1×(2的0次冪)+0+1×(2的-2次冪)=十進制的3.25。 double類型的數值占用64bit,即64個二進制數,除去最高位表示正負符號的位,在最低位上一定會與實際數據存在誤差(除非實際數據恰好是2的n次方)。 舉個例子來說,比如要用4bit來表示小數3.26,從高到低位依次對應2的1,0,-1,-2次冪,根據最上面的分析,應當在二進制數11.01(對應十進制的3.25)和11.10(對應十進制的3.5)之間選擇。 簡單來說就是我們給出的數值,在大多數情況下需要比64bit更多的位數才能準確表示出來(甚至是需要無窮多位),而double類型的數值只有64bit,后面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。
解決方法——使用BigDecimal類。在構建BigDecimal對象時應使用字符串而不是double數值,否則,仍有可能引發計算精度問題。
?
?
三、編寫一個程序,用戶輸入兩個數,求出其加減乘除,并用消息框顯示計算結果。
代碼如下:
//?An?addition?program?
?
import?javax.swing.JOptionPane;??//?import?class?JOptionPane
?
public?class?Addition?{
???public?static?void?main(?String?args[]?)
???{
??????String?firstNumber,???//?first?string?entered?by?user
?????????????secondNumber;??//?second?string?entered?by?user
??????int?number1,??????????//?first?number?to?add
??????????number2,??????????//?second?number?to?add
??????????sum,reduction,multiply,divide;??????????????//?sum?of?number1?and?number2
?
??????//?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?);
?
??????//?add?the?numbers
??????sum?=?number1?+?number2;
??????reduction=number1?-?number2;
??????multiply=number1?*?number2;
??????divide=number1/number2;?
?
??????//?display?the?results
??????JOptionPane.showMessageDialog(
?????????null,?"The?sum?is?"?+?sum,?"Results",
?????????JOptionPane.PLAIN_MESSAGE?);
??????JOptionPane.showMessageDialog(
???? ?????????null,?"The?reduction?is?"?+?reduction,?"Results",
???? ?????????JOptionPane.PLAIN_MESSAGE?);
??????JOptionPane.showMessageDialog(
? ?????????null,?"The?multiply?is?"?+?multiply,?"Results",
? ?????????JOptionPane.PLAIN_MESSAGE?);
??????JOptionPane.showMessageDialog(
? ?????????null,?"The?divide?is?"?+?divide,?"Results",
? ?????????JOptionPane.PLAIN_MESSAGE?);
?
??????System.exit(?0?);???//?terminate?the?program
???}
}
?
四、以下代碼的輸出結果是什么?
int?X=100;
int?Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
為什么會有這樣的輸出結果?
?
因為相加時是字符串相加,只是首尾相接,并沒有加法效果,若改為System.out.println("X+Y="+(X+Y));則輸出x+y=300;
?
五、在上網時,我們經常會看到以下這種對話框,要用戶輸入一個驗證碼。如果要由你寫一個自動生成驗證碼的程序,你能完成這個任務嗎?
答:可以,源代碼如下
?
//jeson?驗證碼系統
import?java.util.*;
import?javax.swing.JOptionPane;
public?class?Verification?{
?????public?static?void?main(String?args[]){
???? ?Random?rand=new?Random();
???? ?int?ran1=0,ran2=0,ran3=0,ran4=0;//ran表示隨機數
???? ?ran1=rand.nextInt(10);
???? ?ran2=rand.nextInt(10);
???? ?ran3=rand.nextInt(10);
???? ?ran4=rand.nextInt(10);
???? ?//輸出驗證碼
???? ?JOptionPane.showMessageDialog(
???? ?????????null,?"驗證碼是"?+?ran1+ran2+ran3+ran4,?"Results",
???? ?????????JOptionPane.PLAIN_MESSAGE?);
???? ?String?firstNumber;//輸入驗證碼的載體
???? ?firstNumber?=
???? ?????????JOptionPane.showInputDialog(?"請輸入驗證碼"?);
???? ?
???? ?int?n1=Integer.parseInt(firstNumber);//將輸入的數組轉化為int型給n1
???? ?int?n2=Integer.parseInt(ran1+""+ran2+""+ran3+""+ran4+"");//將隨機數轉化為數組再轉化為int給n2
???? ?//判斷驗證碼輸入正確與否
???? ?if(n1==n2)?System.out.println("正確");
???? ?else?System.out.println("錯誤");
???? ?
?????}
}
?
轉載于:https://www.cnblogs.com/hehejeson/articles/4855987.html
總結
- 上一篇: 第一道java编程题
- 下一篇: 第三次上课问题总汇