数组高级用法介绍

数组高级用法介绍

今天在《数据结构(java篇)》中看到的一个数组的高级应用,想想当初看数组的时候居然没有想到数组能这么用;现在把代码给出来,由于没有书中提到的ConSoleReader,所以我把代码改了一下,用System.in来接受用户的输入。
+-----------------------------------------Array01.java Code-------------------------------------------+
/**
*title:一维数组的高级用法
*intent:通过一维数组来弥补基本数据类型int等的不足
*cause:由于java中类型的限制,int的范围是-2,147,483,648 到 2,147,483,647 ,有32位
*但是当计算结果超出了该范围,程序就回出错,所以我们这里用数组来弥补这一点。
*explain:先产生一个大小为40的一维数组Data,每当Data[i]的大小大于10就向前面进一位。
*/

import java.io.*;
public class Array01
{
public static void main(String[] args)
throws IOException
{
InputStream in;
int Data[]=new int[40]; //产生大小为40的一维数组
int Digit; //数据位数
int i,j,r,k; //循环记数变量
int n=0; //用户输入
int index;
for(i=1;i<40;i++)
Data[i]=0; //将数组初值设为0
Data[0]=1; //设数组第一位为1;
Data[1]=1; //设数组第二位为1;
Digit=1; //设数据位为1
System.out.println("Enter a number");
in=System.in; //读取用户输入
n=in.read()-48;
index=in.available();
while(index>2){
n=n*10+(in.read()-48);
if(n>35){
System.out.println("sorry,the number is to large");
System.exit(1);
}
index--;
}
for(j=1;j<Digit+1;j++)
Data[j]*=i; //数组中的运算
for(j=1;j<Digit+1;j++){
if(Data[j]>10){
for(r=1;r<Digit+1;r++){
if(Data[Digit]>10)
Digit++; //当数组中的元素值大于10时,位数加1
Data[r+1]+=Data[r]/10; //前一位元素=前一位元素+此位元素值除以10
Data[r]=Data[r]%10; //此位元素值=此位元素值除以10取余数
}
}
}
System.out.print(i+"!=");
for(k=Digit;k>0;k--)
System.out.print(Data[k]);
System.out.println("");
}
}
}
+----------------------------------------------End---------------------------------------------------------------------+
总结一下,这里的重点并不是上面的代码,而是一种思路。人们说学习程序设计的关键就是看人家的代码,我觉得这句话说的很有道理,同一种语言,同一个问题,写出来的解决方法有很多种,但是我们的目的是写出高效的代码,而不是仅仅停留在能解决问题就行了。如果是一开始就学习OOP,就更要注意这一点,由于对程序底层不太了解,很难写出高效的代码,所以我建议在学习OOP的同时多看看数据结构,算法以及编译原理,毕竟代码的效率与编译器有很大的关系。总之一句话:地基不牢,房子是盖不高的。