Efie
Efie

Reputation: 1680

Sorting Strings as inserted into array in Java

I'm trying to create a program that takes user input and sorts it alphabetically as it comes in using compareTo String operations (not array.sort) and prints the final sorted array at the end. I've got most of the body of this problem down but am lost once I get to the sort function. Does anyone have any ideas on how I might be able to finish out the SortInsert method?

import java.util.*;
public class SortAsInserted {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int array_size = GetArraySize();
        String[] myArray = new String[array_size];
        for (int i = 0; i < array_size; i++){
            String nextString = GetNextString();
            String[] sortedArray = SortInsert(nextString, myArray);
        }
        PrintArray(sortedArray);
    }



        input.close();
        }

    }




    public static String[] SortInsert(String nextString, String[] myArray){
        for(int i = 0; i < myArray.length;)
            if (nextString.compareToIgnoreCase(myArray[i]) > 0) {
                i++;
                //if current text is less(alphabetically) than position in Array
            }else if (nextString.compareToIgnoreCase(myArray[i]) < 0){

            }

        }

    public static int GetArraySize(){
        Scanner input = new Scanner(System.in);
        System.out.print("How many items are you entering?: ");
        int items_in_array = input.nextInt();
        return items_in_array;


    }

    public static void PrintArray(String[] x) {
        for (int i = 0; i < x.length; i++){
            System.out.print(x[i]);
        }

    }

    public static String GetNextString(){
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the next string: ");
        String next_string = input.nextLine();
        return next_string;

        }


}

Upvotes: 1

Views: 566

Answers (3)

Always Learning
Always Learning

Reputation: 5581

There are a number of problems with this code. First I'll answer your immediate question, then enumerate some of the other problems.

The SortInsert method takes a String[] that will have been initialized with null values, so you will need to take that into account. The for loop would look something like this. (I'm using comments instead of writing the actual code since I'm not doing the project)

for (int i=0; i<myArray.length; ++i) {
    if (myArray[i] == null) { 
        // we found a blank spot.  use it to hold nextString.
        break;
    } else if (nexString.compareToIgnoreCase(myArray[i]) < 0) { 
        // nextString should be in spot i, so make room for it
        // by shuffling along whatever is in the array at "i" and later
        // by one place, then put nextString into position "i"
        break;
    }
    // otherwise we'll just move to the next position to check
}

Now for the other issues.

  • You have a Scanner object in main that is never used. There's no point in having it and closing it at the end if your other methods make their own.
  • myArray will always be the sorted array so there's no point in making a local variable called sortedArray and return it from SortInsert. Note that your attempt to print sortedArray would fail anyway because that local variable is only in scope within the for loop.
  • When printing it should be myArray being passed to PrintArray.

Upvotes: 1

Matthew Read
Matthew Read

Reputation: 1860

Once you find the position you wish to insert at, you have to shift all of the following elements down by one. Something like the following:

String temp = array[position];
for (int j = position+1; j < array_size-1; j++) {
    String temp2 = array[j];
    array[j] = temp;
    temp = temp2;
}
array[array_size-1] = temp;

Upvotes: 0

Edward Doolittle
Edward Doolittle

Reputation: 4100

If you're going to sort as you go, the TreeMap data structure is what you should be using, not an array. However, if you want to sort as you go with an array, you need to add some lines into your else if clause in SortInsert (should be sortInsert, BTW). (Another question: why is it else if rather than just else?)

The lines should create a new array of size one greater than the existing array, copy the first i-1 elements of the old array to the new array, put the new element in position i, then copy the remaining elements of the old array into positions one greater in the new array.

Upvotes: 0

Related Questions