求平均数并打印出大于平均数的数
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
int x;
int [] numbers = new int [100];
//定位数组并创建了数组
double sum = 0;
int cnt = 0;
x = in.nextInt();
while ( x != -1 )
{
numbers [cnt] = x;
// numbers[0] = 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(sum/cnt);
}
}
数组是一种容器,特点是
1.其中所有的元素具有相同的数据类型;
2.一旦创建,不能改变大小数组是一种数据结构,能记录同一种类型的多个数据
1.数组中的每个数据叫做元素;
2.所有的元素具有相同的数据类型
定义数组变量
<类型>[]<名字>=new <类型>[元素个数];
int[] grades = new int[100];
double[] averages = new double [20];
元素个数必须是整数;
元素个数必须给出;元素个数可以是变量
int[] a = new int[10]
创建了一个int型的数组
10个元素:a[0],a[1],...,a[9]
每个元素是一个int 的变量
可以读和写:a[2] = a[1] +6;
有效的下标
最小的下标是0,最大的下标是数组的元素个数-1;编译器不会检查看你是否使用了有效的下标;
运行时出现了无效的下标,程序会终止进行
根据上面对程序加以更改
改为先让用户输入我们要输入多少个数字,然后在进行其他计算 public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
double sum = 0;
int cnt = 0;
cnt = in.nextInt();
if (cnt>0)
{
int[] numbers = new int[cnt];
for (int i = 0; i<cnt; i++)
{
numbers[i] = in.nextInt();
sum += numbers[i];
}
double average = sum/cnt;
for ( int i = 0; i<cnt; i++ )
{
if ( numbers[i] > average)
{
System.out.println(numbers[i]);
}
}
}
}
投票系统
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>=0 && 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 = {1,2,3,6,76,8,,3,2,34,243};
直接用大括号给出的数组的所有元素的初始值;
不需要给出数组的大小,编译器用length得到
数组变量
数组变量是数组的管理者而非数组本身
数组必须创建出来然后交给数组变量来管理
数组变量之间的赋值是管理权限的赋予
数组变量之间的比较是判断是否管理同一个数组
遍历数组
通常都是使用for循环,让循环变量i从0到<数组的length,这样循环体内最大的i正好是数组最大的有效下标常见的错误是:
1.循环结束条件是<=数组长度
2.离开循环后,继续用i的只来做数组元素的下标
for-each
{
...
}
判断是否能被已知的且<的素数整除
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
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)
{
continue MAIN_LOOP;
}
}
primes[cnt++] = x;
}
for (int k:primes)
{
System.out.print(k+" ");
}
}
打印前100个素数
遍历数组为true然后每个数的倍数都标记为falsepublic static void main(String[] args)
{
Scanner in = new Scanner(System.in);
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=2;i<isPrime.length;i++)
{
if(isPrime[i])
{
System.out.print(i+" ");
}
}
}
二维数组
int[][] a = new int[3][5]
通常理解为a是一个3行5列的矩阵
for ( i=0; i<3; i++)
{
for ( j=0; j<5; j++)
{
a[i][j] = i*j;
}
}
int[][] a = {
{1,2,3,4},
{1,2,3},
};
编译器来数数,每行一个{}分开