日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

JAVA作业 02 JAVA语法基础

發布時間:2025/3/15 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JAVA作业 02 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);?

for(Size value:Size.values())

{ System.out.println(value); }

}}? enum Size{SMALL,MEDIUM,LARGE};

?

1結果截圖示例

?

2?實驗分析

枚舉類型的每個具體值都引用一個特定的對象,相同值引用同一個對象。因為s和t是不同內容所以引用不同對象。

枚舉是引用型變量,枚舉類型關鍵字是enum,類型名自己根據需要定義,可以通過定義變量名來遍歷。valueOf() 類型轉換,將后邊的類型轉換成前邊的類型。可以在類中定義,也可以在類外定義。

可以使用“==”和equals()方法直接比對枚舉變量的值,換句話說,對于枚舉類型的變量,“==”和equals()方法執行的結果是等價的。

1)定義

enum 類型名 {內容1,內容2,.....內容n};

2)引用

類型名 變量名=類型名.內容

3)遍歷

for( 類型名 變量名:類型名.values()){

System.out.println(變量名); }

?

二、

思考問題二:反碼?原碼和補碼

1 在計算機內,定點數有3種表示法:原碼、反碼和補碼。原碼、反碼、補碼是相對于整數來說,都是8位二進制表示一個數。反碼是數值存儲的一種,但是由于補碼更能有效表現數字在計算機中的形式,所以多數計算機一般都不采用反碼表示數。

1)原碼?

?最高位為符號位;正數最高位為0,負數為1.

范圍 -127~+127

例 +11的原碼是00001011,-11原碼是10001011.

2)反碼

正數的反碼與其原碼相同;負數的反碼是對其原碼逐位取反,但是符號位不變。

范圍

-127~+127

例 +11的反碼是00001011,-11的反碼是11110100

3)補碼

正數的補碼原碼一樣;負數的補碼是在其反碼的末位加一。

范圍-128~+127

例 +11補碼 00001011,-11補碼10000101

2 示例程序

?(-83)+(-80)=?

1 0 1 0 1 1 0 1 B -83 1 0 1 1 0 0 0 0 B -80 0 1 0 1 1 1 0 1 B +93 思考:這兩個題目,按照正常的法則來運算,但結果顯然不正確,這是怎么回事呢? 答案:這是因為發生了溢出。 如果計算機的字長為n位,n位二進制數的最高位為符號位,其余n-1位為數值位,采用補碼表示法時,可表示的數X的范圍是 -2的n-1次冪≤X≤2的n-1次冪-1 當n=8時,可表示的有符號數的范圍為-128~+127。兩個有符號數進行加法運算時,如果運算結果超出可表示的有符號數的范圍時,就會發生溢出,使計算結果出錯。很顯然,溢出只能出現在兩個同符號數相加或兩個異符號數相減的情況下。 對于加法運算,如果次高位(數值部分最高位)形成進位加入最高位,而最高位(符號位)相加(包括次高位的進位)卻沒有進位輸出時,或者反過來,次高位沒有進位加入最高位,但最高位卻有進位輸出時,都將發生溢出。因為這兩種情況是:兩個正數相加,結果超出了范圍,形式上變成了負數;兩負數相加,結果超出了范圍,形式上變成了正數。 而對于減法運算,當次高位不需從最高位借位,但最高位卻需借位(正數減負數,差超出范圍),或者反過來,次高位需從最高位借位,但最高位不需借位(負數減正數,差超出范圍),也會出現溢出。 在計算機中,數據是以補碼的形式存儲的,所以補碼在c語言的教學中有比較重要的地位,而講解補碼必須涉及到原碼、反碼。 在n位的機器數中,最高位為符號位,該位為零表示為正,為一表示為負;其余n-1位為數值位,各位的值可為零或一。當真值為正時,原碼、反碼、補碼數值位完全相同;當真值為負時,原碼的數值位保持原樣,反碼的數值位是原碼數值位的各位取反,補碼則是反碼的最低位加一。注意符號位不變。

?三、

思考問題三:同名變量的屏蔽原則

1.原則:局部變量的名字和全局變量的名字相同,在局部變量的有效范圍內,全局變量將失去作用。

?2.示例

?

輸出 1,沒有屏蔽,因為不同名。

