java第二次作業

Y_su_hang發表於2020-12-09

eclipse使用

新建專案

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
填名字後直接完成,其他不要動

在這裡插入圖片描述
src存放java程式碼

新建包

java包是專門用來存放類的
相同的類放在相同包中

在這裡插入圖片描述
或者
在這裡插入圖片描述

新建類

在這裡插入圖片描述

或者
在這裡插入圖片描述
在這裡插入圖片描述
直接寫名字 完成
在這裡插入圖片描述
這樣新建的類 首行會多出一句 包宣告
包宣告只能位於java原始檔首行

匯入包

import 包名.類名

匯入包所有類

import 包名.*

eg:

 import java.util.Scanner

執行

在這裡插入圖片描述

P336_7

題目:

編寫Temperature類,表示攝氏度、華氏度溫度。浮點數表示溫度,字元表示單位,C表示攝氏度,F表示華氏度。
該類包含

  • 4個構造器:針對度數、針對單位、同時針對度數和單位、預設構造器
    對於每個構造器,沒有指定值,預設為0度,沒有單位,預設為攝氏度

  • 2個訪問器方法:返回攝氏度溫度、返回華氏度溫度。度數四捨五入到0.1度

  • 3個設定方法:設定度數、設定單位、同時設定

  • 3個比較方法:測試兩個溫度是否相等、是否比另一個高、是否比另一個低

編寫驅動程式,測試所有方法。呼叫每個構造器、針對每個比較方法,測試一個為真,一個為假,測試0.0 C 與 32 F、-40 C與-40 F、100C與212 F相等性

攝氏溫度c ,將其轉化為華氏溫度f ,轉換公式為:f=c*9/5+32.

構造器

構造器:構造方法是一個在建立物件時被自動呼叫的特殊方法

double精度設定

兩種方法
1.

Double result = Double.valueOf(String.format("%.1f", 5 * (tem - 32) / 9 ));
 String result = String.format("%.1f", tem);
 return Double.parseDouble(result.toString());

    public double getTemC() {
        if (unit != "C"){
            //String result = String.format("%.1f", 5 * (tem - 32) / 9);
            Double result = Double.valueOf(String.format("%.1f", 5 * (tem - 32) / 9 ));

            //return Double.parseDouble(result.toString());
            return result;
        }else {
            String result = String.format("%.1f", tem);
            return Double.parseDouble(result.toString());
        }

    }

Double.parseDouble :轉換成Double格式

程式碼:

Temperature

package java第二次作業;

public class Temperature {
    public double tem;//溫度
    public String unit;//單位
    
    //4個構造器
    public Temperature(double a){
        tem = a;
    }

    public Temperature(String a){
        unit = a;
    }

    public Temperature(double a,String b){
        tem = a;
        unit = b;
    }

    public Temperature(){
        tem = 0;
        unit = "C";
    }
    
    //2個訪問器方法
    public double getTemC() {
        if (unit != "C"){
        	Double result = Double.valueOf(String.format("%.1f", 5 * (tem - 32) / 9));
            return result;
        }else {
        	Double result = Double.valueOf(String.format("%.1f", tem));
            return result;
        }
    }

    public double getTemF() {
        if (unit != "F") {
        	Double result = Double.valueOf(String.format("%.1f", (9 * tem / 5) + 32));
            return result;
        }else{
        	Double result = Double.valueOf(String.format("%.1f", tem));
            return result;
        }
    }

        
    //3個設定方法
    public void setTem(double tem) {
        this.tem = tem;
    }
    
    public void setUnit(String unit) {
        this.unit = unit;
    }

    public void setBoth(double tem,String unit){
        this.tem = tem;
        this.unit = unit;
    }

    //3個比較方法
    public boolean equal(Temperature a) {
        tem = getTemC();
        double t = a.getTemC();
        return tem == t;
    }

    public boolean higher(Temperature a) {
        tem = getTemC();
        double t = a.getTemC();
        return tem > t;
    }

    public boolean lower(Temperature a) {
        tem = getTemC();
        double t = a.getTemC();
        return tem < t;
    }
}

錯誤的Temperature

    public boolean lower(Temperature a) {
        tem = getTemC();
        a.tem = a.getTemC();
        return tem < a.tem;
    }
    a.tem = a.getTemC();

這樣寫會改變a的tem值,所以不能這樣寫
要設成一個區域性值

p336_7

