标签:平移 int System 数组 操作 original out
问题描述:给定一个数组,对其扩容后得到一个新数组,将和原数组中对应的元素平移指定便宜量的位数,若平移后会越界,则至多平移至新数组的末尾。
1.给定数组(原数组)
int[] ints = { 1, 2, 3, 4 };
2.平移至末尾操作
System.out.println("=======扩容为原数组的3倍后,平移至末尾=======");
int[] translate = translateToEnd(ints, ints.length*3);
for(int e:translate) {
System.out.print(e);
}
3.平移至指定偏移量操作,若平移指定偏移量后会越界,则只平移至末尾
System.out.println("========扩容为7后,平移偏移量为2=======");
int[] offset = traslateByOffset(ints, 2, 7);
for(int e:offset) {
System.out.print(e);
}
System.out.println("========扩容为7后,平移偏移量为4,会越界,所以只平移至末尾=======");
int[] offset2 = traslateByOffset(ints, 4, 7);
for(int e:offset2) {
System.out.print(e);
}
演示结果
=======扩容为原数组的3倍后,平移至末尾=======
000000001234
========扩容为7后,平移偏移量为2=======
0012340
========扩容为7后,平移偏移量为4,会越界,所以只平移至末尾=======
0001234
完整源码
package compute;
import java.util.Arrays;
/**
*数组平移
*@create by gzx on 2022-1-29
*/
public class ArrayTranslation {
public static void main(String[] args) {
int[] ints = { 1, 2, 3, 4 };
System.out.println("=======扩容为原数组的3倍后,平移至末尾=======");
int[] translate = translateToEnd(ints, ints.length*3);
for(int e:translate) {
System.out.print(e);
}
System.out.println();
System.out.println("========扩容为7后,平移偏移量为2=======");
int[] offset = traslateByOffset(ints, 2, 7);
for(int e:offset) {
System.out.print(e);
}
System.out.println();
System.out.println("========扩容为7后,平移偏移量为4,会越界,所以只平移至末尾=======");
int[] offset2 = traslateByOffset(ints, 4, 7);
for(int e:offset2) {
System.out.print(e);
}
}
/**
*平移至末尾
* @param original 原数组
* @param newArrayLength 扩容后的新数组长度
* @return 平移后的新数组
*/
public static int[] translateToEnd(int[] original,int newArrayLength) {
int[] temp=Arrays.copyOf(original, newArrayLength);
//将旧数组的原有元素平移至新数组的末尾
for (int k = 0; k < original.length; k++) {
temp[newArrayLength + k - original.length] = original[k];
}
//新数组的其它部分赋值为 0
for(int p=0;p<(newArrayLength-original.length);p++) {
temp[p]=0;
}
return temp;
}
/**
* 平移偏移量对应的位数,至多平移至末尾
* @param original 原数组
* @param offset 平移偏移量
* @param newArrayLength 新数组的长度
* @return 平移后的数组
*/
public static int[] traslateByOffset(int[] original,int offset,int newArrayLength) {
int[] temp;
//如果平移后会越界,则只移动到末尾
if (offset>(newArrayLength-offset)) {
temp=translateToEnd(original, newArrayLength);
}else {
//平移指定偏移量
temp=Arrays.copyOf(original, newArrayLength);
for(int k=0;k<original.length;k++) {
temp[offset+k]=original[k];
}
//其它部分赋值 0
for(int p=0;p<newArrayLength;p++) {
if (p<offset||p>(offset+original.length)) {
temp[p]=0;
}
}
}
return temp;
}
}
温馨提示:如读完此篇博客感觉有收获,不妨再看看我的其它博客,皆为原创,且都是自己思考的产物。如有不足指出,也敬请批评指正。
标签:平移,int,System,数组,操作,original,out 来源: https://blog.csdn.net/qq_44922239/article/details/122746246
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。