1. 程式人生 > >《Java技術》第一次作業

《Java技術》第一次作業

排序 ner day markdown 實驗 1.0 path環境變量 java技術 冒泡排序法

(一)、學習總結
1.在java中通過Scanner類完成控制臺的輸入,查閱JDK幫助文檔,Scanner類實現基本數據輸入的方法是什麽?不能只用文字描述,一定要寫代碼,通過具體實例加以說明。
文本掃描類Scanner(java.util.Scanner),可以使用不同的next方法將輸入的文本轉換為不同類型的值。
獲取基本類型數據的方法是:
nextInt():讀取整型數據
nextDouble():讀取雙精度性數據
next():讀取輸入的下一個單詞(空格作為分隔符)
nextLine():讀取輸入的下一行內容

import java.util.Scanner;
public class Test{
    public static void main(String[]args){
        Scanner input=new Scanner(System.in);
        ...
    }
}

2.Random類和Math類的random()方法都能產生隨機數,這兩種方式有什麽區別,各有什麽特點呢?查閱JDK幫助文檔,並舉例加以說明。

util的random是一個類:包含nextInt(),nextDouble ()等類似的方法。math的random只是一個方法:返回帶正號的 double 值,該值大於等於 0.0 且小於 1.0。

例如,對比兩種方法產生的隨機數:

import java.util.Random;
public class Demo{
    public static void main(String args[]){
        Random a=new Random();
        int a1=a.nextInt();
        double b=Math.random(); 
        System.out.println("這是調用Random()類產生的隨機數");
        System.out.println(a1);
        System.out.println("這是調用Math.random()方法產生的隨機數");
        System.out.println(b);
    }
}

技術分享圖片

使用Math.Random()的方法來產生Int類型的隨機數,例如產生一個0~100之間的隨機數:

import java.util.Random;
public class Demo{
    public static void main(String args[]){
        Random a=new Random();
        int b=a.nextInt();
        int c=(int)(Math.random()*100); 
        System.out.println("這是調用Random()類產生的隨機數");
        System.out.println(b);
        System.out.println("這是調用Math.random()方法產生的隨機數");
        System.out.println(c);
    }
}

技術分享圖片

兩種方法都能夠起到相同的作用,但是,如果許多線程需要以極高的速率生成偽隨機數,那麽Math.random()可能會減少每個線程對擁有自己偽隨機數生成器的爭用。所以很多應用程序會發現 Math.random() 方法更易於使用。

3.運行下列程序,結果是什麽?查閱資料,分析為什麽。

public class Test {
    public static void main(String args[]) { 
        double a = 0.1;
        double b = 0.1;
        double c = 0.1;
        if((a + b + c) == 0.3){
            System.out.println("等於0.3");
        }else {
            System.out.println("不等於0.3");
        }
    }     
}

該程序運行結果為:不等於0.3

原因:浮點型數據在進行運算時有極小誤差。

為了處理精度損失的問題,可以使用java.math.BigDecimal類,查閱JDK幫助文檔或教材p378,對上述程序進行修改。

import java.math.BigDecimal;
import java.math.MathContext;
public class Test {
       public static void main(String args[]) { 
           BigDecimal a = new BigDecimal(0.1);
           BigDecimal b = new BigDecimal(0.1);
           BigDecimal c = new BigDecimal(0.1);
            if(a.add(b).add(c).round(new MathContext(1)).equals(new BigDecimal("0.3"))){
                System.out.println("等於0.3");
            }else {
                System.out.println("不等於0.3");
            }
        }
    }

以上程序輸出結果為:等於0.3

4.在環境配置中,PATH和CLASSPATH、JAVA_HOME的作用:
- 1). PATH環境變量。作用是指定命令搜索路徑,在i命令行下面執行命令如javac編譯java程序時,它會到PATH變量所指定的路徑中查找看是否能找到相應的命令程序。我們需要把jdk安裝目錄下的bin目錄增加到現有的PATH變量中,bin目錄中包含經常要用到的可執行文件如javac/java/javadoc等待,設置好PATH變量後,就可以在任何目錄下執行javac/java等工具了。
- 2). CLASSPATH環境變量。作用是指定類搜索路徑,要使用已經編寫好的類,前提當然是能夠找到它們了,JVM就是通過CLASSPTH來尋找類的。我們需要把jdk安裝目錄下的lib子目錄中的dt.jar和tools.jar設置到CLASSPATH中,當然,當前目錄“.”也必須加入到該變量中。
- 3). JAVA_HOME環境變量。它指向jdk的安裝目錄,Eclipse/NetBeans/Tomcat等軟件就是通過搜索JAVA_HOME變量來找到並使用安裝好的jdk。

(二)、實驗總結

  • 實驗內容:
    • 1.看商品猜價格及題目擴展
      - 設計思路
      - 首先利用隨機數得到商品的價格,利用循環控制用戶猜價格的次數,定義一個變量保存用戶每次猜價格的得分,再定義一個新的變量保存用戶多次猜價格累計的分數,在一輪猜價格的最後輸出商品的價格,遊戲結束時輸出用戶的總得分和猜價格的次數。
      - 註意
      - 因為用戶輸入是否繼續遊戲指令時是使用字符串類型定義的,所以在比較商品價格大小的時候不能用==,要是用String類的equals方法。str.equals(str1 );
      • 2.萬年歷
        • 設計思路
          • 1)編寫一個方法判斷閏年。
          • 2)根據某年是閏年還是平年編寫一個方法判斷某年某月有多少天。
          • 3)編寫一個方法計算某年某月之前距離1900年1月有多少天。因為每個月的天數都會不一樣,所以要分別判斷某月的天數後再計算距離1900年1月的總天數。
          • 4)編寫一個方法輸出某年某月的日歷。已知一個判斷星期幾的方法:1+totaldays%7的值為1-7時分別為星期一到星期日。
        • 問題
          • 1)輸出日歷判斷是否換行時,要利用距離1900年1月和7的關系。即 1+totaldays%7=?。值為7時換行。
      • 3.評分系統
        • 設計思路
          • 1)用一個二維數組存放每個評委給每個選手的得分。
          • 2)分別用一維數組表示每個選手的最高分,最低分,和去掉一個最高分一個最低分的平均分。
          • 3)使用冒泡 排序法對二維數組的行從高到低排序,得到每一行的最大值最小值分別存放在表示最高分和最低分的一維數組中。
          • 4)利用循環分別計算每個選手的最終得分,存放在平均分數組中。
          • 5)按照從高到低的順序分別輸出每個選手的得分和每個選手的平均分。
        • 問題
          • 1)使用冒泡排序法對二維數組排序是要註意數組越界的問題。
          • 2)利用三層循環對二維數組排序,第一層循環改變行,把二維數組的每一行當做一個一維數組在第二層和第三層循環中使用冒泡排序法對二維數組的每一行排序。
            (三)、代碼托管
    • 碼雲提交歷史截圖
      技術分享圖片

《Java技術》第一次作業