gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 07:54:52 24 4
gpt4 key购买 nike

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

`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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com