java数组的题目_Java中数组相关的一些题目

一、将一个给定的整型数组转置输出,

例如: 源数组,1 2 3 4 5 6

转置之后的数组,6 5 4 3 2 1

在看到这道题时,我首先想到的是,创建一个新数组,通过数组下标把一个数组倒着放到另一个数组中,即int[] arr={1,2,3,4,5,6} int[]  arr1 = new int[6] ,arr1[0]=arr[5],代码如下:

1 //错误示例

2 public classdaozhi_Arrary {3 public static voidmain(String[] args) {4 int[] arr = {1, 2, 3, 4, 5, 6};5 int[] arr1 = new int[6];6 for (int i = 5; i >= 0; i--) {7 for (int j = 0; j <= 5; j++) {8 arr1[j] =arr[i];9 }10 }11 for (int i = 0; i<=5;i++){12 System.out.println(arr1[i]);13 }14 }15 }

写完我发现运行结果和想象中的不太一样,运行结果是:

d8f949f755d8b6178a20c84340e59849.png

然后我就在想,既然这样不行,我以前学过C中的数组倒置,即在原数组中进行数据操作,过程就是折中取半不遍历整个数组了遍历一半,那么就/2就可以 ,但是计算机数数的方法是从0开始的也就是说最后一个值里面是没有任何意义的 ,所以要在最后一个值那-1,且还要定义一个空的变量  因为要用到三步换值(变量) 不定义也可以。代码实现如下;

public classdaozhi2_array {public static voidmain(String[] args) {int[] arr = new int[]{1,2,3,4,5,6};

System.out.print("oldArry:");for(int i = 0;i < arr.length;i++){

System.out.print(arr[i]+" ");

}

System.out.println();for(int i=0;i < arr.length / 2;i++){ //折中取半

int temp =arr[i];

arr[i]= arr[arr.length - 1 -i]; //将数组中后面的数往前面换,也就是,arr[0] = arr[5],arr[1] = arr [4], arr [2]=arr[3],这样就完成数组的倒置,方法更简单

arr[arr.length - 1 -i] =temp;

}

System.out.print("newArry:");for(int i = 0;i < arr.length;i++){

System.out.print(arr[i]+" ");

}

}

运行结果:

c44d42fe6d1287415ce9ccce266dd73d.png

然后我又在瞎想,能不能把这封装在一个方法中,使用的时候调用它,我又做了一边尝试,代码如下:

//代码优化过后

classDaoXv {public void daozhi( int arr[],intsize){for(int i=0;i < arr.length / 2;i++){ //折中取半

int temp =arr[i];

arr[i]= arr[arr.length - 1 -i]; //将数组中后面的数往前面换,也就是,arr[0] = arr[5],arr[1] = arr [4], arr [2]=arr[3],这样就完成数组的倒置,方法更简单

arr[arr.length - 1 -i] =temp;

}

System.out.print("newArry:");for(int i = 0;i < arr.length;i++){

System.out.print(arr[i]+" ");

}

}

}public classdaozhi2_array {public static voidmain(String[] args) {int[] arr = new int[]{1,2,3,4,5,6};

System.out.print("oldArry:");for(int i = 0;i < arr.length;i++){

System.out.print(arr[i]+" ");

}

System.out.println();

DaoXv ax= newDaoXv();

ax.daozhi(arr,6);

}

}

运行结果:

ae803277e97d23fcf15b5f031c196207.png

这样当我每次需要数组倒置的时候只需调用方法,即可,心里美滋滋。至此,数组的导致算是告一段落了。(弊端:只能操作int类型的数组)

二、现在有如下的一个数组:int[] oldArr = {1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} ;要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为:int[] newArr = {1,3,4,5,6,6,5,4,7,6,7,5} ;

我在想,是否能通过if()条件语句进行判断,通过if条件语句判断if(oldArr[i]==0),就把他从数组中剔除出去,实现方法如下:

1 public classdeleat0_array {2 public static voidmain(String[] args) {3

4 int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};5 int n=0; //统计0的个数

6 for(int i=0;i

12 int j=0; //新数组的索引

13 for(int i=0;i

14 if(oldArr[i]!=0){ //假如不等于0

15 newArr[j]=oldArr[i]; //赋值给新的数组

16 j++;17 }18 }19 System.out.println("oldArry length:"+oldArr.length);20 System.out.println("newArry length:"+newArr.length);21 System.out.print("oldArry:");22 for(int k=0;k

31 }32 }

我又在想,是否也能封装在一个方法中,然后代码如下:

1 classDeleatMethod{2 public void method(int oldArr[],intsize){3 int n=0; //统计0的个数

4 for(int i=0;i

10 int j=0; //新数组的索引

11 for(int i=0;i

12 if(oldArr[i]!=0){ //假如不等于0

13 newArr[j]=oldArr[i]; //赋值给新的数组

14 j++;15 }16 }17 System.out.println("oldArry length:"+oldArr.length);18 System.out.println("newArry length:"+newArr.length);19 System.out.print("oldArry:");20 for(int k=0;k

29 }30 }31

32 public classdeleat0_array {33 public static voidmain(String[] args) {34

35 int[] oldArr={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};36 DeleatMethod dm= newDeleatMethod();37 dm.method(oldArr,oldArr.length);38 }39 }

运行结果:

944ca8ea88ab32abd9db9662d7f8ce04.png

不出所料,能实现这种方法。

三、现在给出两个数组:

数组a:"1,7,9,11,13,15,17,19"

数组b:"2,4,6,8,10"

两个数组合并为数组c。

public classhebing {public static voidmain(String args[]) {int a[] = { 1,7,9,11,13,15,17,19};int b[] = { 2,4,6,8,10};int m=a.length+b.length;int[] c = new int[m];int num = 0; //定义一个标识,让下一个数组赋值时可以知道上一个数组的长度,和从哪里开始赋值

for (int i = 0; i < a.length; i++) {

c[i]=a[i];

num++;

}for (int j = 0; j < b.length; j++) {

c[num++] =b[j];

}

System.out.print("数组a:");for (int i = 0; i < a.length; i++){

System.out.print(a[i]+" ");

}

System.out.println();

System.out.print("数组b:");for (int i = 0; i < b.length; i++){

System.out.print(b[i]+" ");

}

System.out.println();

System.out.print("重组数组:");for (int i = 0; i < c.length; i++)

System.out.print(c[i]+ " ");

}

}

运行结果:

f72563aec54825ed316b8faa030c2159.png

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值