2016-04-27 7 views
0

この配列を対応する名前で最高から最低まで並べ替えることができます。配列のスコアを最低から最高まで短くする方法を作ったが、一緒にプリントアウトするために名前とスコアを結びつける方法を見つけるのが難しい。 は、あなたがオブジェクトを含む、二つの平行アレイを使用して、代わりに単一のものを使用しているという問題があるJava配列:スコアをソートして適切な名前で表示する

import java.util.*; 

/** 
* This program will prompt the user to enter the number of game players, 
* the game players' names, and their scores, and prints game players name 
* and scores in decreasing order of their scores. 
* 
*/ 
//class name 
public class SortGameScores 
{ 
    // main program start 
    public static void main(String[] args) 
    { 
     //declaring variable 
     int numberOfPlayers; 

     //create new scanner 
     Scanner input = new Scanner(System.in); 

     //Ask user to enter number of players and record number 
     System.out.print("Enter number of players: "); 
     numberOfPlayers = input.nextInt(); 

     //Create and declare arrays using previous input 
     int[] player = new int [numberOfPlayers]; 
     String[] name = new String[numberOfPlayers]; 
     int[] score = new int [numberOfPlayers]; 

     //Ask user to enter each player's name 
     for (int i = 0; i < player.length; i++) 
     { 
      System.out.print("Enter player's name: "); 
      name[i] = input.next(); 
     } 

     //Ask user to enter each player's score 
     for (int i = 0; i < player.length; i++) 
     { 
     System.out.print("Enter player's score: "); 
     score[i] = input.nextInt(); 

     } 

     //Print name and score for each array. 
     for (int i = 0; i < numberOfPlayers; i++) 
     { 
      System.out.println("Player: " + name [i] + " , " + "score: " + score [i]); 

     } 
    }//Close Main 

    //method that will assort each score lowest to highest 
    public static void selectionSort(int[] list) 
    { 
     for (int i = 0; i < list.length - 1; i++) 
     { 
      int currentMin = list[i]; 
      int currentMinIndex = i; 


      for (int j = i + 1; j < list.length; j++) 
      { 
       if (currentMin > list[j]) 
       { 
        currentMin = list[j]; 
        currentMinIndex = j; 
       } 
      } 
      if (currentMinIndex != i) 
      { 
       list[currentMinIndex] = list[i]; 
       list[i] = currentMin; 
      } 
     } 

    }//Close method selectionSort 
}//close Class 
+0

使用のSortedMapを...それはあなたの鍵を並べ替えるので、あなたでしょうキーと名前として値を設定し、すべての作業を行います。 –

+0

もし彼らがどのような見た目で始まる同じ索引であれば...あなたの選択をしている間にスコア上で並べ替えると、名前でもやるべきです....名前や何でも比較しないでください – 3kings

答えて

1

(私はこれと同じ理由のための私の方法と呼ばれていません)。

は、namescoreフィールドで、クラスPlayerを作成Playerの配列を作成し、そのスコア(Comparator<Player>を使用)で選手を並べ替えます。

+0

私はこれを学ぶための例または良い情報源ですが、私はプログラミングのときにそれが理由です。 –

+0

ありがとうございました。 –

+0

https://docs.oracle.com/javase/tutorial/java/javaOO/ –

0

あなたがより良いクラスを使用してデータを記述:

public class Player { 
    private String name; 
    private int score; 

    public Player(String name, int score) { 
     this.name = name; 
     this.score = score; 
    } 

    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
    public int getScore() { 
     return score; 
    } 
    public void setScore(int score) { 
     this.score = score; 
    } 
} 

そしてComparator<Player>を使用してPlayer[]内の要素を並べ替える:

class ByScoreComparator implements Comparator<Player> { 
    @Override public int compare(Player p1, Player p2) { 
     return Integer.compare(p1.getScore(), p2.getScore()); 
    } 
} 

// ... 

Arrays.sort(players, new ByScoreComparator()); 
+0

最初の部分は2つの配列の結合に役立っていますか? –

+0

@ d.glezはい、2つの配列、スコア、名前の代わりに、1つのプレイヤー配列があります。または、2つの別々の配列を持つことが問題の要件ですか? – ericbn

+0

必要な数だけ使用できます。 –

関連する問題