Java学习第六节数组
【摘要】 问题:把用户输入的数字中比平均数大的数字输出创建数组int[] number=new int[100];package input;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner in= new Scanner(System.in); int user...
问题:把用户输入的数字中比平均数大的数字输出
创建数组
int[] number=new int[100];
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int users_input=in.nextInt();
int[] number=new int[100];//这个程序是危险的,如果输入的数据大于100个,程序就会报错
int sum=0;
int cnt=0;
while(users_input!=-1) {
sum+=users_input;
number[cnt++]=users_input;
users_input=in.nextInt();
}
if(cnt>0) {
for(int i=0;i<cnt;i++) {
if(number[i]>(sum/cnt*1.0))
System.out.println(number[i]);
}
}
}
}
数组:数组是一个容器
- 所以元素都有同样的类型
- 一旦创建,不能改变大小
定义数组变量
- <类型>[] <名字>= new <类型>[元素个数]
new创建的数组会得到默认的0值 - 元素个数必须是整数
- 元素个数必须给出
- 元素个数可以是变量
数组的元素通过索引或下标访问。
编译器不会检查是否用了有效的下标。
如果运行的时候出现了无效的下标,可能会导致程序终止。
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int users_input=in.nextInt();
int[] number=new int[cnt];//这里是不行的,是错误的,运行不了
int cnt=0;
cnt=in.nextInt();//用户有多少个数字要读进来
int sum=0;
if(cnt>0) {
for(int i=0;i<cnt;i++)
{
number[i]=in.nextInt();
sum+=number[i];//输入的数据都加进来
}
for(int i=0;i<cnt;i++) {
if(number[i]>(sum/cnt*1.0))
System.out.println(number[i]);
}
}
}
}
length:每个数组都有一个内部成员length,length是数组元素的数量。
for(i=0;i<number.length;i++)
sum+=number[i];
使用这个number.length的好处是使得代码具有可扩展性。代码不需要修改就可适应于今后的使用。
数组变量
int [] scores={1,2,3,4,5};
这时候不用给出数组的大小,编译器会给我们数出来的。
普通变量:
int i=5;
i 里面放的就是5;i是5这个数字的所有者
数组:
int [] a=new int [10];
a是10个数组的管理者,a里面没有数据。
new:在某个地方制造出一个东西。
int[] a=new int[10];
a[0]=5;
int[]b=a;
b[0]=16;
System.out.print(a[0]);
b也是管理者, b=a 这个赋值是让a和b这两个管理者同时管理这些数据。b[0]=16是把这个数组的第一个元素变成了16,这个数组的第一个元素即是a[0]又是b[0]。
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int [] a1= {1,2,3,4,5};
int [] a2=a1;//共同管理
for(int i=0;i<a2.length;i++)
a2[i]++;//元素加一
for(int i=0;i<a1.length;i++)
System.out.print(a1[i]);
}
}
数组变量
- 数组变量是数组的管理者而非数组本身
- 数组必须创建出来然后交给数组变量来管理
- 数组变量之间的赋值是管理权限的赋予
- 数组变量之间的比较是判断是否管理同一个数组
复制数组:使用遍历的方法把数组中的元素进行逐个的拷贝
package input;
import java.util.Scanner;
public class Main{
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<a.length;i++)
b[i]=a[i];
}
}
数组下标的使用
投票统计:输入不确定范围的【0,9】内的整数,统计每一种数字出现的次数,输入-1表示结束。
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int x;
int [] number= new int[10];//表示数字出现了多少次
x=in.nextInt();
while(x!=-1) {
if(x>=0&&x<=9) {
number[x]++;
}
x=in.nextInt();
}
for(int i=0;i<number.length;i++)
System.out.println(i+":"+number[i]);
//下标是用来标记的,下标对应的那个内存里存的是这个数字的个数
}
}
遍历数组
//线性搜索
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
int [] data= {3,2,5,7,4,9,11,3,4,12,28};
int x=in.nextInt();
int loc=-1;
for(int i=0;i<data.length;i++) {
if(x==data[i])
loc=i;
}
if(loc!=-1)
System.out.print(x+"在第"+(loc+1)+"个");
//这个+不是计算的,是做字符串的连接的。所以loc+1要加括号,否则它就会把loc当成一个字符串,然后做字符串的连接,就不是数字的加了
else
System.out.print(x+"不在里面");
}
}
常见错误
- 循环结束条件是<=数组长度
- 离开循环后,继续用i的值来做数组元素的下标
FOR-EACH循环
for(int k:data)
//k依次等于data中的元素,从第一个到最后一个
//很适合遍历,可以给数组赋值
//但是就是每次不知道是数组中的那个元素
//这个循环是c语言中没有的
//是值的关系,不是具体的存储位置的对应关系
判断素数
for(int i=3;i<Math.sqrt(x);i+=2) {
if(x%i==0) {
isPrime=false;
break;
}
}
构造素数表
- 构造n以内(不含)的素数表
- 创建prime为Boolean[n],初始化其所有元素为true,prime[x]为true表示x是素数
- 令x=2
- 如果x是素数,则对于(i=2;xi<n;i++),令prime[ ix ]=false
- 令x++,如果x<n,重复3,否则结束
package input;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in= new Scanner(System.in);
boolean[] isPrime=new boolean[100];
for(int i=2;i<isPrime.length;i++) {
isPrime[i]=true;//new的数据默认是0,我们把它们初始化为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]) {//剩下的都是true
System.out.print(i+" ");
}
}
System.out.println();
}
}
二维数组
int[][] a=new int[3][5];//创建一个二维数组
编译器会自己数有几个元素
二维数组的初始化a[0][0] | a[0][1] | a[0][2] | a[0][3] | a[0][4] |
a[1][0] | a[1][1] | a[1][2] | a[1][3] | a[1][4] |
a[2][0] | a[2][1] | a[2][2] | a[2][3] | a[2][4] |
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)