Java练习:数组

返回 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!需要的位数log 10(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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值