天天看點

IO實戰篇:數字大小比較 | 帶你學《Java語言進階特性》之七十二

上一篇:transient:将屬性脫離序列化 | 帶你學《Java語言進階特性》之七十一

本節将帶着讀者開發實際案例,實作對輸入的數字大小的比較功能,并求出所輸數字的最大值和最小值。

【本節目标】

通過閱讀本節内容,你将複習Scanner的相關知識,結合工廠模式,編寫數字處理相關接口并完成實作,最終實作求出輸入的三個數字的最大值和最小值的功能。

數字大小比較

編寫java程式,輸入3個整數,并求出3個整數的最大值和最小值。

如果要想進行數字的輸入處理,那麼應該保證輸入錯誤的時候可以重新輸入,那麼為了可以達到重用的設計,應該準備一個單獨的輸入資料類。

1、 定義一個輸入工具類

public class InputUtil {
    private InputUtil(){}
    /**
     * 實作鍵盤接收數字的操作
     * @param prompt 提示資訊
     * @return 一個可以使用的數字
     */
    public static int getInt(String prompt){
        int num = 0;
        boolean flag = true; 
        while (flag){
            Scanner input = new Scanner(System.in);
            System.out.print(prompt);  //列印提示資訊
            if(input.hasNext("\\d+")){
                num = Integer.parseInt(input.next("\\d+"));  
                flag = false ;
            }else{
                System.out.println("輸入的内容不是數字!");
            }
        }
        return num ;
    }
}           

或者使用BufferedReader 來定義。

public class InputUtil {
    private InputUtil(){}
    /**
     * 實作鍵盤接收數字的操作
     * @param prompt 提示資訊
     * @return 一個可以使用的數字
     */
    public static int getInt(String prompt){
        BufferedReader buf = new BufferedReader(new InputStreamReader(System.in));
        int num = 0;
        boolean flag = true; 
        while (flag){
            System.out.print(prompt);  //列印提示資訊
            String str = null;
            try{
                str = buf.readLine();
                if(str.matches("\\d+")){
                     num = Integer.parseInt(str);  
                     flag = false ;
                }else{
                     System.out.println("輸入的内容不是數字!");
                }
            }catch(IOException e) {
                System.out.println("輸入的内容不是數字!");
            }
        }
        return num ;
    }
}           

2、 定義資料的輸入處理

public interface INumberService{
    /**
     * 輸入資料并傳回輸入資料的最大值和最小值
     * @param count 表示要輸入資料的個數
     * @return  包含有兩個内容:第一個是最大值,第二個是最小值
     */
    public int[] stat(int count);
}           

3、 定義接口的實作子類

public class NumberServiceImpl implements INumberService{
    @Override
    public int[] stat(int count) {
        int result[] = new int[2];   //定義傳回的結果
        int data[] = new int[count];    //開辟一個數組
        for (int x = 0; x < data.length; x++) {   //數字的循環輸入
            data[x]=InputUtil.getInt("請輸入第""+(x+1)+""個數字:");
        }
        result[0]=data[0];   //最大值
        result[1]=data[0];   //最小值
        for(int x = 0 ;x < data.length; x ++) {
           if(data[x] > result[0]) {
               result[0] = data[x];
           }
           if(data[x] < result[1]) {
               result[1] = data[x];
           }
        }
        return result;
    }
}           

4、 定義工廠類擷取接口對象

public class Factory{
    private Factory(){}
    public static INumberService getInstance(){
        return new NumberServiceImpl();
    }
}             

5、 編寫測試程式類

public class IOCaseDemo{
    public static void main(String[] args) {
        INumberService numberService = Factory.getInstance();
        int result [] = numberService.stat(5);
        System.out.println("最大值:"+ result[0]+ "、最小值:"+ result[1] );
    }
}           
IO實戰篇:數字大小比較 | 帶你學《Java語言進階特性》之七十二

執行結果

想學習更多的Java的課程嗎?從小白到大神,從入門到精通,更多精彩不容錯過!免費為您提供更多的學習資源。

本内容視訊來源于

阿裡雲大學 下一篇:IO實戰篇:檔案儲存 | 帶你學《Java語言進階特性》之七十三 更多Java面向對象程式設計文章檢視此處