package java第二次作業;

public class p336_7 {
    public static void main(String[] args) {
    	//構造器
        Temperature t1 = new Temperature(32);
        Temperature t2 = new Temperature("C");
        Temperature t3 = new Temperature(100,"C");
        Temperature t4 = new Temperature();
        
        //設定方法
        t2.setTem(-40);
        t1.setUnit("F");        
        t4.setBoth(120,"F");
  
        //訪問器
        System.out.println("------訪問器------");
        System.out.println("32 °F = " + t1.getTemC() + " °C");
        System.out.println("-40 °C = "  + t2.getTemF() + " °F");     


        //比較方法
        System.out.println("------比較方法------");        
        Temperature t5 = new Temperature(-40,"F");
        Temperature t6 = new Temperature(212,"F");
        Temperature t7 = new Temperature();//0 °C
        

        System.out.println("equal:");  
        System.out.println("0.0°C = 32.0°F :" + t7.equal(t1)); 
        System.out.println("-40.0°C = -40.0°F :" + t2.equal(t5)); 
        System.out.println("100.0°C = 212.0°F :" + t3.equal(t6));
        System.out.println("0.0°C = -40.0°F:" + t7.equal(t5)); 
        
        System.out.println("\nhigher:");  
        System.out.println("0.0°C > 212.0°F :" + t7.higher(t6)); 
        System.out.println("0.0°C > -40.0°F:" + t7.higher(t5)); 
       
        System.out.println("\nlower:");          
        System.out.println("0.0°C < 212.0°F :" + t7.lower(t6));  
        System.out.println("0.0°C < -40.0°F:"  + t7.lower(t5)); 
    }
}

結果:
在這裡插入圖片描述

p689_5

題目:

編寫一個程式,使用一個HashMap來計算使用者輸人的正數的直方圖。這個HashMap的鍵應該是輸入的數字,而值應該是到目前為止對應的鍵已經輸入的次數。將-1用作哨兵值,表示使用者輸入結東。例如,如果使用者輸人:

5 12 3 5 5 3 21 -1
這個程式應該輸出下面的內容(不一定按照下面的順序):
The number 3 occurs 2 times.

The number 5 occurs 3 times.

The number 12 occurs 1 times.

The number 21 occurs 1 times.

程式碼

參考程式碼:
使用java的hashmap統計輸入的單詞個數

用hashmap:

package java第二次作業;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
import java.util.Scanner;
 
public class p689_5 {
 
	public static void main(String[] args) {
		HashMap<String, Integer> words = new HashMap<>();
		System.out.println("請輸入要統計的正數(輸入-1結束輸入,一個正數一行):");
		Scanner in = new Scanner(System.in);
		String word;
		while (!((word = in.nextLine()).equals("-1"))) {//如果輸入為-1的時候終止輸入
			int count = 1;//預設一個數字就是出現一次
			if (words.containsKey(word)) {//判斷剛輸入的數字是否已經存在
				count = words.get(word) + 1;//如果已經存在,新的個數就在已有的個數上加1
			}
			words.put(word, count);//更新資料
		}
		in.close();
 

		//遍歷hashmap
		Iterator<Entry<String, Integer>> iterator = words.entrySet().iterator();
		while (iterator.hasNext()) {
			Entry<String, Integer> entry = (Entry<String, Integer>) iterator.next();
			System.out.println("The number " + entry.getKey() + " occurs "  + entry.getValue() + " times");
		}
	}
}

在這裡插入圖片描述
用列表做:

import java.util.Scanner;
import java.util.ArrayList;

public class p689_5_2 {
    public static void main(String[] args) {
        @SuppressWarnings("resource")
		Scanner sc = new Scanner(System.in);
        ArrayList<Integer> List = new ArrayList<Integer>();
        while (true) {
            int digit = sc.nextInt();
            if(digit == -1)
                    break;
            else
                List.add(digit);
        };

        ArrayList<Integer> list = new ArrayList<Integer>();
        ArrayList<Integer> count = new ArrayList<Integer>();

        while (true) {
            if(List.size()==0)
                break;

            int x = (int) List.get(0);

            int num = 0;
            for(int i = List.size()-1;i>=0;i--){
                if((int)List.get(i) == x){
                    num++;
                    List.remove(i);
                }
            }
            list.add(x);
            count.add(num);
            System.out.println("The number "+x+" occurs "+num+" times.");
        };        
    }
}