** 这是我在 StackOverflow 上的第一篇文章,我只在高中时编写过代码,所以我绝不是专业人士。其实我还是个新手XD。还需要注意的是,我使用 ReadyToProgramInJava 作为我的 IDE,因此我使用 HSA 控制台来编写我的程序。无论如何,继续我的问题。
我正在编写一个程序,要求我对 int 数组进行排序,然后显示该数组中的最高值。我使用 array.sort 按升序排列变量,然后打印出数组的最高值。像这样的事情:
public class stackOverflowQuestion
Console c;
public stackOverflowQuestion ()
{
c = new Console ();
}
public void Sorting ()
{
int obi = 10;
int luke = 4;
int vader =21;
int palpatine = 5;
int [ ] people = {obi, luke, vader, palpatine};
Arrays.sort(people);
c.println (people [people.length - 1]);
}
public static void main (String[] args)
{
stackOverflowQuestion s = new stackOverflowQuestion ();
s.Sorting ();
}
问题是这样的:当我打印数组的最高值时,它只显示数字。因此,如果我按原样运行该程序,它将输出“21”。理想情况下,我希望它打印具有最高值的变量的名称。所以,在运行这个程序时,我希望它打印“Vader”。有办法做到这一点吗?
如果这看起来像是一个可怕的幼稚问题,我很抱歉,但我对编程还比较陌生。
谢谢, 海登
最佳答案
- Java 没有提供按照您需要的方式访问变量名称的标准方法...
- 在创建数组时,信息会丢失...它是按值传递,而不是按引用传递,因此您将包含值 10、4、21 和 5 的数组传递给 Java
因此您需要某种方式链接值和名称...
- 您可以遵循各种枚举,并在其他问题中切换技巧,但我相信这些没有捕获重点
- 我建议采用一种更加面向对象的方法,使用一个名为 Person 的类,将名称和值一起存储...
- Arrays.sort() 不知道如何对 Person 对象进行排序,因此它要么需要 Person 实现
java.lang.Comparable
,或传递可选的java.util.Comparator
,我已经提供了后者的示例。
代码
public class StackOverflowQuestion {
private class Person {
private String name;
private int value;
public String getName() {
return name;
}
public int getValue() {
return value;
}
public Person(String name, int value) {
super();
this.name = name;
this.value = value;
}
}
private class Sorting {
public Sorting() {
Person[] people = { new Person("obi", 10),
new Person("luke", 4),
new Person("vader", 21),
new Person("palpatine", 5) };
Arrays.sort(people, new Comparator<Person>() {
@Override
public int compare(Person o1, Person o2) {
return o1.getValue() - o2.getValue();
}
});
System.out.println(people[people.length - 1].getName());
}
}
public static void main(String[] args) throws IOException {
new StackOverflowQuestion().new Sorting();
}
}
关于java - 显示数组排序的变量名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34303834/