3_Java_数组

数组

定义:int[] numbers = new int[100];
一旦创建不能改变大小,其中所有的元素具有相同的数据类型;
元素个数必须给出,元素个数必须是整数,元素个数可以是变量;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int num, sum = 0, count = 0, i = 0;
        int[] number = new int[100];
        while(true)
        {
        	num = in.nextInt();
        	if(num == -1) break;
        	number[i] = num;
        	sum += num;
        	count ++;
        	i ++;
        }
        double ave = sum * 1.0 / count;
        System.out.println(ave);
        for(int j = 0; j < count; j ++)
        {
        	if(number[j] >= ave)
        	{
        		System.out.print(number[j] + " ");
        	}
        }
    }
}
数组的大小可以是变量
package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int num, sum = 0;
        int count = in.nextInt();
        int[] number = new int[count];
        for(int i = 0; i < count; i ++)
        {
        	num = in.nextInt();
        	number[i] = num;
        	sum += num;
        }
        double ave = sum * 1.0 / count;
        System.out.println(ave);
        for(int j = 0; j < count; j ++)
        {
        	if(number[j] >= ave)
        	{
        		System.out.print(number[j] + " ");
        	}
        }
    }
}
数组的大小

int[] number = new int[100];
number.length

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int num, sum = 0;
        int count = in.nextInt();
        int[] number = new int[count];
        for(int i = 0; i < number.length; i ++)
        {
        	num = in.nextInt();
        	number[i] = num;
        	sum += num;
        }
        double ave = sum * 1.0 / count;
        System.out.println(ave);
        for(int j = 0; j < number.length; j ++)
        {
        	if(number[j] >= ave)
        	{
        		System.out.print(number[j] + " ");
        	}
        }
    }
}
数组变量

直接初始化数组
int[] number = {1, 2, 3, 4};
number.length = 4;
number[0] = 1;
number[1] = 2;

注意
package hello;

public class Main{
    public static void main(String[] args){
    	int[] a = {1, 2, 3, 4, 5};
    	int[] b = a;
    	System.out.println(a[2]);
    	b[2] = 0;
    	System.out.println(a[2] + " " + b[2]);
    }
}

实际是让 a 和 b 都管理一个数组,是管理者;

package hello;

public class Main{
    public static void main(String[] args){
    	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 hello;

public class Main{
    public static void main(String[] args){
    	int[] a1 = {1, 2, 3, 4, 5};
    	int[] a2 = a1;
    	System.out.println(a1 == a2);
    	int[] a3 = {1, 2, 3, 4, 5};
    	System.out.println(a1 == a3);
    }
}
/*
true
false
*/

数组变量之间的比较是判断是否管理同一个数组
要是需要判断每个元素,则需要遍历(前提是两个数组相同的长度)

package hello;

public class Main{
    public static void main(String[] args){
    	boolean flag = false;
    	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];
    	}
    	for(int i = 0; i < b.length; i ++)
    	{
    		if(a[i] != b[i])
    		{
    			flag = true;
    			break;
    		}
    	}
    	if(!flag)
    	{
    		System.out.println("相等");
    	}
    	else
    	{
    		System.out.println("不相等");
    	}
    }
}
/*
相等
*/
复制数组

必须遍历

package hello;

public class Main{
    public static void main(String[] args){
    	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];
    	}
    	for(int i = 0; i < b.length; i ++)
    	{
    		System.out.print(b[i] + " ");
    	}
    	System.out.println(a == b);
    }
}
/*
1 2 3 4 5 false
*/
for-each 循环

缺点是不知道数组元素的具体位置;
for-each 循环不能去修改数组,只能读出数组的值;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	boolean flag = false;
    	int[] number = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    	int n = in.nextInt();
    	for(int k : number)
    	{
    		if(k == n)
    		{
    			flag = true;
    			break;
    		}
    	}
    	if(flag)
    	{
    		System.out.println("存在");
    	}
    }
}

下面的操作不能修改数组;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	int[] number = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    	for(int k : number)
    	{
    		k = 0;
    	}
    	for(int k : number)
    	{
    		System.out.print(k + " ");
    	}
    }
}
/*
1 2 3 4 5 6 7 8 9 10
*/
输出素数优化

忽略偶数

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	boolean flag =false;
    	int n = in.nextInt();
    	System.out.print(2 + " ");
    	for(int i = 3; i <= n; i += 2)
    	{
    		flag = false;
    		for(int j = 3; j < i; j += 2)
    		{
    			if(i % j == 0)
    			{
    				flag = true;
    				break;
    			}
    		}
    		if(!flag)
    		{
    			System.out.print(i + " ");
    		}
    	}
    }
}

用 Math.sqrt(x) 缩短时间;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	boolean flag =false;
    	int n = in.nextInt();
    	System.out.print(2 + " ");
    	for(int i = 3; i <= n; i += 2)
    	{
    		flag = false;
    		for(int j = 3; j <= Math.sqrt(i); j += 2)
    		{
    			if(i % j == 0)
    			{
    				flag = true;
    				break;
    			}
    		}
    		if(!flag)
    		{
    			System.out.print(i + " ");
    		}
    	}
    }
}

用已经存在的素数去判断后面的素数;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	boolean flag =false;
    	int cnt = 1;
    	int[] number = new int[50];
    	number[0] = 2;
    	int n = in.nextInt();
    	OUT:
    	for(int i = 3; i <= n; i += 2)
    	{
    		for(int j = 0; j < cnt; j ++)
    		{
    			if(i % number[j] == 0)
    			{
    				continue OUT;
    			}
    		}
    		number[cnt ++] = i;
    	}
    	for(int k : number)
    	{
    		if(k != 0)
    		{
        		System.out.print(k + " ");	
    		}
    	}
    }
}

忽略 2x 3x 4x ……这些,剩余的就是素数;
需要注意的是,新开的数组下标是从 0 开始的,新开的时候就规定就好了,比如新开 10 个,那么下标就是 0 ~9 ,当遍历赋值 1 ~ 10 的时候,实际上没有下标 10 的位置,所以数组越界,要是必须要用到下标 10,则可以多开一个空间,就是 0 ~ 11 ,就有下标 10 了;

这里和 C++ 不同,C++ 会根据提供的范围自动分配;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	int n = in.nextInt();
    	boolean[] number = new boolean[n + 1];
    	for(int i = 2; i <= n; i ++)
    	{
    		number[i] = true;
    	}
    	for(int i = 2; i <= n / 2; i ++)
    	{
    		for(int j = 2; i * j <= n; j ++)
    		{
    			number[i * j] = false;
    		}
    	}
    	for(int i = 2; i <= n; i ++)
    	{
    		if(number[i] == true)
    		{
    			System.out.print(i + " ");
    		}
    	}
    }
}
二维数组

int[][] a = new int[3][5];
读取二维数组的行和列;

package hello;

import java.util.Scanner;

public class Main{
    public static void main(String[] args){
    	Scanner in = new Scanner(System.in);
    	int[][] number = {{1, 2, 3, 4}, {5, 6, 7}};
    	for(int i = 0; i < number.length; i ++)
    	{
    		for(int j = 0; j < number[i].length; j ++)
    		{
    			System.out.print(number[i][j] + " ");
    		}
    		System.out.println();
    	}
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清纯献给了作业

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值