顯示具有 陣列 標籤的文章。 顯示所有文章
顯示具有 陣列 標籤的文章。 顯示所有文章

2015年7月22日 星期三

Java 練習(13):三維陣列2

Java 7 教學手冊第五版 第六章習題

13.有一三維陣列,表示R、G、B
{{{18, 172, 127}, {89, 133, 136}, {175, 8, 43}},
{{234, 224, 113}, {128, 151, 40}, {34, 48, 75}},
{{141, 28, 192}, {127, 40, 234}, {131, 228, 98}}}

(a)請以一個三維陣列顯示
(b)將畫素中的r值加30,若加30後的值超過255,則以255取代之
(c)將畫素中的g值減30,若減30後的值小於0,則以0取代之


 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
67
68
69
70
71
public class app6 {

    int array[][][] = {{{18, 172, 127}, {89, 133, 136}, {175, 8, 43}}, {{234, 224, 113}, {128, 151, 40}, {34, 48, 75}}, {{141, 28, 192}, {127, 40, 234}, {131, 228, 98}}};

    public static void main(String[] args) {
        app6 app = new app6();
        app.print();
        System.out.println("--------------------");
        app.addr();
        System.out.println("--------------------");
        app.addg();
    }

    private void print() {
        for (int i = 0; i < array.length; i++) {
            System.out.print("{");
            for (int j = 0; j < array[i].length; j++) {
                System.out.print("{");
                for (int k = 0; k < array[i][j].length; k++) {
                    System.out.print(array[i][j][k] + ",");
                }
                System.out.print("\b}");
            }
            System.out.print("},\n");
        }
    }

    private void addr() {
        int sum[] = {0, 0, 0};
        for (int i = 0; i < array.length; i++) {
            System.out.print("{");
            for (int j = 0; j < array[i].length; j++) {
                System.out.print("{");
                for (int k = 0; k < array[i][j].length; k++) {
                    sum[k] = array[i][j][k];
                    if (k == 0) { //r的值要+30
                        sum[0] = array[i][j][k] + 30;
                        if (sum[0] > 255) {
                            sum[0] = 255;
                        }
                    }
                    System.out.print(sum[k] + ",");
                }
                System.out.print("\b}");
            }
            System.out.print("},\n");
        }
    }
    
     private void addg() {
        int sum[] = {0, 0, 0};
        for (int i = 0; i < array.length; i++) {
            System.out.print("{");
            for (int j = 0; j < array[i].length; j++) {
                System.out.print("{");
                for (int k = 0; k < array[i][j].length; k++) {
                    sum[k] = array[i][j][k];
                    if (k == 1) { 
                        sum[1] = array[i][j][k] - 30;
                        if (sum[1] <0) {
                            sum[1] =0;
                        }
                    }
                    System.out.print(sum[k] + ",");
                }
                System.out.print("\b}");
            }
            System.out.print("},\n");
        }
    }
}

Java 練習(12):三維陣列1

Java 7 教學手冊第五版 第六章習題

12.在三維陣列中找出最小值
array[][][] = {{{15, 85, 36}, {30, 14, 37},
                        {47, 23, 96}, {19, 39, 51}},
                      {{22, 16, 51}, {97, 30, 12},
                        {68, 77, 26}, {57, 32, 76}}};
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
int a = Integer.MAX_VALUE;
        int b = 0;
        int c = 0;
        int d = 0;
        int array[][][] = {{{15, 85, 36}, {30, 14, 37}, {47, 23, 96}, {19, 39, 51}}, {{22, 16, 51}, {97, 30, 12}, {68, 77, 26}, {57, 32, 76}}};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                for (int k = 0; k < array[i][j].length; k++) {
                    if (array[i][j][k] < a) {
                        a = array[i][j][k];
                        b = i;
                        c = j;
                        d = k;
                    }
                }
            }
        }
        System.out.println("此三維陣列最小值為array[" + b + "][" + c + "][" + d + "]="+a);

Java 練習(11):二維陣列2

Java 7 教學手冊第五版 第六章習題

9.某一公司有5種產品A、B、C、D、E,單價分別為12、16、10、14、15,該公司有三位銷售員,在某月份的銷售量如下
銷售員1:33、32、56、45、33
銷售員2:77、33、68、45、23
銷售員3:43、55、43、67、65

計算
(a)每一個銷售員的銷售總金額
(b)每一項產品的銷售總金額
(c)銷售總金額最多的銷售員
(b)銷售總金額最多的產品


 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
67
68
69
70
71
public class app6 {

    int price[] = {12, 16, 10, 14, 15};//各產品單價
    int sale[][] = {{33, 32, 56, 45, 33}, {77, 33, 68, 45, 23}, {43, 55, 43, 67, 65}};//各產品銷售

