分享

第五周:数组

 露石 2015-02-27

5-1数组-1

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

    Scanner in=new Scanner(System.in);

    int x;

    double sum=0;

    int cnt=0;

    int[]numbers=new int[100];//定义数组

    x=in.nextInt();

    while(x!=-1)

    {

        numbers[cnt]=x;//对数组的元素赋值

        sum+=x;

        cnt++;

        x=in.nextInt();

    }

    if(cnt>0)

    {

        double average=sum/cnt;

        for(int i=0;i<cnt;i++)//遍历数组

        {

            if(numbers[i]>average)//使用数组中的元素

            {

                System.out.println(numbers[i]);

            }

        }

        System.out.println(average);

    }

    }

 

 

5-4数组-2

数组

第一种窗口(放东西的东西),特点是:

其中所有的元素具有相同的数据类型:

一旦创建,不能改变大小

数组是一种数据结构,能记录同一各类的多个数据

数组中的每个数据叫作元素

所有的元素具有相同的数据类型

 

数组的引索如果为负数,大于等于数组容量即:创建[4]那么最大就是[3]因为是从[0]开始的。

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

    int[] member=new int[4];

    member[3]=5;

    System.out.println(member[3]);

    }

}

       

报错就是:
public class ArrayIndexOutOfBoundsExceptionextends IndexOutOfBoundsException
用非法索引访问数组时抛出的异常。如果索引为负或大于等于数组大小,则该索引为非法索引。
 

定义数组变量

〈类型〉[]〈名字〉=new<类型>[元素个数]

Int[]grades=new int[100];

Double[]averages=new double[20

元素个数必须是整数

元素个数必须给出

元素个数可以是变量

 

5-1数组-3

有效的下标

最小的下标是0,最大的下标是数组的元素个数减1.

可是编译器不会检查看你是否用了有效的下标

但是如果运行的时候出现了无效的下标,可能会导致程序终止

 

枚举大于平均数的数据的每个数值

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

        Scanner in=new Scanner(System.in);

        int x;

        double sum=0;

        int cnt=0;

        cnt=in.nextInt();

        if(cnt>0)

        {

            int[]number=new int[cnt];

            for(int i=0;i<cnt;i++)

            {

                number[i]=in.nextInt();

                sum+=number[i];

            }

            double average=sum/cnt;

            for(int i=0;i<cnt;i++)

            {

                if(number[i]>average)

                {

                    System.out.println(number[i]);

                }

            }

            System.out.println(sum/cnt);

        }

       

    }

   

}

 

       

 

 

 

 

 

 

每个数组有一个内部成员length,它会告诉你数组元素的数量

For(i=0;i=100;i++)

Sum+=grade[i];

最好是:

For(i=0;i<grade.length;++i)

Sum+=grade[i]

 

在(09)范围输入整数,计算输入的每一个数出现的次数

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

    Scanner in=new Scanner(System.in);

    int x;

    int[]numbers=new int[10];

    x=in.nextInt();

    while(x!=-1)

    {

        if(x>=00 && x<=9)

        {

            numbers[x]++;

        }

        x=in.nextInt();

    }

    for(int i=0;i<numbers.length;i++)

    {

        System.out.println(i+":"+numbers[i]);

    }

    }

   

}

 

直接初始化数组

New创建的数组会得到默认的0

 

直接创建数组

Int[] scores={87,98,69,54,65,76,87,99};

直接用大括号给出数组的所有元素的初始值

不需要给出数组的大小,编译器替你数数

 

 

数组变量都是管理者

数组变量是数组的管理者而非数组本身

数组必须创建出来然后交给数组变量严管理

数组变量之间的赋值是管理权限的赋予

数组变量之间的比较是判断是否管理同一个数组

 

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

    int[]a1={1,2,3,4,5};

    int[]a2=a1;//a1a2都是管理者,不是所有者。都共同管着别的地方的一个数组{1,2,3,4,5}

    for(int i=0;i<a2.length;++i)

    {

        a2[i]++;

    }

    for(int i=0;i<a1.length;++i)

    {

        System.out.println(a1[i]);//输出结果是:2,3,4,5,6

    }

    }

   

}

 

 

