如何对数组列表进行排序?

时间:2010-10-08 12:47:09

标签: java arraylist

嘿,伙计们。关于我的障碍的主要帮助thanx。 这次我的问题是什么,如何排序我的代码中提供的数组列表基本上不知道我需要在下面提供的代码中添加什么,只是为了简单地给它我有3个arraylist我想让它们成为一个arraylist ,所以他们可以在猜测和尝试中排序(如果2个玩家有相同的猜测,那么时间应该确定)。 很难解释它,但我尽我所能.............最好的事情是运行它然后你会发现它是什么问题是什么?

以下是代码:

    import java.util.*;
import java.util.Scanner.*;
import java.util.ArrayList.*;


public class Main {

public static String ToString(int a, double b, String c)
    {
        String aS = Integer.toString(a);
        String bS = Double.toString(b);
                String scoreList = (aS + "\t\t" + bS + "\t\t" + c);

        return scoreList;
    }

private static void start() {


 int tries = 0 ;

 int guess = -1;
 String name ;
 String quit = "quit";
 String y = "yes";
 String n = "no";
 String currentGuess;


 String another = ("y") ;
 Scanner input = new Scanner (System.in);

 ArrayList<String> scores = new ArrayList<String>();
    boolean a=false;

  do {
      a=false;
     int answer = (int) (Math.random() * 1000 + 1) ;
    System.out.println( " Welcome to Guessing Game " )  ;
    System.out.print("Please enter a number between 1 and 1000 : ");
                    currentGuess = input.nextLine();
            long startTime = System.currentTimeMillis();





      do
      {


               if (currentGuess.equalsIgnoreCase(quit))
        {
            System.out.println("Leaving Us So Soon?");
            System.exit(0);
        }

               try    {
            guess = Integer.parseInt(currentGuess);
              } catch (NumberFormatException nfe) 
                        {
            System.out.println(" Dude Can You Read, Only Digits ");
                        currentGuess = input.nextLine();


            }

        if (guess < 1 || guess > 1000)
        {
            System.out.println("Stupid Guess I Wont Count That.");
                        currentGuess = input.nextLine();

        }
       if (guess < answer )
          {
            System.out.println("too low "+answer);
            currentGuess = input.nextLine();
                        tries++;
        }


    else if(guess  > answer )
        {
            System.out.println("too high "+answer);
            currentGuess = input.nextLine();
                        tries++;
        }


    else if (guess == answer)
        {       
            //stop stop watch
            long endTime = System.currentTimeMillis();
            //calculate game time
            long gameTime = endTime - startTime;
            System.out.println("You Rock Dude, Good Job!");

                        System.out.println("You guessed " + tries + " times in " + (int)(gameTime/1000) + " seconds.");
                        System.out.println("Please enter your name.");

                  name = input.nextLine();
                          //create score object
             String TOString =ToString(tries, gameTime, name);
            //add score to arrayList
            scores.add(TOString);

             boolean s = false  ; 
             while (s==false)
              {


                     System.out.print("Want to go again?(y/n).....");
                     currentGuess = input.nextLine();
                      if (currentGuess.matches("y"))
            {
                     System.out.println("HighScore: \nGuess \t  Time in milisec\tName");
                //print out high score list
                for (int i = 0;i < scores.size(); i++)
                {
                System.out.println(scores.get(i));
                }
//                                 Main.start
                     s=true;

            }

                     //if user doesn't want to play again

                             if (currentGuess.matches("n"))
            {
                System.out.println("HighScore:\nGuess \tTime in milisec\tName");
                //print out high score list
                for (int i = 0;i < scores.size(); i++)
                {
                System.out.println(scores.get(i));
                }
                                System.out.println("Thanx For Playing.");
                a=true;

                                s=true;
                                 System.exit(0);  
                    } 
       }
          }

        } while (guess != answer);

  }while(a==false);

}

public static void main(String[] args) {
//   ArrayList<Score> scores = new ArrayList<Score>();
    Main.start();
    }
}

7 个答案:

答案 0 :(得分:4)

使用Collections.sort()并确保您的班级实施Comparable或使用以下内容:

Collections.sort(list, new Comparator<T>() {

        public int compare(T o1, T o2) {
            return o1.compareTo(o2);
        }});

答案 1 :(得分:2)

您可以使用input.nextInt()之类的内容来读取下一个整数而不是下一个String。我没有理由在代码中存储字符串而不是整数。然后,您可以使用其他人建议的内容来组合列表和/或对其进行排序。

我也认为你应该自己做一些阅读。您在评论中提出的一些问题将在Java文档中得到解答。 当有人发布建议时,至少要在API中查找并尝试理解它。人们不会在这里给你所有的代码,他们只会给你提示你需要遵循的。

答案 2 :(得分:1)

要对ArrayList进行排序,您可以使用Collections.sort()方法;要么只有Comparable元素列表,要么只有Comparator

这是最简单的方法。

在您的情况下Collections.sort(scores)会做的事情。

答案 3 :(得分:0)

要对列表进行排序,请使用java.util.Collections.sort( list )

答案 4 :(得分:0)

要制作三个中的一个列表,您可以使用alist.addAll(anotherList)。然后按照Collin Hebert的建议对aList进行排序。

答案 5 :(得分:0)

我在上一篇文章中帮助回答了这个问题。但是,我也会在这里添加它。我想你可能想要一个List而不是一个字符串列表。这将允许您以自然的方式对最终用户尝试的尝试次数进行排序。除了这里的其他答案,最简单的方法是拨打Collections.sort(list)

此外,toString()方法用于调试目的,或提供人类可读信息。它不应该用于以您使用它的方式创建对象。只是我的.02

答案 6 :(得分:0)

如果您绝对需要始终对列表进行排序,请不要使用ArrayList,请使用PriorityQueue。它可以构造为使用内容的自然排序顺序(即通过每个对象上的Comparable接口),或通过比较器。 PriorityQueue的优点是,即使添加了新项目,它也始终排序。

相关问题