2D array integer column in descending order

594 Views Asked by At

I am having trouble with "//Clinton's delegates in order from highest to lowest". I realize that it's currently in ascending order (I was more familiar with this), but it still isn't looping enough times to even do the ascending order properly. I would like for the third column to be in descending order --> Integer.parseInt(primary[row][2]).

import java.io.*;
public static void main(String[] args) throws IOException
{
    //Read text file
    FileReader fr = new FileReader("primary1.txt");
    BufferedReader br = new BufferedReader(fr);

    //2D array
    String[][] primary = new String[44][5];

    //Section break 
    System.out.println("1. The file contents are:\n");

    //Add column titles
    System.out.println("States\t\t\t\tCandidate#1\tVotes\t\tCandidate#2\tVotes");

    //Set delimiter as "/"
    String line; 
    int i=0;
    while((line=br.readLine())!=null){
        primary[i]=line.split("/");
        i++;
    }

    //Print text file
    for(int row=0; row<primary.length; row++){
        for(int col=0; col<primary[row].length; col++){
            //Add space between columns
            System.out.print(primary[row][col] + "\t\t");
        }

        //Newline
        System.out.println("");
    }        

    //Clinton's delegates in order from highest to lowest
    int temp=0;

    for(int row=0; row<primary.length-1; row++){
        //Parse Integer
        int delC = Integer.parseInt(primary[row][2]);
        int delC1 = Integer.parseInt(primary[row+1][2]);

        if(delC > delC1){
            temp=delC1;
            delC1=delC;
            delC=temp;
        }
        System.out.println(temp);
    }
}
2

There are 2 best solutions below

0
On BEST ANSWER

Try this:

public static void main(String[] args) throws IOException {
    //Read text file
    FileReader fr = new FileReader("primary1.txt");
    BufferedReader br = new BufferedReader(fr);

    //2D array
    String[][] primary = new String[44][5];

    //Section break 
    System.out.println("1. The file contents are:\n");

    //Add column titles
    System.out.println("States\t\t\t\tCandidate#1\tVotes\t\tCandidate#2\tVotes");

    //Set delimiter as "/"
    String line; 
    int i=0;
    while((line=br.readLine())!=null){
        primary[i]=line.split("/");
        i++;
    }

    //Print text file
    for(int row=0; row<primary.length; row++){
        for(int col=0; col<primary[row].length; col++){
            //Add space between columns
            System.out.print(primary[row][col] + "\t\t");
        }
        //Newline
        System.out.println();
    }        

    //Clinton's delegates in order from highest to lowest
    for(int row=0; row<primary.length-1; row++){            
        for(int row1=row+1; row1<primary.length; row1++) {
            //Parse Integer
            int delC = Integer.parseInt(primary[row][2]);
            int delC1 = Integer.parseInt(primary[row1][2]);
            if(delC < delC1){
                String[]tmpprimary = primary[row];
                primary[row] = primary[row1];
                primary[row1] = tmpprimary;               
            }
        }                
    }
    System.out.println("\n**************************** Order Descending *******************************");
    System.out.println("States\t\t\t\tCandidate#1\tVotes\t\tCandidate#2\tVotes");
    for(int row=0; row<primary.length; row++){
        for(int col=0; col<primary[row].length; col++){
            //Add space between columns
            System.out.print(primary[row][col] + "\t\t");
        }
        //Newline
        System.out.println();
    } 
}
0
On

I think your code looks like trying to do bubble sort. If that is what you are trying to do then you need to have 2 for loops to iterate the contents and swap them. Since you are using String array hence the array elements needs to be swapped. not just numbers in the array for display. See the following modified code.

I see you have tagged with selection sort. Let me know if you need that. Bubble sort below because your looked like doing that.

public static void main(String[] args) throws IOException {
    // Read text file
    FileReader fr = new FileReader("primary1.txt");
    BufferedReader br = new BufferedReader(fr);

    // 2D array
    String[][] primary = new String[44][5];

    // Section break
    System.out.println("1. The file contents are:\n");

    // Add column titles
    System.out.println("States\t\t\t\tCandidate#1\tVotes\t\tCandidate#2\tVotes");

    // Set delimiter as "/"
    String line;
    int i = 0;
    while ((line = br.readLine()) != null) {
        primary[i] = line.split("/");
        i++;
    }

    // Print text file
    for (int row = 0; row < primary.length; row++) {
        for (int col = 0; col < primary[row].length; col++) {
            // Add space between columns
            System.out.print(primary[row][col] + "\t\t");
        }

        // Newline
        System.out.println("");
    }

    // Clinton's delegates in order from highest to lowest
    int temp = 0;
    // bubble sort
    for (int row = 0; row < primary.length - 1; row++) {
        for (int k = row + 1; k < primary.length; k++) {
            // Parse Integer
            int delC = Integer.parseInt(primary[row][2]);
            int delC1 = Integer.parseInt(primary[k][2]);
            int delO = Integer.parseInt(primary[row][4]);

            if (delC >= delC1) {
                // swap contents
                swap(primary, row, k);
                temp = delC1;
                delC1 = delC;
                delC = temp;
            }
        }
        // System.out.println(temp);
    }

    // Print output
    for (int row = 0; row < primary.length; row++) {
        System.out.println(primary[row][2]);
    }
}

private static void swap(String[][] primary, int row, int k) {
    String[] temp = primary[k];
    primary[k] = primary[row];
    primary[row] = temp;
}