我可以根据编号对下面的代码进行排序吗?
就像数据被排序一样,假设升序应该如下所示:
001 Graciella
012 Steven
094 Marcellin
... and so on
我的代码:
String [][] sis = new String [][] {
{"001", "980", "777", "169","094","233", "012"},
{"Graciella","Martinus","Renata","Vianney","Marcellin", "Joakim", "Steven"}
};
System.out.println(sis[0][0]+" "+ sis[1][0]);
System.out.println(sis[0][1]+" "+ sis[1][1]);
System.out.println(sis[0][2]+" "+ sis[1][2]);
System.out.println(sis[0][3]+" "+ sis[1][3]);
System.out.println(sis[0][4]+" "+ sis[1][4]);
System.out.println(sis[0][5]+" "+ sis[1][5]);
System.out.println(sis[0][6]+" "+ sis[1][6]);
我试过以下方法,但我觉得我做错了什么。但我不知道是什么。
String num [] = {"001", "980", "777", "169", "094", "233", "012"};
int NUM [] = new int[num.length];
for (int i = 0; i < NUM.length;i++) {
NUM[i] = Integer.parseInt(num[i]);
}
String nem [] = {"Graciella","Martinus","Renata","Vianney","Marcellin", "Joakim", "Steven"};
for (int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
if (num[j].compareTo(num[j+1]) > 0) {
String temp = num[j];
num[j] = num[j+1];
num[j+1]= temp;
}
}
}
System.out.println();
for (int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
if (nem[j].compareTo(nem[j+1]) > 0) {
String temp = nem[j];
nem[j] = nem[j+1];
nem[j+1]= temp;
}
}
}
for (int j = 0; j < 6; j++) {
System.out.println(num[j] + " " + nem[j]);
}
你能告诉我我做错了什么吗?我可以根据名称对这些数据进行排序吗?
我在代码中添加了注释以进行解释。我没有包括一些最佳代码实践(即不要重复代码),我只是专注于算法。
同样最简单的方法是首先创建将两个字符串(数字和名称)连接在一起的新数组,然后对这个额外的数组进行排序。但是我不知道你是否因为其他原因需要对原始数组进行排序,因此我保持原样。
for (int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
if (num[j].compareTo(num[j+1]) > 0) {
String temp = num[j];
num[j] = num[j+1];
num[j+1]= temp;
// You need to switch this as well as you keep it as pair, so it has to be
// in same position after shift
temp = nem[j];
nem[j] = nem[j+1];
nem[j+1]= temp;
}
}
}
System.out.println();
for (int i = 0; i < 6; i++) {
for(int j = 0; j < 6; j++) {
// only if the number is the same, then check which string has priority
if (nim[j] == nim[j+1] && nem[j].compareTo(nem[j+1]) > 0) {
String temp = nem[j];
nem[j] = nem[j+1];
nem[j+1]= temp;
// You need to keep the other array in sync
temp = num[j];
num[j] = num[j+1];
num[j+1]= temp;
}
}
}
正如@Elliott Frisch在评论中指出的那样,如果将这些数据视为对象,而不是将Person属性分散在两个不同的数组中,则会更容易和更清晰,这会使您的解决方案变得脆弱和不灵活。
这就是Person
类的样子:
public class Person {
private int id;
private String name;
public Person(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
@Override
public String toString() {
return String.format("%03d %s", id, name);
}
}
这就是我们如何实现冒泡排序。
注意:不需要遍历嵌套循环中的孔数组(条件<代码>j
此外,硬编码值,如条件<代码>j中的值
public static void sortPeopleWithBubbleSort(Person[] people) {
for (int i = 0; i < people.length; i++) {
for (int j = 0; j < people.length - 1 - i; j++) {
if (people[j].getId() > people[j + 1].getId()) {
Person temp = people[j + 1];
people[j + 1] = people[j];
people[j] = temp;
}
}
}
}
main()
public static void main(String[] args) {
Person[] people = new Person[]{
new Person(1, "Graciella"),
new Person(980, "Martinus"),
new Person(777, "Renata"),
new Person(169, "Vianney"),
new Person(94, "Marcellin"),
new Person(233, "Joakim"),
new Person(12, "Steven")
};
// sorting
sortPeopleWithBubbleSort(people);
// printing
for (Person person: people) {
System.out.println(person);
}
}
输出:
001 Graciella
012 Steven
094 Marcellin
169 Vianney
233 Joakim
777 Renata
980 Martinus
正如@hfontanez在评论中所建议的那样,我们可以通过提供额外的参数-比较器(用于比较没有自然顺序的对象的特殊对象),使
sortPeopleWithBubbleSort()方法更加灵活。
它可能看起来像这样:
// sorting by id
Comparator<Person> byId = Comparator.comparingInt(Person::getId);
sortPeopleWithBubbleSort(people, byId);
// sorting by name
Comparator<Person> byName = Comparator.comparing(Person::getName);
sortPeopleWithBubbleSort(people, byName);
public static void sortPeopleWithBubbleSort(Person[] people,
Comparator<Person> comparator) {
for (int i = 0; i < people.length; i++) {
for (int j = 0; j < people.length - 1 - i; j++) {
if (comparator.compare(people[j], people[j + 1]) > 0) {
Person temp = people[j + 1];
people[j + 1] = people[j];
people[j] = temp;
}
}
}
}
要了解如何使用Java-8方法构建比较器,请查看这篇文章。如果您对Java8个函数式编程特性不满意,最好从本教程开始。
编辑:最后一个问题,如何通过值而不是引用来存储它?
我需要使用气泡排序法按名称对我的杂货库存进行排序。 显然,我的代码不是按名字排序的 顺便说一句,库存存储的数据来自文件输入。 这是我的代码。 这是我的比较方法从我的超类(杂货店项目)
问题内容: 我有一个要存储在Redis中的对象数组。我可以分解数组部分,并将它们存储为对象,但是我不知道如何获得类似 然后根据名称搜索数据库,并获取返回的密钥。我需要这样的东西。但几乎无法做到正确。 首先是使这一部分正确。 其次是以某种方式从值中获取密钥,即 我觉得很难。或者,我可以将其直接存储为对象数组并使用简单的for循环。 请建议哪种路线最适合某些实现? 问题答案: 我发现工作是将密钥存储为
我目前正在使用axios从我的api中提取JSON数据,我正在映射这个数据并将其存储为变量。我希望能够在我的react组件中调用这些变量,但我似乎找不出最好的方法。 获取JSON数据并将其存储为变量 我希望能够在react组件中调用类似Profile.Major的东西,但我目前尝试的方法并不奏效。请让我知道这样做的正确方法。提前谢谢你。
如何从主方法调用 bubbleSort 方法以打印排序的列表数组。我已经将10个随机数生成到一个数组中,但我还没有弄清楚如何调用bubbleSort并打印结果。我在这里错过了什么? 公共类 Bubblesort{ 公共静态void main(String[] args) { } }
问题内容: 我有两个不同的数组,一个带有字符串,另一个带有整数。我想将它们连接成一个数组,其中每一列都具有原始数据类型。我当前执行此操作的解决方案(请参见下文)将整个数组转换为dtype = string,这似乎在内存方面效率很低。 何时和何时可能使dtypes多元化? 问题答案: 一种方法可能是使用记录数组。“列”与标准numpy数组的列不同,但是对于大多数用例来说,这就足够了: 请注意,您还可