您的位置:

java算法数组平移(java数组左移)

本文目录一览:

Java怎样把数组的元素向左移动?比如把一个数组arr{12 34 45 56 67 78 }移动2次变得45 56 67 78 12 34

当然实现的方法是比较多的,这里给出一种:

//arr循环左移times次

function shiftArr(arr, times){

times = times%(arr.length);//考虑times大于等于length的情况

return arr.slice(times).concat(arr.slice(0, times));

//取出两个子数组然后连接

}

其他的思路有删除arr前若干个元素并添加到其末尾等(参考Array对象的方法)。

如有问题欢迎继续交流!

Java 怎样移动数组的位置~比如1 2 3 4 5 6 移动M位,比如2位,变成3 4 5 6 1 2

import java.util.Scanner;

public class ShuZu_yiwei{

/**

* @param args

*/

public static void main(String[] args) {

// TODO Auto-generated method stub

Scanner input = new Scanner(System.in);

System.out.println("请输入原数组的数组元素,每个数组元素之间用空格隔开:");

String s = input.nextLine();

String []str = s.split(" ");//把字符串s按照空格划分,然后存储到数组str中

System.out.println("请输入要移动的数组元素个数:");

int M = input.nextInt();

String []array = new String[M];

String []barray = new String[str.length-M];

String []carray = new String[str.length];

System.arraycopy(str, 0, array, 0, M);//把原数组的前面M个复制到array中

System.arraycopy(str, M, barray, 0, barray.length);//把原数组的后str.length-M个复制到array中

System.arraycopy(barray,0,carray,0,barray.length);//把原数组的后str.length-M拷贝到目标数组中的前0到str.length-M,

System.arraycopy(array,0,carray,barray.length,array.length);//把原数组前面M个元素拷贝目标数组的后str.length-M到str.length

System.out.println("移动后的数组为:");

for(int i=0;icarray.length;i++)//打印目标数组的每一个元素

{

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

if((i+1)%10==0){//每行输出是个数组元素

System.out.println();

}

}

}

}

java数组整体移位问题?如将{1,3,1,2,3,2,3,2}移成{1,1,2,2,2,3,3,3} 如何高效实现。

就是把里面所有的3移动到最后,其他的顺序前移?没法可选的时候我会用遍历,循环来做。

public class ClassB {

public static void main(String... arg){

int [] a = {1,3,2,4,65,21,3,546,3,2,1};

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

if(a[i]==3){

int n =i;

for(int j=n+1;ja.length;j++){

a[n]=a[j];

n++;

}

a[a.length-1]=3;

}

}

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

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

}

}

}

方法笨一点,用还是可以用的

1 2 4 65 21 546 2 1 3 3 3

JAVA数组移位

我看不懂,你到底是在平移数组元素还是把指定下标的元素变成默认值?第五个元素原来是4你怎么把它变成0了?

下标越界是肯定的。数组一旦被定义,长度就是不变的。与其说是平移,你这个其实是插入操作,在指定的下标插入默认值。一旦插入新元素,数组的元素个数会变长,但这是不允许的,所以肯定会有下标越界异常。

如果你真的是要插入一个默认元素的话你无法在原来的数组上进行操作,只能声明一个新的数组,长度比原来数组长1,然后把旧的元素复制到新的数组,插入默认值,然后再把array的引用指向新数组。可以这样:

int[] array={0,1,2,3,4,5,6,7,8,9};

int[] temp=new int[array.length+1]; //

int k; //k为指定下标,假设已知

for(int i=0;ik;i++)

temp[i]=array[i]; //复制下标前的元素

temp[k]=0; //设置默认值

for(int i=k;iarray.length;i++)

temp[i+1]=array[i]; //复制下标后的元素

array=temp; //改变数组引用