5-1数组-1
package hello;
import java.util.Scanner;
public class Hello
{
public static voidmain(String[] args)
{
Scanner in=newScanner(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;
importjava.util.Scanner;
public class Hello
{
public static voidmain(String[] args)
{
Scanner in=newScanner(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;
importjava.util.Scanner;
public class Hello
{
public static voidmain(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 voidmain(String[] args)
{
Scanner in=newScanner(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);
}
}
在一组给定的数据中,如何找出某个数据是否存在?
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(inti=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 voidmain(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);
continuemain_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 classHello
{
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+"");
}
}
}
}
多维数组
In[][] a=new int[3][5]
联系客服