Java practice Arrays类的练习

题目:(来源于how2J 教程)
首先定义一个5X8的二维数组,然后使用随机数填充满。
先把二维数组使用System.arraycopy进行数组复制到一个一维数组
然后使用sort进行排序
最后再复制回到二维数组。

我的代码:

import java.util.Arrays;
public class Hero{
	public static void main(String[] args) {
		int [][] s=new int [5][8];
		int []a=new int[40];
		for(int i=0;i<5;i++)
		{
			for(int k=0;k<8;k++)
			{
				s[i][k]=(int)(Math.random()*100);
				System.out.print(s[i][k]+" ");
			}
			System.out.println();
		}
		System.out.println("\n");
		int n=0;
		for(int i=0;i<5;i++)
		{
			for(int k=0;k<8;k++)
			{
				a[n]=s[i][k];
				System.out.print(a[n]+" ");
				n++;
			}
		}
		System.out.println();
		
		Arrays.sort(a);
		System.out.println();
		
		for(int l=0;l<a.length ;l++)
		{
			System.out.print(a[l]+" ");
		}
		n=0;
		for(int i=0;i<5;i++)
		{
			for(int k=0;k<8;k++)
			{
				s[i][k]=a[n];
				n++;
			}
		}
		System.out.println("\n");
		for(int i=0;i<5;i++)
		{
			for(int k=0;k<8;k++)
			{
		System.out.print(s[i][k]+" ");
			}
			System.out.println();
		}
		
	}
}

另一个Java 学习伙伴的代码(代码来源于how2J 教程):

int value[][] = new int[5][8];
		int res[] = new int[40];
		//填充二维和复制数组并输出二维数组
		for(int i = 0; i < 5; i++){
			for(int j = 0; j  < 8; j++){
				value[i][j] = (int)(Math.random()*100);
				System.out.print(value[i][j] + " ");
			}
			System.out.println(" ");
			System.arraycopy(value[i], 0, res, value[i].length * i, value[i].length);
		}
		//数组排序
		Arrays.sort(res);
		//输出一维数组
		System.out.println("一维数组" + Arrays.toString(res));
		//重填二维数组
		for(int i = 0; i < 5; i++){
			System.arraycopy(res, i * value[i].length, value[i], 0, value[i].length);
		}
		//输出二维数组
		for(int i = 0; i < 5; i++){
			for(int j = 0; j  < 8; j++){
				System.out.print(value[i][j] + " ");
			}
			System.out.println(" ");
		}

这段代码选择了中间段 也就是核心的
我的思路和他一致 就是用System.arraycopy这个方法把二维数组复制到一维数组 之后同样的一维复制到二维 但是忽略了二维数组就是几个一维数组组成的 在码关于System.arraycopy进行复制的代码时候还是按照一般的情况 结果导致编译器报错 ——不能将二维复制到一维这种单个数字的复制
他的这种写法就可以避开这种问题也是用System.arraycopy

代码如下:

System.arraycopy(value[i], 0, res, value[i].length * i, value[i].length);

这里的value[i] 他是将二维数组中包含的一维数组整个挨个挨个直接复制到定义好的一维数组 就不是单个数字复制——
这种写法value[i] [k].

包括以下的重填:

for(int i = 0; i < 5; i++){
			System.arraycopy(res, i * value[i].length, value[i], 0, value[i].length);
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值