java中的数组_Java中的数组

数组是在内存中存储相同数据类型的连续的空间

声明一个数组就是在内存空间中划出一串连续的空间

数组名代表的是连续空间的首地址

通过首地址可以依次访问数组所有元素

元素在数组中的排序叫做下标从零开始

数组的使用

数组长度一旦声明,不可改变不可追加

声明一个int类型的数组

int[ ] arr;   或int arr[ ]

给数组分配空间

arr=new int[5];

给数组赋值

arr[0]=1;      0代表的是数组的第1个元素 ,元素下标为0

arr[1]=1;      1代表的是数组的第2个元素 ,元素下标为1

访问数组数据 ,使用数组下标访问       c=arr[4];

数组声明缩写

int[ ] arr={12,3,4,8,5,6,6,7,8,8,9,8};int [ ] arr1=new int[ ]{12,3,4,8,5,6,6,4};

new int[ ]的[ ]一定不能放内存大小

使用循环给数组赋值

示例为

int[ ] arr=new int[5];for (int i = 0; i < arr.length; i++) {

System.out.println("数组第"+(i+1)+"个值为"+i);

}

1342384-20180330171205289-259568455.png

使用循环遍历给数组赋值,输出数组

实例为

int[ ] arr={1,3,6,5,6,7,84,55,5};for (intnum:arr) {

System.out.println(num);

}

显示结果为

729af929e016a2bcb01fb178cda2fdda.png

数组中常用来排序的两种方法

冒泡排序

例子:

public static void main(String[] args) {

实现学生成绩排序并显示学生成绩列表

int [   ] arr = {78,89,67,98,90,56,88};

N个数的数组,需要比较N-1轮

for(int i=0; iarr[j]){int temp =arr[j];

arr[j]=arr[i];

arr[i]=temp;

}

}

}

冒泡排序   升序排列

for(int i=0; iarr[j+1]){int temp =arr[j];

arr[j]= arr[j+1];

arr[j+1] =temp;

}

}

}

二分法排序

二分法查找

int start = 0;      //默认起始坐标

int end = arr.length-1;     //默认结尾坐标

int index = -1;      //找不到默认index为-1

while(start<=end){int middle = (start+end)/2;     //计算中间下标

if(num ==arr[middle]){

index=middle;break;

}if(num >arr[middle]){

start= middle + 1;

}if(num

end= middle - 1;

}

} System.out.println(index);

}

}

下面是一些实例.

① 做一个购物清单,手动输入金额,输出是要显示总金额

Scanner in=newScanner( System.in);double sum=0;double[ ] arr=new double[5];for (int i = 0; i < arr.length; i++) {

System.out.print("请输入第"+(i+1)+"笔购物金额:");

arr[i]=in.nextDouble();

sum+=arr[i];

}

System.out.println("序号\t\t 金额");for (int i = 0; i < arr.length; i++) {

System.out.println((i+1)+"\t\t"+arr[i]);

}

System.out.println("总金额:"+sum );

}

显示结果为

71076784e6ad069bd4633c4db0ae1963.png

②输入四家店的价格,并找出最小价格

Scanner in=newScanner(System.in);int[] arr=new int[4];

System.out.println("请输入四家店的价格");for (int i = 0; i <4; i++) {

System.out.print("第"+(i+1)+"店的价格为:");

arr[i]=in.nextInt();

}for (int j = 0; j < arr.length-1; j++) {if (arr[j]

arr[j+1]=arr[j];

}else{

arr[j+1]=arr[j+1];

}

}System.out.println("最低价格是:"+arr[3]);

}

显示结果为

efd110a62561e1b0b11145aad31cda68.png

③将一个数组从小到大排列

int[] arr={56,45,99,82,91,81};intmax;intm;for (int i = 0; i < arr.length-1; i++) {for (int j = 0; j < arr.length-1-i; j++) {if (arr[j]>arr[j+1]) {int temp=arr[j];

arr[j]=arr[j+1];

arr[j+1]=temp;

}

}

}

for (int a: arr) {

System.out.println(a);

}

}

}

显示结果为

5925834e4d93497469b1c0d4e4d2d77c.png

④输入一个数字,在数组中查找,若有输出下标,若没有输出-1

Scanner in=newScanner(System.in);int[] arr={12,34,46,68,32,35,75,48,25};

System.out.println("输入一个数字");int sz=in.nextInt();for (int i = 0; i < arr.length; i++) {if (sz==arr[i]) {

System.out.println("数字下标为"+i);return;

}

}

System.out.println("-1");

显示结果为

1342384-20180330175001777-1679184824.png

b3230e4454e8c269a83256c41e33d7d3.png

⑤编写JAVA程序,实现两个数组的合并,并按升序排列合并后的数组

假定现有两个数组,分别为:

int[ ] arr1={3, 1, 23};

int[ ] arr2={27, 7, 2};

设计程序,将两个数组合并成一个数组,并按升序排列合并后的数组,输出合并前和合并后的数组信息

int[ ] arr1 = {3, 1, 23};int[ ] arr2 = {27, 7, 2};int[ ] arr = new int[arr1.length+arr2.length]; //1. 声明一个数组,长度等于两个数组的长度和

for(int i=0; i

arr[i] =arr1[i];

}for(int i=0; i

arr[arr1.length+i] =arr2[i];

}for(int i=0; i

for(int j=0; j arr[ j+1]){int temp =arr[ j ];

arr [ j ]= arr[ j+1];

arr[ j+1 ] =temp;

}

}

}

System.out.println(Arrays.toString(arr));

显示结果为

63c2950cba2bcffa6b6fc6b685988e61.png

⑥用数组,判断一个数字,是不是回文数。

System.out.print("请输入一个数组:");

Scanner in= newScanner(System.in);long num =in.nextLong();long old = num; //暂存num

int count = 0; //num有几位,定义一个几位的数组。 求出num的位数

while(num>0){

num/= 10;

count++;

}int[] arr = new int[count];

count= 0; //不断取出数字的每一位,依次放入数组中

while(old>0){

arr[count]= (int)old % 10;

old/= 10;

count++;

}for(int i=0,j=arr.length-1; i<=j ; i++,j--){ //依次比较数组的首尾。 有任意一位不相等,就不是回文数

if(arr[i] !=arr[j]){

System.out.println("不是回文数");return;

}

}

System.out.println("是回文数");

显示结果为

1d372f276eca65c89864ed3280139d52.png

⑦      输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组

//Scanner in=new Scanner(System.in);//设置输入数组//int [] arr;//System.out.println("输入数组");//for (int i = 0; i < arr.length; i++) {//int arr[i]=in.nextInt();

int [ ] arr = {5,3,7,1,0,6,9,2};int max = arr[0] , maxIndex = 0; //找出最大元素的下标

for(int i=0; i

max=arr[i];

maxIndex=i;

}

}if( maxIndex != 0){int temp = arr[0];

arr[0] =arr[maxIndex];

arr[maxIndex]=temp;

}int min = arr[0] , minIndex = 0; //找出最小元素的下标

for(int i=0; iarr[i]){

min=arr[i];

minIndex=i;

}

}if(minIndex != (arr.length-1)){int temp = arr[arr.length-1];

arr[arr.length-1] =arr[minIndex];

arr[minIndex]=temp;

}

System.out.println(Arrays.toString(arr));

}

显示结果为

1342384-20180330175927217-726798238.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值