Как отсортировать список массивов? - PullRequest
0 голосов
/ 08 октября 2010

Привет, ребята. Спасибо за серьезную помощь относительно моих препятствий. Что моя проблема на этот раз, как я могу отсортировать список массивов, который предоставляется в моем коде, в основном, не знаю, что мне нужно добавить в приведенном ниже коде, просто для того, чтобы просто найти его, у меня есть 3 массива, которые я хочу превратить их в один массив Таким образом, они могут быть отсортированы без догадок и попыток (если 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 ]

4 голосов
/ 08 октября 2010

Используйте Collections.sort() и убедитесь, что ваш класс реализует Comparable или используйте что-то вроде этого:

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

        public int compare(T o1, T o2) {
            return o1.compareTo(o2);
        }});
2 голосов
/ 08 октября 2010

Вы можете использовать что-то вроде input.nextInt () для чтения следующего целого числа вместо следующей строки.Я не вижу причин, почему вы храните в своем коде строки вместо целых.Затем вы можете использовать то, что другие предложили объединить списки и / или отсортировать их.

Я также думаю, что вам следует больше читать самостоятельно.Ответы на некоторые вопросы, заданные вами в комментариях, приведены в документации по Java.Когда кто-то публикует предложение, по крайней мере, посмотрите его в API и попытайтесь понять его.Люди не будут давать вам весь код здесь, они просто дадут вам подсказки, которым вы должны следовать.

1 голос
/ 08 октября 2010

Для сортировки ArrayList вы можете использовать метод Collections.sort(); либо только со списком Comparable элементов, либо с Comparator.

Это самый простой способ.

В вашем случае Collections.sort(scores) сделает это.

0 голосов
/ 08 октября 2010

Если вам абсолютно необходимо, чтобы список всегда сортировался, не используйте ArrayList, используйте PriorityQueue . Он может быть создан для использования естественного порядка сортировки содержимого (то есть через интерфейс Comparable для каждого объекта) или через Comparator. Преимущество PriorityQueue в том, что он всегда сортируется даже после добавления новых элементов.

0 голосов
/ 08 октября 2010

Я помог ответить на это в вашем предыдущем посте.Тем не менее, я добавлю это и здесь.Я думаю, что вы можете хотеть список вместо списка строк.Это позволит вам естественным образом отсортировать количество попыток конечного пользователя.В дополнение к другим ответам здесь, самый простой способ состоит в том, чтобы затем вызвать Collections.sort(list)

. Кроме того, метод toString() используется для целей отладки или для предоставления удобочитаемой информации.Он не должен использоваться для создания объектов так, как вы его используете.Просто мой .02

0 голосов
/ 08 октября 2010

Чтобы составить один список из трех, вы можете использовать alist.addAll(anotherList). Затем сортируйте aList, как предлагает Коллин Хеберт.

0 голосов
/ 08 октября 2010

Чтобы отсортировать список, используйте java.util.Collections.sort( list ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...