初学者请教个问题

w664990576 2010-04-20 04:53:11
在数组中间位置添加新元素。当数组长度为偶数时,在坐标为数组长度一半的元素后面添加新元素,当数组长度为奇数时,在中间元素的后面添加新元素。例如:arr1为{1,2,5,8}新元素为3,结果为{1,2,3,5,8};arr2为{1,3,4}新元素为5,结果为{1,3,5,4}。

最好将全部代码敲出来 谢谢
...全文
96 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
groovy2007 2010-04-20
  • 打赏
  • 举报
回复
晕,我在ArrayList里找insert方法,找了半天没找到,原来是叫add
那就可以直接使用ArrayList了
不管是奇数还是偶数,插入位置都是 (size+1)/2

ArrayList<Integer> a = ArrayList<Integer>();
//...
a.add((a.size()+1)/2, element);
hardycheng 2010-04-20
  • 打赏
  • 举报
回复
测试 没问题的 哈哈
hardycheng 2010-04-20
  • 打赏
  • 举报
回复
方法还不对
改一下



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 ,然后连一起就可以了
萧大侠的圈 2010-04-20
  • 打赏
  • 举报
回复
操作数据不是明智之举
zhangkailiuyu 2010-04-20
  • 打赏
  • 举报
回复
ArrayList ls = new ArrayList();
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);
ycnanevol 2010-04-20
  • 打赏
  • 举报
回复
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;
}

}
hardycheng 2010-04-20
  • 打赏
  • 举报
回复
我这样想的

//数组的前一半
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{
//
}

}



还没测 ,等一会测一下
eggno8 2010-04-20
  • 打赏
  • 举报
回复
。。。

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;
}
groovy2007 2010-04-20
  • 打赏
  • 举报
回复
实际就是在(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
}

}
  • 打赏
  • 举报
回复
jdk的源码中就有了……
WYhack 2010-04-20
  • 打赏
  • 举报
回复
  数组:java数组的长度是固定的,在同一个数组中只能存放相同类型的数据,可以是基本数据类型,也可

  以存放引用类型的数据。

  java集合:存入于java.util包中,它不能存放基本类型数据,而只能存放对象的引用。

这个用什么数据类型存放还是个问题,期待高人解决!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