Java练习:数组

来源:互联网 发布:侠客岛 知乎 编辑:程序博客网 时间:2024/04/28 11:58

返回 Java编程练习目录

《编程导论(Java)·5.3数组》介绍了Java数组的知识,我们现在需要用足够的代码练习数组的使用。

几个要点:

  • Zero-based indexing.数组的元素不能够自由的命名;通过下标 (index)被自动编号为arr[0]到arr [arr.length -1]。
  • 数组是隐含的类,任意数组都是Object的子类。有公有成员变量length;数组的元素相当于数组的成员变量,被系统自动(至少)默认初始化。
  • 数组的遍历:传统for语句或for-each语句

1.初始化、遍历

随机值初始化两个长度为n的数组,操作一下。
package dataStructures.array;import static tips.Print.*;/** * ArrayBasic.java: * 演示array的各种基本语法。 * @author (yqj2065)  * @version (0.1) */public class ArrayBasic{      public static void opArrays(int n){        int[] a = new int[n];        int[] b = new int[n];         for (int i = 0; i <n; i++) {            a[i] =(int)(n * Math.random());            b[i] =(int)(n * Math.random());        }        pln(a);pln(b);        int max =0;        for(int x: a){            if (x > max) max = x;        }        pln("max in array a = "+ max);        double sum = 0.0;        for (int x : b) {            sum += x;        }        pln("average of array b = "+ sum /n);            }}
[4, 2, 2, 2, 3]
[0, 0, 2, 2, 4]
max in array a = 4
average of array b = 1.6
大量练习参见第11章排序。

2.大数的阶乘

以一定长度的int数组a保存阶乘得数的每一位,a[0]保存最高位,a[n-1]保存个位。
注:n!需要的位数log10(n!)  取整加1。
package dataStructures.array;public class Factorial4Big{         static void factorial( int n ){        int len = len(n);//n!的位数        int[] a = new int[len];                int h_digit = len-1;//最高位指针        a[h_digit] = 1;        for (int i=2;i<=n;i++){//阶乘            for (int k = h_digit; k<len; k++){//i乘以a各有效位数的元素                a[k] *= i;            }                        for (int k = len-1;k>=h_digit;k--) {//进位                if (a[k]>10){                    a[k-1] += a[k] / 10;                    a[k] = a[k] % 10;                    if (k-1<h_digit) h_digit--;                }            }        }        for (int i=h_digit; i<len; i++){//打印            System.out.print(a[i]);        }        System.out.print(" "+len);    }    // n!需要的位数。    static int len(int n){        double x = 0;         for(int i=1; i<=n; i  ++) {             x += Math.log10(i);        }        return (int)Math.floor(x)+1;    }   }
50000! = 334732…0000  213237 //要运行较长时间。


0 0
原创粉丝点击