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