public static void getSort(short[] time, String[] champs){
System.out.println("Time Champs\n");
for(int a= 0; a < time.length; a++){
char Fletter=champs[a].charAt(0);
if('B' == Fletter){
Arrays.sort(champs);
System.out.println(time[a] + " " + champs[a]);
}
}
for(int a= 0; a < time.length; a++){
char Fletter=champs[a].charAt(0);
if('C' == Fletter){
Arrays.sort(champs);
System.out.println(time[a] + " " + champs[a]);
}
}
}
大家好,我需要一些建议和帮助。我想要做的是输出并显示数组时间内的内容和冠军。
我的愿望输出是:
Time----Champs
2001 Banana
2004 Banana
2000 Boat
2003 Boat
2011 Carrot
2013 Carrot
2002 Cucumber
正确显示时间和冠军按字母顺序显示的位置
但是当我使用Arrays.sort(champs);
我的输出是:
Time----Champs
2004 Banana
2005 Banana
2006 Boat
2007 Boat
2008 Carrot
2009 Carrot
2010 Cucumber
冠军的输出显示正确,但年份列为下降1。
没有Arrays.sort(champs)
我的输出是:
Time----Champs
2000 Boat
2001 Banana
2003 Boat
2004 Banana
2002 Cucumber
2011 Carrot
2013 Carrot
您可以看到冠军的时间是正确的,但不按字母顺序排序。
答案 0 :(得分:2)
我认为你的问题是你没有用'冠军'重新订购'时间'。 从你的例子来看,似乎“时间”只是几年的增加顺序,而冠军则是冠军队伍当年的任何人。 当您将Champs按字母顺序排序时,它们与时间不同步。
要解决这个问题,你需要将时间与冠军配对,这样如果你按其中一个值排序,另一个就会随之移动。
从这样的内部类开始:
public static class Tuple implements Comparable<Tuple>{
public short time;
public String champ;
public Tuple(short time, String champ) {
this.time = time;
this.champ = champ;
}
public int compareTo(Tuple other) {
return this.champ.compareTo(other.champ);
}
}
然后,在哪里更改当前方法以生成元组数组:
public static void getSort(short[] time, String[] champs){
// assuming time.length & champ.length are the same
Tuple[] timechamps = new Tuple[time.length];
for (int a = 0; a < time.length; a++) {
timechamps[a] = new Tuple(time[a], champs[a]);
}
因为我们已经使新的元组实现了Comparable,我们可以简单地对它进行排序。元组的compareTo方法按字母顺序排序。
Arrays.sort(timechamps);
然后你可以打印出结果
for (Tuple t : timechamps) {
System.out.println(t.time+"\t"+t.champ);
}
}
答案 1 :(得分:1)
你想看看这里吗? http://www.mkyong.com/java/how-to-sort-a-map-in-java/
这里的关键-----&gt;香榭丽舍大街 值 - &gt;时间
我认为你想缩短你的冠军,时间应该保持相应的价值观。 希望它对你有所帮助。
答案 2 :(得分:0)
最好创建一个Class并实现Comparable方法
public class TimeChamp implements Comparable<TimeChamp>{
private short time;
private String champs;
public short getTime() {
return time;
}
public void setTime(short time) {
this.time = time;
}
public String getChamps() {
return champs;
}
public void setChamps(String champs) {
this.champs = champs;
}
@Override
public int compareTo(TimeChamp o) {
if(getChamps().compareTo(o.getChamps())==0)
{
if(getTime()<o.getTime())
return -1;
else
return 1;
}
else
return getChamps().compareTo(o.getChamps());
}
}
然后你可以像这样创建一个在你的类中排序的函数
public void getSort(TimeChamp[] timeChamp)
{
Arrays.sort(timeChamp);
for(int i=0;i<timeChamp.length;i++)
{
System.out.print(timeChamp[i].getTime());
System.out.print(" ");
System.out.println(timeChamp[i].getChamps());
}
}
编辑:编写一个更具描述性的答案,构造数据集并调用排序方法
import java.util.Arrays;
public class MainExample {
/**
* @param args
*/
public static void main(String[] args) {
//Construct data sets
TimeChamp [] timeChampArray = new TimeChamp[3];
TimeChamp timeChamp = new TimeChamp();
timeChamp.setChamps("Boat");
timeChamp.setTime((short)2001);
timeChampArray[0]=timeChamp;
timeChamp= new TimeChamp();
timeChamp.setChamps("Banana");
timeChamp.setTime((short)2000);
timeChampArray[1]=timeChamp;
timeChamp= new TimeChamp();
timeChamp.setChamps("Banana");
timeChamp.setTime((short)2001);
timeChampArray[2]=timeChamp;
//Call the sort method
new MainExample().getSort(timeChampArray);
}
//the sorting method
public void getSort(TimeChamp[] timeChamp)
{
Arrays.sort(timeChamp);
for(int i=0;i<timeChamp.length;i++)
{
System.out.print(timeChamp[i].getTime());
System.out.print(" ");
System.out.println(timeChamp[i].getChamps());
}
}
}
答案 3 :(得分:0)
我也去了。这是一个功能齐全,独立的解决方案。
import java.util.Arrays;
public class TimeAndChampSorter {
public static void main(String[] args) {
// prepare input
short[] time = { 2000, 2001, 2003, 2004, 2002, 2011, 2013 };
String[] champs = { "Boat", "Banana", "Boat", "Banana", "Cucumber",
"Carrot", "Carrot" };
printSorted(time, champs);
}
public static void printSorted(short[] time, String[] champs) {
// check arguments are of equal length
if (time.length != champs.length) {
throw new IllegalArgumentException(
"arrays time and champs must have equal length");
}
Tuple[] tuples = createTuples(time, champs);
Arrays.sort(tuples);
printTuples(tuples);
}
private static Tuple[] createTuples(short[] time, String[] champs) {
// create empty array of Tuples with correct length
Tuple[] tuples = new Tuple[champs.length];
// fill the tuples array
for (int i = 0; i < champs.length; i++) {
tuples[i] = new Tuple(time[i], champs[i]);
}
return tuples;
}
private static void printTuples(Tuple[] tuples) {
System.out.println("Time Champs\n");
for (Tuple tuple : tuples) {
System.out.println(tuple);
}
}
// static class to avoid having to create an instance of TimeAndChampSorter
static class Tuple implements Comparable<Tuple> {
short time;
String champ;
Tuple(short time, String champ) {
// make sure champ is not null to avoid having to test for nulls in
// compareTo
if (champ == null) {
throw new IllegalArgumentException("champ can not be null");
}
this.time = time;
this.champ = champ;
}
// method of Comparable interface determines the ordering
@Override
public int compareTo(Tuple other) {
return this.champ.compareTo(other.champ);
}
@Override
public String toString() {
return time + " " + champ;
}
}
}