gpt4 book ai didi

java - 使用多参数构造函数进行选择排序

转载 作者:行者123 更新时间:2023-12-02 07:26:21 25 4
gpt4 key购买 nike

我正在为我的大学的 CS 140 类(class)做一个项目,我正在尝试创建一个程序,该程序对美国 50 个州的数组(包含名称、人口、首都和地区字段)使用选择排序。这是给出的数组:

private static void loadStates() {
// Set the search key to be the state name.
State.setKey("name");

us = new Country("United States", 311591917, "Washington DC",
new State[]{
new State("Alabama", 4802740, "Montgomery", "Southeast"),
new State("Alaska", 722718, "Juneau", "West"),
new State("Arizona", 6482505, "Phoenix", "Southwest"),
new State("Arkansas", 2937979, "Little Rock", "Southeast"),
new State("California", 37691912, "Sacramento", "West"),
new State("Colorado", 5116769, "Denver", "West"),
new State("Connecticut", 3580709, "Hartford", "Northeast"),
new State("Delaware", 907135, "Dover", "Northeast"),
new State("Florida", 19057542, "Tallahassee", "Southeast"),
new State("Georgia", 9815210, "Atlanta", "Southeast"),
new State("Hawaii", 1374810, "Honolulu", "West"),
new State("Idaho", 1584985, "Boise", "West"),
new State("Illinois", 12869257, "Springfield", "Midwest"),
new State("Indiana", 6516922, "Indianapolis", "Midwest"),
new State("Iowa", 3062309, "Des Moines", "Midwest"),
new State("Kansas", 2871238, "Topeka", "Midwest"),
new State("Kentucky", 4369356, "Frankfurt", "Southeast"),
new State("Louisiana", 4574836, "Baton Rouge", "Southeast"),
new State("Maine", 1328188, "Augusta", "Northeast"),
new State("Maryland", 5828289, "Annapolis", "Northeast"),
new State("Massachusetts", 6587536, "Boston", "Northeast"),
new State("Michigan", 9876187, "Lansing", "Midwest"),
new State("Minnesota", 5344861, "St. Paul", "Midwest"),
new State("Mississippi", 2978512, "Jackson", "Southeast"),
new State("Missouri", 6010688, "Jefferson City", "Midwest"),
new State("Montana", 998199, "Helena", "West"),
new State("Nebraska", 1842641, "Lincoln", "Midwest"),
new State("Nevada", 2723322, "Carson City", "West"),
new State("New Hampshire", 1318194, "Concord", "Northeast"),
new State("New Jersey", 8821155, "Trenton", "Northeast"),
new State("New Mexico", 2082224, "Santa Fe", "Southwest"),
new State("New York", 19465197, "Albany", "Northeast"),
new State("North Carolina", 9656401, "Raleigh", "Southeast"),
new State("North Dakota", 683932, "Bismarck", "Midwest"),
new State("Ohio", 11544951, "Columbus", "Midwest"),
new State("Oklahoma", 3791508, "Oklahoma City", "Southwest"),
new State("Oregon", 3871859, "Salem", "West"),
new State("Pennsylvania", 12742886, "Harrisburg", "Northeast"),
new State("Rhode Island", 1051302, "Providence", "Northeast"),
new State("South Carolina", 4679230, "Columbia", "Southeast"),
new State("South Dakota", 824082, "Pierre", "Midwest"),
new State("Tennessee", 6403353, "Nashville", "Southeast"),
new State("Texas", 25674681, "Austin", "Southwest"),
new State("Utah", 2817222, "Salt Lake City", "West"),
new State("Vermont", 4802740, "Montpelier", "Northeast"),
new State("Virginia", 8096604, "Richmond", "Southeast"),
new State("Washington", 6830038, "Olympia", "West"),
new State("West Virginia", 1855364, "Charleston", "Southeast"),
new State("Wisconsin", 5711767, "Madison", "Midwest"),
new State("Wyoming", 568158, "Cheyenne", "West")
});
} // end loadStates()

每个州依此类推。这是我的选择排序。按照教授的要求分为三种方法。

private static void selectionSort(State[] states, String onField) {
for (int top = 0; top < states.length - 1; top++) {
swap(states, top, indexOfMinValueInArray(states, top, onField));
}
} // end selectionSort()

private static int indexOfMinValueInArray(State[] states, int startAt,
String onField) {
int minIndex = startAt;
if ("name".equals(onField)) {
for (int index = startAt; index < states.length; index++) {
if (states[index].getName().compareTo(states[minIndex].getName()) < 0) {
minIndex = index;
}
}
} else if ("population".equals(onField)) {
for (int index = startAt; index < states.length; index++) {
if (states[index].getPopulation() < states[minIndex].getPopulation()) {
minIndex = index;
}
}
}
return minIndex;
}// end indexOfMinValueInArray()

private static void swap(State[] states, int index1, int index2) {
State temp = states[index1];
states[index1] = states[index2];
states[index2] = temp;
}

基本上,这应该做的是采用一个“键”,或者如方法中所述,“onField”,它应该告诉选择排序按什么对数组进行排序,可以按名称、人口、首都,或地区。这就是我迷失的地方。有人可以提供一些关于如何纠正我的选择排序的指导吗?另外,这是代码的开头,因此您可以看到我需要采取的方向。

public static void main(String[] args) {
loadStates();

State[] sortedStates = new State[50];
for (int i = 0; i <= 49; i++) {
sortedStates[i] = us.getStateAtIndex(i);
}

// TODO: Sort the states by population.
selectionSort(sortedStates, "population");

// TODO: List the states by population.
listStates(sortedStates);

最佳答案

我建议定义四个 Comparator 对象,每个字段一个作为键。例如,对于 name字段:

public class NameComparator implements Comparator<State> {
public int compare(State s1, State s2) {
return s1.name.compareTo(s2.name);
}
}

其他比较器可以类似地定义。然后您可以定义选择排序以使用 Comparator<State>进行项目比较,您可以根据键指定选择要使用的比较器。

关于java - 使用多参数构造函数进行选择排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13548056/

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