猿问

我可以在将对象与另一个数组进行比较时更改对象的一个​​值吗?

我有一个有名称的对象,String [] 还有一个另一个 String 数组,它只存储 main 中的对象的名称(第一个参数)。


import java.util.*;

class Dice{

    public String [] side;

    public String name;


    public Dice (String n, String ... a){

        name = n;

        side = a;


    }


    //Setter and Getter name

    public String getName(){

        return name;

    }

    public void setName(String n){

        name = n;

    }

}

对象参数在主类中设置。


Dice easy = new Dice("Green:","Brain","Brain","Brain","Foot Print","Foot Print","Shotgun");


字符串数组只存储名称Easy:。


我试图通过将两个数组传递给 main 中的方法来比较它们。


//Removeing the 3 dice which were picked form the cup of the current player

public static Dice [] cup(Dice [] a , String [] b){

    Dice [] currentCup = new Dice[a.length];



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

        if (b[i] == a[i].getName()) {

            currentCup[i].setName("");

        }

    }


    return currentCup;

}

如果对象的名称等于字符串数组中的名称,则对象名称应等于且为空 String(" ")。


我收到错误


Exception in thread "main" java.lang.NullPointerException


我知道在这里使用 ArrayList 更好,因为我只需 .remove(i, elem) 即可。但我不知道如何将 ArrayList 传递到构造函数中。


另外,这只是我自己使用数组的纯粹练习。


结果应该是,如果 Dice [].getName() 等于 easy,则该 Dice 对象的名称应该是一个空字符串“”。


米琪卡哇伊
浏览 112回答 3
3回答

慕妹3242003

我知道在这里使用 ArrayList 更好,因为我只需 .remove(i, elem) 即可。但我不知道如何将 ArrayList 传递到构造函数中。public Dice (String n, List<String> sideList){&nbsp; &nbsp; name = n;&nbsp; &nbsp; side = sideList.toArray(new String[sideList.size()]);}另外,您没有对下面的数组执行任何操作。Dice [] currentCup = new Dice[a.length];我强烈鼓励您自己试运行代码。看来您的代码没有做您真正要做的事情。:)

牧羊人nacy

在cup方法中,返回值currentCup从未被分配,因此它只是 的“序列”&nbsp;null。您需要单独初始化其成员(例如currentCup[i] = a[i],作为 中的第一个操作for)。null该代码尝试对 a 执行通常不可能的操作(取决于操作)。在这种情况下,代码不能getName为null:这会在运行时引发异常。b如果长度超过,代码也会崩溃a。希望我有所帮助。

慕村225694

把它放在你的 if in 方法中:if (b[i] == a[i].getName()) {&nbsp; &nbsp; a[i].setName("");&nbsp; &nbsp; currentCup[i] = a[i];}
随时随地看视频慕课网APP

相关分类

Java
我要回答