    public static void main(String[] args) {
        app6 app = new app6();
        app.totalsale();//各銷售員銷售總金額
        app.totalpro();//各產品銷售總金額
        app.maxtotalsale();//銷售總金額最好的銷售員
        app.maxtotalpro();//銷售總金額最高的產品

    }

    private void totalsale() {
        for (int i = 0; i < sale.length; i++) {
            int sum[] = {0, 0, 0, 0, 0};
            for (int j = 0; j < sale[i].length; j++) {
                sum[j] += sale[i][j] * price[j];//先將各銷售員的產品*價格金額算出來
            }
            int a = 0;
            for (int k = 0; k < sum.length; k++) {
                a += sum[k];//加總
            }
            System.out.println("銷售員" + (i + 1) + "銷售總金額:" + a);
        }
    }

    private void totalpro() {
        int sum[] = {0, 0, 0, 0, 0};
        for (int i = 0; i < sale.length; i++) {
            for (int j = 0; j < sale[i].length; j++) {
                sum[j] += sale[i][j] * price[j];//依序將每天的時段1~3先加總
            }
        }
        for (int k = 0; k < sum.length; k++) {
            System.out.println("產品" + (k + 1) + "銷售總金額:" + sum[k]);
        }
    }

    private void maxtotalsale() {
        int p = 0;//最好的銷售員
        int max = Integer.MIN_VALUE;
        for (int i = 0; i < sale.length; i++) {
            int sum[] = {0, 0, 0, 0, 0};
            for (int j = 0; j < sale[i].length; j++) {
                sum[j] += sale[i][j] * price[j];//先將各銷售員的產品*價格金額算出來
                if (sum[j] > max) {
                    max = sum[j];
                    p = i;
                }
            }
        }
        System.out.println("最好銷售員:銷售員" + (p + 1) + "號");
    }

    private void maxtotalpro() {
        int p = 0;
        int max = Integer.MIN_VALUE;
        int sum[] = {0, 0, 0, 0, 0};
        for (int i = 0; i < sale.length; i++) {
            for (int j = 0; j < sale[i].length; j++) {
                sum[j] += sale[i][j] * price[j];//依序將每天的時段1~3先加總
                if (sum[j] > max) {
                    max = sum[j];
                    p = j;
                }
            }           
        } System.out.println("銷售總金額最高的產品為:產品" + (p + 1));
    }
}

2015年7月21日 星期二

Java 練習(10):二維陣列1

Java 7 教學手冊第五版 第六章習題

8.下表為某地星期一到星期四的時段一、時段二與時段三的氣溫:
              星期一 星期二 星期三 星期四
時段一  18.2       17.3     15.0       13.4
時段二  23.8       25.1     20.6       17.8
時段三  20.6       21.5     18.4       15.7

請將上表的內容直接於程式中以陣列初值方式設定,並依序完成下列各題:

(a)印出陣列內容
(b)每日的平均溫度
(c)時段一、時段二、時段三的平均氣溫
(d)溫度最高的日子與時段
(e)溫度最低的日子與時段


 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
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
public class app6 {

    double array[][] = {{18.2, 17.3, 15.0, 13.4}, {23.8, 25.1, 20.6, 17.8}, {20.6, 21.5, 18.4, 15.7}};

    public static void main(String[] args) {
        app6 app = new app6();
        app.print();//印出陣列表格
        app.average();//每日平均溫度
        app.averagebytime();//各時段平均溫度
        app.maxdayandtime();//溫度最高
        app.mindayandtime();//溫度最低
    }

    private void print() {
        System.out.println("     星期一 星期二 星期三 星期四");
        for (int i = 0; i < array.length; i++) {
            System.out.print("時段" + (i + 1) + " ");
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j] + "  ");
            }
            System.out.println("");
        }
    }

    private void average() {
        double sum[] = {0, 0, 0, 0};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                sum[j] += array[i][j];//依序將每天的時段1~3先加總
            }
        }
        for (int k = 0; k < sum.length; k++) {
            System.out.println("Day" + (k + 1) + "平均溫度:" + sum[k] / array.length);
        }
    }

    private void averagebytime() {
        double sum = 0;
        for (int i = 0; i < array.length; i++) {
            sum = 0;
            for (int j = 0; j < array[i].length; j++) {
                sum += array[i][j];
            }
            System.out.println("時段" + (i + 1) + "平均溫度:" + sum / array[0].length);
        }
    }

    private void maxdayandtime() {
        int day = 0;
        int time = 0;
        double max = Double.MIN_VALUE;//取預設最低值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                double sum = array[i][j];
                if (sum > max) {
                    max = sum;
                    day = j;//行
                    time = i;//列
                }
            }
        }
        System.out.println("溫度最高的Day" + (day + 1) + "時段" + (time + 1));
    }

    private void mindayandtime() {
        int day = 0;
        int time = 0;
        double min = Double.MAX_VALUE;//取預設最高值
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                double sum = array[i][j];
                if (sum < min) {
                    min = sum;
                    day = j;//行
                    time = i;//列
                }
            }
        }
        System.out.println("溫度最低的Day" + (day + 1) + "時段" + (time + 1));
    }
}

