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]
在(0至9)范围输入整数,计算输入的每一个数出现的次数 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;//a1和a2都是管理者,不是所有者。都共同管着别的地方的一个数组{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+=b即a=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循环,让循环变量i从0到<数组的length,这样循环体内最大的i正好是数组最大的有效下标 常见错误是: 循环结束条件是<=数组长度,或; 离开循环后,继续用i的值做数组的元素的下标!
For-each循环 For(<类型><变量>:<数组>){ … } For(int k:data) 对于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. 创建prime为boolean[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] |
|