Welcome to Yumao′s Blog.
java面試編程題(1)
, 2012年06月12日 , Java Language , 评论 在〈java面試編程題(1)〉中留言功能已關閉 ,

心浮氣躁難做題目啊
靜下來總是思路如泉水湧出
題目:
有一個數據文件如下:
1 23 34 17

65 1234 888 -1
….
9999
數據文件都是十進制整數
但是都是隨機無槼律的
並且有可能重復
有可能為負數
每個整數之前以一個或多個空格(Space)
制表符(Tab)或者回車換行符(Enter)分隔

請編寫程序讀取該數據文件中的所有整數
並且其以從大到小的順序
每行一個整數的格式輸出到另一個文件中.

條件:不允許使用StringTokenizer StreamTokernizer類
以及正則表達式regex

本來一道簡單題
被條件限定成爲了體力題.
My Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
 
public class FileFormat {
    public static void main(String[] args) throws IOException {
        FileReader fr = new FileReader("input");
        FileWriter fw = new FileWriter("output");
        ArrayList<integer> list = new ArrayList<integer>();
        boolean flag = false;
        char[] arr = new char[1024];
        int[] arr2 = new int[0];
        fr.read(arr);
        for (int n = 0; n < arr.length; n++) {
            if (arr[n] >= '0' && arr[n] <= '9') {
                arr2 = Arrays.copyOf(arr2, arr2.length + 1);
                arr2[arr2.length - 1] = arr[n] - '0';
                flag = true;
            } else if (arr[n] == '-') {
                arr2 = Arrays.copyOf(arr2, arr2.length + 1);
                arr2[arr2.length - 1] = arr[n];
            } else {
                if (flag) {
                    list.add(toInt(arr2));
                    arr2 = new int[0];
                }
                flag = false;
            }
        }
        Collections.sort(list);
        Collections.reverse(list);
 
        for(int i=0;i<list.size();i++){
            fw.write(String.valueOf(list.get(i))+"n");
        }
 
        fw.close();
        fr.close();
 
        System.out.println("System Complete");
    }
 
    public static int toInt(int[] arr) {
        int sum = 0;
        boolean z = true;
 
        if (arr[0] == '-') {
            for (int i = 1; i < arr.length; i++) {
                sum = sum * 10 + arr[i];
                z = false;
            }
        } else {
            for (int i = 0; i < arr.length; i++) {
                sum = sum * 10 + arr[i];
            }
        }
 
        if (z)
            return sum;
        else
            return sum * (-1);
    }
}
关键字:, , , ,

评论已关闭