java - 检查重复项并移至下一个元素

标签 java

我有一个简单的程序,由一个字符串数组和一个字符串数组列表组成。该程序从数组中随机选择一个字符串,并检查该字符串是否也存在于数组列表中。如果是,则选择不同的字符串。现在程序运行良好,但我不确定我的代码的效率如何,因为我有同一行代码运行两次 - 我认为这是不好的做法。

`import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Main {

public static String[] rooms1 = new String[] {
        "Library",
        "Kitchen",
        "Study",
        "Conservatory",
        "Ballroom",
        "Lounge",
        "Hall",
        "Billiard Room",
        "Dining Room"
    };

public static List<String> rooms2 = new ArrayList<String>();

public static void addRooms() {
    rooms2.add("Garage");
    rooms2.add("Bar");
    rooms2.add("Library");
    rooms2.add("Bathroom");
    rooms2.add("Lounge");
    rooms2.add("Dining Room");
}

public static void main(String[] args) {
    addRooms();
    Random random = new Random();
    String roomChosen = rooms1[random.nextInt(rooms1.length)];
    while (rooms2.contains(roomChosen))
        roomChosen = rooms1[random.nextInt(rooms1.length)];
    System.out.println("Player has entered the " + roomChosen);
}
}

`

重复的代码行是roomChosen = rooms1[random.nextInt(rooms1.length)];

最佳答案

同一行代码运行两次并不总是效率问题,而是能够避免在代码中引入错误的问题。您已经在这行代码中捕获了如何从数组中选择随机字符串的逻辑:

rooms1[random.nextInt(rooms1.length)]

问题是当你如何实现这一目标的逻辑发生变化时会发生什么。在您当前的情况下,您必须格外小心地找到此代码的每个实例并正确更改它。

避免代码重复的一种方法是使用方法。您可以捕获有关如何在方法内部的数组中查找随机字符串的逻辑,然后您只需在方法内部维护此代码,而无需在其他地方维护。

可以使用以下代码作为示例:

public static String getRandomStringFromRooms1() {
        Random random = new Random();
        return rooms1[random.nextInt(rooms1.length)];
    }

public static void main(String[] args) {
        addRooms();        
        String roomChosen = getRandomStringFromRooms1();
        while (rooms2.contains(roomChosen))            
            roomChosen = getRandomStringFromRooms1();
        System.out.println("Player has entered the " + roomChosen);
}

这个例子是;但是,它的效率比您的代码低,因为每次调用 getRandomStringFromRooms1() 方法时,您都会创建一个全新的 Random 对象。如果您不喜欢在每次方法调用时创建一个 Random 对象,因为您可能会调用此方法数百次,您可以创建一次 Random 对象并将其传递到您的方法中,如下所示:

public static String getRandomStringFromRooms1(Random random) {

        return rooms1[random.nextInt(rooms1.length)];
}

public static void main(String[] args) {
        addRooms();     
        Random random = new Random();
        String roomChosen = getRandomStringFromRooms1(random);
        while (rooms2.contains(roomChosen))            
            roomChosen = getRandomStringFromRooms1(random);
        System.out.println("Player has entered the " + roomChosen);
}

祝你好运。

关于java - 检查重复项并移至下一个元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32804624/

相关文章:

java - 如何仅使用堆栈实现递归函数?

java - 为什么我的数据在界面上显示不同?

java - 如何避免if-else树代码?

java - 执行hdfs namenode -format的异常

java - Camel + MyBatis + Apache Aries

java - 在 Java 中构建复制构造函数

java - JPA:如何仅映射另一个实体的一个属性

java - XML 到 JSON 转换问题

java - 将 HTTPServletRequest 流写入 Google App Engine 的数据存储区

java - 错误 SQL 错误 : 1452, SQLState : 23000, 使用 hibernate 和 javafx