0

I am trying to rank my array in my assignment but I don't understand how to do it. Can someone help me? Thank you in advance

I added an image of the full assignment instructions.

Here is an image of my assignment:

enter image description here

And here is my code:

public class Assignment_3_Question_1 {
    // Here, I predefined my data set.
    static int referenceScore[][]={{39,40,17,35,42,6},{40,41,27,41,42,36},{42,40,26,42,42,35}};
    static int finalScore[][]={{39,40,17,35,42,6},{40,41,27,41,42,36},{42,40,26,42,42,35}};
    static int scoreAmongOthers[][]=new int[3][6];
    static int max;
    static int rank = 1;
    static int count = 0;
    static int total = 0;
    public static void main(String[] args) {
        for (int k = 0; k < 10; k++){
            max = referenceScore[0][0];
            for (int team = 0; team < 3; team++){
                for (int position = 0; position < 6; position++){
                    if (max < referenceScore[team][position]){
                        max = referenceScore[team][position];
                    }
                }
            }
            for (int x = 0; x < 3; x++){
                for(int y = 0; y < 6; y++){
                    if(referenceScore[x][y]==max){
                        scoreAmongOthers[x][y]=rank;
                        referenceScore[x][y]=0;
                        count++;
                    }
                }
            }
            rank = count + 1;
        }
        // Print out the  
        System.out.println("\tP1\tP2\tP3\tP4\tP5\tP6\tTotal\tRank");

        // Prints out the results and the rank for each team
        for(int teamNb = 0; teamNb<3; teamNb++){
            System.out.print("Team"+(teamNb+1));
            for(int p=0; p<6; p++){
                total = total + finalScore[teamNb][p];
                System.out.print("\t" + finalScore[teamNb][p]+"("+ scoreAmongOthers[teamNb][p]+") ");
            }
            System.out.print("\t"+ total);
            total = 0;
            System.out.println();
        }
    }
}
5
  • Shouldn't the array {3, 3, 4, 2},be ranked {2, 2, 3, 1}? What parts of the assignment do you feel you can code? You've written a lot of code for someone that doesn't understand the problem statement. You can also use methods to break up your code into smaller, more easily testable pieces. Commented Mar 15, 2020 at 23:06
  • Do you have any limitations on your implementation? I'm thinking to use a linked list. Is that allowed? Commented Mar 16, 2020 at 1:47
  • What is a linked list? Commented Mar 16, 2020 at 1:48
  • docs.oracle.com/javase/7/docs/api/java/util/LinkedList.html Commented Mar 16, 2020 at 1:49
  • Here’s what our teacher told us about how we could do the ranking: it isn’t the same as sorting. You create a new array, no need to change the original array.1- create a method to rank a 1-D array. 2-Algorithm of ranking: for each element in the input array, count how many elements are bigger than it, then its rank is the number+1 Commented Mar 16, 2020 at 2:08

1 Answer 1

2

So I understand that the point of the exercise is to practice working with arrays. You have outlined the required algorithm in your comment. Here is my implementation.

public class RankScores {
    private static int getRank(int[][] scores, int rowIndex, int columnIndex) {
        int count = 0;
        int score = scores[rowIndex][columnIndex];
        for (int row = 0; row < scores.length; row++) {
            for (int col = 0; col < scores[row].length; col++) {
                if (scores[row][col] > score) {
                    count++;
                }
            }
        }
        return count + 1;
    }

    private static int getTeamRank(int[] scores, int index) {
        int count = 0;
        int score = scores[index];
        for (int i = 0; i < scores.length; i++) {
            if (scores[i] > score) {
                count++;
            }
        }
        return count + 1;
    }

    public static void main(String[] args) {
        int referenceScore[][]={{39,40,17,35,42,6},{40,41,27,41,42,36},{42,40,26,42,42,35}};
        int ranks[][] = new int[referenceScore.length][];
        int totals[] = new int[referenceScore.length]; // total score for each team
        int teamRanks[] = new int[referenceScore.length];
        for (int row = 0; row < ranks.length; row++) {
            ranks[row] = new int[referenceScore[row].length];
            totals[row] = 0;
            for (int col = 0; col < ranks[row].length; col++) {
                ranks[row][col] = getRank(referenceScore, row, col);
                totals[row] += referenceScore[row][col];
            }
        }
        for (int team = 0; team < teamRanks.length; team++) {
            teamRanks[team] = getTeamRank(totals, team);
        }
        System.out.println("          P1     P2     P3     P4     P5     P6   Total Rank");
        for (int row = 0; row < ranks.length; row++) {
            System.out.print("Team " + (row + 1) + " ");
            for (int col = 0; col < ranks[row].length; col++) {
                System.out.printf("%2d(%2d) ", referenceScore[row][col], ranks[row][col]);
            }
            System.out.println(" " + totals[row] + "  " + teamRanks[row]);
        }
    }
}

Running the above code produces the following output.

          P1     P2     P3     P4     P5     P6   Total Rank
Team 1 39(11) 40( 8) 17(17) 35(13) 42( 1)  6(18)   179   3
Team 2 40( 8) 41( 6) 27(15) 41( 6) 42( 1) 36(12)   227   1
Team 3 42( 1) 40( 8) 26(16) 42( 1) 42( 1) 35(13)   227   1
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you so much for your help, this is way simpler than what I did :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.