Java 改变数组中元素的位置

Java 改变数组中元素的位置,java,Java,我不允许导入任何内容,因此不能使用java.util.arrays/import list 到目前为止,我得到了这个: public class MyArrayList { public String[] arrays; int counter = 0; public MyArrayList() { arrays = new String[5]; } public void add(String element) { if (counter >= arrays.len

我不允许导入任何内容,因此不能使用java.util.arrays/import list

到目前为止,我得到了这个:

public class MyArrayList {
public String[] arrays;
int counter = 0;

public MyArrayList() {
    arrays = new String[5];

}

public void add(String element) {
    if (counter >= arrays.length) {
        String[] newarray = new String[arrays.length + 1];
        for (int i = 0; i < arrays.length; i++) {
            newarray[i] = arrays[i];
        }
        arrays = newarray;
    }
    arrays[counter] = element;
    counter++;
}
    public void set(String element, int position) { //This is the code that will change pos
    element = arrays[arrays.length - 1];
    for (int y = arrays.length - 1; y > position; y--)
        arrays[y] = arrays[y - 1];
    arrays[position] = element;

}

public class MyArrayListTest {

static MyArrayList zoo = new MyArrayList();


public static void printZoo() {
    System.out.print("The zoo now holds " + zoo.size() + " animals: ");
    for (int j = 0; j < zoo.size(); j++) System.out.print(zoo.get(j) + " ");
    System.out.println();
}

public static void main(String[] args) {

    System.out.println("Testing constructor, add(object) and size() ");
    zoo.add("Ant");
    zoo.add("Bison");
    zoo.add("Camel");
    zoo.add("Dog");
    zoo.add("Elephant");
    zoo.add("Frog");
    zoo.add("Giraffe");
    zoo.add("Horse");
    printZoo();
    zoo.set("Frog",0);
    zoo.set("Camel",2);
    zoo.set("Dog",4);
    zoo.set("Elephant",6);
    zoo.set("Giraffe",7);
    zoo.set("Horse",5);
    zoo.set("Ant",1);
    zoo.set("Bison",3);
    printZoo();
    System.out.println();
公共类MyArrayList{
公共字符串[]数组;
int计数器=0;
公共MyArrayList(){
数组=新字符串[5];
}
公共void添加(字符串元素){
if(计数器>=arrays.length){
String[]newarray=新字符串[arrays.length+1];
for(int i=0;iposition;y--)
数组[y]=数组[y-1];
数组[位置]=元素;
}
公共类MyArrayListTest{
静态MyArrayList zoo=新的MyArrayList();
公共静态void printZoo(){
System.out.print(“动物园现在拥有”+zoo.size()+“动物:”);
对于(intj=0;j
所以我想做的是让set方法改变元素在 阵列

这就是打印出来的内容:

动物园现在有8种动物:蚂蚁野牛骆驼狗大象青蛙长颈鹿马

动物园现在有8种动物:马、大象、蚂蚁、长颈鹿、野牛、青蛙、狗、骆驼

所以位置确实会改变,但顺序不对

应该是:


动物园现在有8种动物:青蛙蚂蚁骆驼野牛狗马大象长颈鹿你为什么要重写set函数中元素的值?你没有保存所需属性值的变量。请再次查看你的代码

public void set(String element, int position) { 
    element = arrays[arrays.length - 1]; // at this point, you no longer
                                         // know what the element was

    //and now you shift the list by 1 element
    for (int y = arrays.length - 1; y > position; y--)
    arrays[y] = arrays[y - 1];
    arrays[position] = element;
}
你只是在改变清单。 你可以试着这样做

public void set(String element, int position) {
    String tmp = arrays[position];
    arrays[position] = element;
    ...
    ... //here check if element you have set was already inside the array
    ... //if it isn't, increase array length and put tmp at the end
    ... //if it is, put tmp in old index of element
}
我的意思是,这只是一个简单的回答,没有考虑角落里的案例,但在我看来,你的想法有点不正确

好的,下面是您问题的完整解决方案:)

公共空集(字符串元素,int位置){
if(数组[位置].equals(元素))
回来
字符串tmp=数组[位置];
数组[位置]=元素;
for(int i=0;i
请对您的问题/任务,以及MCVE不起作用的原因,提供一个清晰、简洁、具体的描述。@QPaysTaxes已经提供,只需关注
set
方法。@LuiggiMendoza显然不是。OP从不解释问题,如果只有一个相关部分,那么代码肯定不是MCVE。@QPaYstop非常明确:这是打印出来的内容:动物园现在有8种动物:蚂蚁野牛骆驼狗大象青蛙长颈鹿马动物园现在有8种动物:马大象蚂蚁长颈鹿野牛青蛙狗骆驼,问题是:位置确实改变,但顺序不对。所以,你只需阅读代码(是的,这是MCVE)看到它足够短,足以理解和复制问题。@LuiggiMendoza是的,我看到了。我没有看到正确的顺序应该是什么。
public void set(String element, int position) {
    if (arrays[position].equals(element))
        return;

    String tmp = arrays[position];
    arrays[position] = element;

    for (int i = 0; i < arrays.length; i++) {
        if (arrays[i].equals(element) && i != position) {
            arrays[i] = tmp;
            return;
        }
    }
    add(tmp);
}