?輸出2,因為同名,但是在主函數的作用域內,所以以2為主。

?

四、

思考問題四:浮點數在計算機內部的表示方法

1.?為什么用double類型計算得不到數學上的精確結果?

無論是單精度還是雙精度在存儲中都分為三個部分:

  • 符號位(Sign) : 0代表正,1代表為負
  • 指數位(Exponent):用于存儲科學計數法中的指數數據,并且采用移位存儲
  • 尾數部分(Mantissa):尾數部分
  • 這個涉及到二進制與十進制的轉換問題。計算機是二進制的。浮點數沒有辦法是用二進制進行精確表示。我們的CPU表示浮點數由兩個部分組成:指數和尾數,這樣的表示方法一般都會失去一定的精確度,有些浮點數運算也會產生一定的誤差。

    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,后面舍去的位數一定會帶來誤差,無法得到“數學上精確”的結果。

    2.在構建BigDecimal對象時應使用字符串而不是double數值,否則,仍有可能引發計算精度問題。(為什么會這樣呢?)

    ?由于浮點數采用二進制系統表示,而二進制無法精確的表示1/10,好比十進制無法精確表示1/3一樣。因此,對于很多值浮點數都是采用其能夠表示的離目標值近的數來表示,這有可能會在計算中帶來不易察覺的誤差。為了解決基本數據類型浮點數不能進行精確計算的問題,java中專門提供了java.math.BigDecimal類,其提供浮點數的精確計算功能。

    ?

    五、

    思考問題五:

    以下代碼的輸出結果是什么?為什么會有這樣的輸出結果?

    int X=100;
    int Y=200;

    System.out.println("X+Y="+X+Y);
    System.out.println(X+Y+"=X+Y");

    因為第一個輸出 “x+y=” 是以字符形式輸出的,字符和任何數據類型相加都是相連接,形成一個更大的字符串;第二個x和y先做加法運算,再輸出300=x+y。

    ?

    六、

    課后實驗性問題:編寫一個程序,用戶輸入兩個數,求出其加減乘除,并用消息框顯示計算結果。

    1.程序設計思想:首先在框架中輸入兩個字符串,轉化為整形,然后輸入一個符號,利用條件語句判斷它是什么運算符號,計算、輸出結果(符號輸入不符合四則運算的提示錯誤)。

    2.程序流程圖:

    ????????????

    3.源程序:

    ?

    //2016/9/30

    ?

    import?javax.swing.JOptionPane;

    ?

    public?class?Addition {

    public?static?void?main(String[] args) {

    ?

    String firstNumber,secondNumber,sym;

    int?number1,number2;

    float?num;

    ?

    firstNumber?= JOptionPane.showInputDialog("Enter first integer");

    secondNumber?= JOptionPane.showInputDialog("Enter second integer");

    sym?= JOptionPane.showInputDialog("Input the symbol");

    ?

    number1?= Integer.parseInt(firstNumber);

    number2?= Integer.parseInt(secondNumber);

    ?

    if(sym.equals("+"))

    {

    num?= number1?+ number2;

    JOptionPane.showMessageDialog(null,number1?+ "+"?+ number2?+ "="?+ num);

    }

    else?if(sym.equals("-"))

    {

    num?= number1?- number2;

    JOptionPane.showMessageDialog(null,number1?+ "-"?+ number2?+ "="?+ num);

    }

    else?if(sym.equals("*"))

    {

    num?= number1?* number2;

    JOptionPane.showMessageDialog(null,number1?+ "*"?+ number2?+ "="?+ num);

    }

    else?if(sym.equals("/"))

    {

    num?= number1?/ number2;

    JOptionPane.showMessageDialog(null,number1?+ "/"?+ number2?+ "="?+ num);

    }

    else

    {

    JOptionPane.showMessageDialog(null,"Error!");

    }

    }

    }

    4.驗證結果截圖:

    ?

    5.實驗總結:1)在判斷字符中“==”和equals分不太清楚;2)在判斷字符是否相等時,開始用的單引號,后來才反應過來輸入符號時用的是字符串類型,應該改為雙引號。

    最新評論

    評論排行榜

    ?

    轉載于:https://www.cnblogs.com/gxt-/p/5937275.html

    總結

    以上是生活随笔為你收集整理的JAVA作业 02 JAVA语法基础的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。