Java 練習(9):一維陣列2

Java 7 教學手冊第五版 第六章習題

3.設計一程式,依照下列需求完成:

  • 宣告並為陣列a的值,陣列a為a[] = {53, 27, 69, 12, 3, 96};
  • 印出陣列a的值
  • 計算陣列a中的奇數和偶數各多少
  • 尋找陣列中奇數的最大值
  • 尋找陣列中偶數的最大值


 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
      int a[] = {53, 27, 69, 12, 3, 96};
        String str = "";
        int odd = 0;//奇數數量
        int even = 0;//偶數數量
        int odd_max = 0;
        int even_max = 0;
        for (int i = 0; i < a.length; i++) {
            str += " " + a[i];
            if (a[i] % 2 == 0) {
                even++;
                if (a[i] > even_max) {
                    even_max = a[i];
                }
            } else {
                odd++;
                if (a[i] > odd_max) {
                    odd_max = a[i];
                }
            }
        }
        System.out.println("陣列為" + str);
        System.out.println("陣列A中奇數有" + odd + "個");
        System.out.println("陣列A中偶數有" + even + "個");
        System.out.println("陣列A中奇數MAX=" + odd_max);
        System.out.println("陣列A中偶數MAX=" + even_max);

Java 練習(8):一維陣列1

Java 7 教學手冊第五版 第六章習題

2.設計一程式,依照下列公式計算sum的值,並將其值印出

sum=a[0]*b[9]+a[1]*b[8]+‧‧‧+a[9]*b[0]
int a[]={18,-51,23,35,10,9,-3,52,81,69};
int b[]={28,32,-35,40,73,17,92,32,13,29};


1
2
3
4
5
6
7
8
       int a[]={18,-51,23,35,10,9,-3,52,81,69};
       int b[]={28,32,-35,40,73,17,92,32,13,29};
       int sum=0;
       for(int i=0;i<a.length;i++){
           int j=(b.length-1)-i;
               sum+=a[i]*b[j];
           }
        System.out.println("sum="+sum);

sum=7226

Java上課練習:陣列

基本陣列語法


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
        ArrayList list = new ArrayList();
        list.add("Java"); // 加入物件
        list.add("C++");
        list.add("Swift");
        list.add(3.14);
        list.add(100);
        System.out.println(list);
        System.out.println("--------------------------------------");
        System.out.println("list.size() = " + list.size());
        Object obj = list.get(2); // 讀取陣列 第2項 物件
        System.out.println("list.get(2) = " + obj);
        System.out.println("--------------------------------------");
        obj = list.remove(2); // 取出陣列 第2項 物件
        System.out.println("list.remove(2) = " + obj);
        System.out.println(list);
        System.out.println("list.size() = " + list.size());

2015年7月8日 星期三

Java:判斷物件是否為陣列

利用getClass().isArray()判斷物件是否為陣列


1
2
3
4
        int[][] array2D={{0,1,2},{3,4,5,6}};
        System.out.print(array2D[0].length+"");
        System.out.print(array2D[1].getClass().isArray()+"");
        System.out.print(array2D[0][1]);

顯示為 3true1

Java:陣列的複製方法

Java有一個System.arraycopy,可以針對陣列進行複製

System.arraycopy(src, srcPos, dest, destPos, length)
src:來源陣列
dest:目標陣列
srcPos:來源陣列的開始位置
destPos:目標陣列的開始位置
length:要複製的陣列長度

1
2
3
4
5
6
7
8
        int[] array={1,2,3,4,5};
        System.arraycopy(array, 2, array, 1, 2);
        //將array第2,3個位置的值(3,4)複製到array第1,2位置
        System.out.println(array[0]);
        System.out.println(array[1]);
        System.out.println(array[2]);
        System.out.println(array[3]);
        System.out.println(array[4]);
原本的array陣列為{1,2,3,4,5},複製後便為{1,3,4,4,5}


Java 1.6版後,Arrays類別中也有陣列複製的method
Arrays.copyOf(src, length)


1
2
3
int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, array1.length-1);
此時array2的陣列為{1,2,3,4}


1
2
3
int array1[] = {1,2,3,4,5};
int array2[];
array2 = Arrays.copyOf(array1, 7);
此時array2的陣列為{1,2,3,4,5,0,0}

參考資料
http://www.inote.tw/java-array-copy