复制数组

必须遍历源数组将每个元素逐一拷贝给目的数组

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

         public static void main(String[] args)

         {

         Scanner in=new Scanner(System.in);

         int[]a={1,2,3,4,5};

         int[]b=new int[a.length];

         for(int i=0;i<b.length;i++)

         {

                   b[i]=a[i];           //a+=ba=a+b

         }

         for(int i=0;i<b.length;i++)

         {

                   System.out.println(b[i]);

         }

         System.out.println(a==b);

         }

        

}

 

 

5-2数组计算-2

在一组给定的数据中,如何找出某个数据是否存在?

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

    Scanner in=new Scanner(System.in);

    int[] data={3,2,5,7,4,9,11,34,12,28};

    int x=in.nextInt();

    int loc=-1;

    for(int i=0;i<data.length;i++)

    {

        if(x==data[i])

        {

            loc=i;

            break;

        }

    }

    if(loc>-1)

    {

        System.out.println(x+"是第"+(loc+1)+"");

    }

    }

   

}

 

遍历数组

for(int i=0;i<data.length;i++)

         {

                   if(x==data[i])

                   {

                            loc=i;

                            break;

                   }

         }

通常都是使用for循环,让循环变量i0<数组的length,这样循环体内最大的i正好是数组最大的有效下标

常见错误是:

循环结束条件是<=数组长度,或;

离开循环后,继续用i的值做数组的元素的下标!

 

For-each循环

For(<类型><变量>:<数组>){

}

 

 

 

For(int kdata) 对于data这个数组当中的每一个元素,循环的每一轮把它拿出来作为一个k

public static void main(String[] args)

    {

    Scanner in=new Scanner(System.in);

    int[] data={3,2,5,7,4,9,11,34,12,28};

    for(int k:data)

    {

        k=0;

    }

    for(int k:data)

    {

        System.out.println(k);

    }

    }

上例中说明给k赋值改变不了元素的值    

 

素数表

package hello;

 

import java.util.Scanner;

 

public class Hello

{

 

    public static void main(String[] args)

    {

    int[]primes=new int[50];

    primes[0]=2;

    int cnt=1;

    main_loop:

        for(int x=3;cnt<50;x++)

        {

            for(int i=0;i<cnt;i++)

            {

                if(x%primes[i]==0)

                {

                    System.out.println(x+":"+primes[i]+i);

                    continue main_loop;

                }

            }

            primes[cnt++]=x;

        }

    for(int k:primes)

     {

         System.out.println(k+"");

     } 

    }

   

}

 

构造素数表2

欲构造n以内的素数表

1.    x为2

2.    将2x、3x、4x直至ax<n的数标记为非素数

3.    x为下一个没有被标记为非素数的数,重复2;直到所有的数都已经尝试完毕

构造素数表

欲构造n以内(不含)的素数表

1.    创建primeboolean[n],初始化其所有元素为true,prime[x]true表示x是素数

2.    x=2

3.    如果x是常数,则对于(i=2; x*i<n;i++)prime[i*x]=false

4.    x++,如果x<n,重复3,否则结束。

 

public class Hello

{

 

         public static void main(String[] args)

         {

          boolean[]isprime=new boolean[100];

          for(int i=0;i<isprime.length;i++)

          {

                    isprime[i]=true;

          }

          for(int i=2;i<isprime.length;i++)

          {

                    if(isprime[i])

                    {

                             for(int k=2;i*k<isprime.length;k++)

                             {

                                      isprime[i*k]=false;

                             }

                    }

          }

          for(int i=0;i<isprime.length;i++)

          {

                    if(isprime[i])

                    {

                             System.out.println(i+"");

                    }

          }

         }

        

}

 

5-2数组计算-4

多维数组

In[][] a=new int[3][5]

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多