初学者请教个问题 在数组中间位置添加新元素。当数组长度为偶数时,在坐标为数组长度一半的元素后面添加新元素,当数组长度为奇数时,在中间元素的后面添加新元素。例如:arr1为{1,2,5,8}新元素为3,结果为{1,2,3,5,8};arr2为{1,3,4}新元素为5,结果为{1,3,5,4}。 最好将全部代码敲出来 谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 数组:java数组的长度是固定的,在同一个数组中只能存放相同类型的数据,可以是基本数据类型,也可 以存放引用类型的数据。 java集合:存入于java.util包中,它不能存放基本类型数据,而只能存放对象的引用。这个用什么数据类型存放还是个问题,期待高人解决! 实际就是在(size+1)/2的位置进行插入但是因为数组的长度是不能变的,所以只好预先定义一个足够长的数组来存储public class A { private final int maxLen = 100; private int[] a = new int[maxLen]; private int size = 0; void print() { for(int i=0; i<size; i++) System.out.print(a[i]+" "); System.out.println(); } void add(int x) { a[size++] = x; } int size() { return size; } void insert(int x, int i) { System.arraycopy(a, i, a, i+1, size-i); a[i] = x; size++; } void insertMiddle(int x) { insert(x, (size+1)/2); } public static void main(String[] args) { A a = new A(); for(int x : new int[]{1,2,5,8}) a.add(x); a.print(); //1 2 5 8 a.insertMiddle(3); a.print(); //1 2 3 5 8 a = new A(); for(int x : new int[]{1,3,4}) a.add(x); a.print(); //1 3 4 a.insertMiddle(5); a.print(); //1 3 5 4 }} public static int[] insertOne(int[] oldarray,int theone){ int[] newarray = new int[oldarray.length+1]; for(int i = 0;i<=oldarray.length;i++){ if(i<(oldarray.length+1)/2){ newarray[i]=oldarray[i]; }else if(i==(oldarray.length+1)/2){ newarray[i]=theone; }else{ newarray[i]=oldarray[i-1]; } } return newarray; } 我这样想的//数组的前一半private static List<String> frontStrs = new ArrayList<String>();//数组的后一半private static Stack<String> rearStrs = new Stack<String>();//要返回的数组,也就是 frontStrs + rearStrs private static String[] resStrs = null;//不过问题是 frontStrs + rearStrs 不知道怎么实现/*** 用来初始化前一半和后一半 */private void initStrs(String[] arr){ //保证arr至少有两个 if(arr.length == 1){ //??? }else if(arr.length % 2 == 0){ for(int i = 0 ; i < arr.length/2 ; i ++ ){ frontStrs.add(arr[i]);// rearStrs.add(arr[i + arr.length/2]); rearStrs.push(arr[i + arr.length/2]); } }else{ for(int i = 0 ; i < arr.length/2 ; i ++ ){ frontStrs.add(arr[i]); rearStrs.push(arr[i + arr.length/2]); } frontStrs.add( arr[arr.length/2]); } }/*** 插入字符串*/public void addStrToArr(String[] arr , String str){ if(arr != null && arr.length != 0){ if(){} }else{ // } } public void addStrToArr(String[] arr , String str){ if(arr != null && arr.length != 0){ int length = arr.length ; if(length % 2 == 0){ // 如果是偶数 rearStrs.push(str); }else{ frontStrs.add(str); } }else{ // } } 还没测 ,等一会测一下 import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class ArrayTest { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub System.out.println(addNewElement(new Integer[]{1,2,5,8},3)); System.out.println(addNewElement(new Integer[]{1,3,4},5)); } /** * * @param source * @param element * @return */ private static List<?> addNewElement(Integer[] source, Integer element) { List<Integer> l = new ArrayList<Integer>(Arrays.asList(source)); int index = 0; if (l.size() % 2 == 0) { index = l.size() / 2; } else { index = (l.size() +1 ) / 2; } l.add(index, element); return l; }} ArrayList ls = new ArrayList();ls.add();ls.add();ls.add();.....if(ls.size()%2==0)ls.insert(ls.size()/2,x);elsels.insert(ls.size()/2+1,x); 方法还不对改一下 private static int arrlength = 0; public void addStrToArr( String str){ if(arrlength % 2 == 0){ // 如果是偶数 rearStrs.push(str); }else{ frontStrs.add(str); } } private void initStrs(String[] arr){ //保证arr至少有两个 arrlength = arr.length;……这样就不需要插入后的新数组了,只要最后把 frontStrs 和 rearStrs 中的字符串按照 frontStrs 顺序取, rearStrs 。pop ,然后连一起就可以了 晕,我在ArrayList里找insert方法,找了半天没找到,原来是叫add那就可以直接使用ArrayList了不管是奇数还是偶数,插入位置都是 (size+1)/2ArrayList<Integer> a = ArrayList<Integer>();//...a.add((a.size()+1)/2, element); 关于JAVA小游戏 太空侵略者 关于接口的一个奇怪用法(不解,请教) 有个问题不是很明白,高手指教! 通过两个GUI窗口来实现本地简单的聊天功能 高分求教! 请教一个用java访问xml的问题,急,在线等 什么叫“藏着手臂的维纳斯”? applet用IE不能看,见鬼吗? 请问为什么会有这样的错误? 请教大家关于java的运算符 myeclipse中的问题 求助高手帮助
但是因为数组的长度是不能变的,所以只好预先定义一个足够长的数组来存储public class A {
private final int maxLen = 100;
private int[] a = new int[maxLen];
private int size = 0;
void print() {
for(int i=0; i<size; i++)
System.out.print(a[i]+" ");
System.out.println();
}
void add(int x) { a[size++] = x; } int size() { return size; }
void insert(int x, int i) {
System.arraycopy(a, i, a, i+1, size-i);
a[i] = x;
size++;
}
void insertMiddle(int x) {
insert(x, (size+1)/2);
} public static void main(String[] args) {
A a = new A();
for(int x : new int[]{1,2,5,8}) a.add(x);
a.print(); //1 2 5 8
a.insertMiddle(3);
a.print(); //1 2 3 5 8
a = new A();
for(int x : new int[]{1,3,4}) a.add(x);
a.print(); //1 3 4
a.insertMiddle(5);
a.print(); //1 3 5 4
}}
int[] newarray = new int[oldarray.length+1];
for(int i = 0;i<=oldarray.length;i++){
if(i<(oldarray.length+1)/2){
newarray[i]=oldarray[i];
}else if(i==(oldarray.length+1)/2){
newarray[i]=theone;
}else{
newarray[i]=oldarray[i-1];
}
}
return newarray;
}
private static List<String> frontStrs = new ArrayList<String>();
//数组的后一半
private static Stack<String> rearStrs = new Stack<String>();
//要返回的数组,也就是 frontStrs + rearStrs
private static String[] resStrs = null;//不过问题是 frontStrs + rearStrs 不知道怎么实现/**
* 用来初始化前一半和后一半
*/
private void initStrs(String[] arr){ //保证arr至少有两个
if(arr.length == 1){
//???
}else
if(arr.length % 2 == 0){
for(int i = 0 ; i < arr.length/2 ; i ++ ){
frontStrs.add(arr[i]);
// rearStrs.add(arr[i + arr.length/2]);
rearStrs.push(arr[i + arr.length/2]);
}
}else{
for(int i = 0 ; i < arr.length/2 ; i ++ ){
frontStrs.add(arr[i]);
rearStrs.push(arr[i + arr.length/2]);
}
frontStrs.add( arr[arr.length/2]);
}
}
/**
* 插入字符串
*/public void addStrToArr(String[] arr , String str){
if(arr != null && arr.length != 0){
if(){
}
}else{
//
}
}
public void addStrToArr(String[] arr , String str){
if(arr != null && arr.length != 0){
int length = arr.length ;
if(length % 2 == 0){ // 如果是偶数
rearStrs.push(str);
}else{
frontStrs.add(str);
}
}else{
//
}
}
还没测 ,等一会测一下
import java.util.Arrays;
import java.util.List;public class ArrayTest { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(addNewElement(new Integer[]{1,2,5,8},3));
System.out.println(addNewElement(new Integer[]{1,3,4},5));
} /**
*
* @param source
* @param element
* @return
*/
private static List<?> addNewElement(Integer[] source, Integer element) { List<Integer> l = new ArrayList<Integer>(Arrays.asList(source));
int index = 0; if (l.size() % 2 == 0) {
index = l.size() / 2;
} else {
index = (l.size() +1 ) / 2;
}
l.add(index, element);
return l;
}}
ls.add();
ls.add();
ls.add();
.....
if(ls.size()%2==0)
ls.insert(ls.size()/2,x);
else
ls.insert(ls.size()/2+1,x);
改一下 private static int arrlength = 0;
public void addStrToArr( String str){
if(arrlength % 2 == 0){ // 如果是偶数
rearStrs.push(str);
}else{
frontStrs.add(str);
}
}
private void initStrs(String[] arr){ //保证arr至少有两个
arrlength = arr.length;
……这样就不需要插入后的新数组了,只要最后把 frontStrs 和 rearStrs 中的字符串
按照 frontStrs 顺序取, rearStrs 。pop ,然后连一起就可以了
那就可以直接使用ArrayList了
不管是奇数还是偶数,插入位置都是 (size+1)/2ArrayList<Integer> a = ArrayList<Integer>();
//...
a.add((a.size()+1)/2, element);