Проблеми със сортирането при избор

Чувствам се така, сякаш съм толкова близо, просто не знам какво да поставя в „If Statment“ и реда на нещата. Моля помогнете. Също така не сте сигурни какво да правите със сигурност със суап метода?

private static void selectionSort(String[] words, int numWords)
{
     for (int i = 0; i < words.length; i++)  
    {
        int min = i;
        for(int j = i+1; j < words.length; j++)
        {
            if(words[index]<words[minIndex])
            {
                min = j;
            }

        swap(words, i, j);
        }
    } 
}

public static int indexOfNextSmallest(String[] words, int startIndex) 
{
    int minIndex = startIndex;

    for(int i = startIndex; i < words.length; i++) {
        if(words[i].compareTo(words[minIndex]) < 0)
            minIndex = i;
    }
    return minIndex;
}

private static void swap(String[] words, int i, int j)
{
    String swap = words[i];
    words[i] = words[j];
    words[j] = swap;
}

Опитвам се да добавя валидиране на потребител. Чудя се дали да го направя в метода по-долу или нагоре в основния метод?

private static int getMenuChoice(Scanner stdIn)
{
    int option = 0;

    System.out.println("\n1:  Add Word");
    System.out.println("2:  Remove Word");
    System.out.println("3:  Print Words");
    System.out.println("4:  Quit");
    System.out.print("Choose an option(1-4): ");
    option = stdIn.nextInt();

    return option;
}

person user3525012    schedule 08.05.2014    source източник
comment
Какъв точно е вашият въпрос?   -  person Pankaj Gadge    schedule 08.05.2014


Отговори (1)


Опитвате се да сравните 2 низа с помощта на оператор '‹', който не работи. По-скоро трябва да използвате функцията compareTo, за да сравните 2 обекта, които са Сравними.

   if(words[index]<words[minIndex])   // doesnt work - Compilation error
   {
            min = j;
   }

Променете вашето if условие в избора на метод Sort както следва:

    if(words[j].comapareTo(words[min]) < 0)
    {
            min = j;
    }

Също така трябва да разменяте думите при индекс i & min, вместо да разменяте i & j

  swap(words, i, j);  //wrong

  swap(words, i, min); //correct -  as it swaps min word & current word
person Kakarot    schedule 08.05.2014
comment
добре, има смисъл, друг въпрос. Добавих int minIndex към заглавието selectionSort, какво да използвам вместо индекс? - person user3525012; 09.05.2014
comment
private static void selectionSort(String[] words, int numWords, int minIndex) { for (int i = 0; i ‹ words.length; i++) { int min = i; for(int j = i+1; j ‹ words.length; j++) { if(words[index].compareTo(words[minIndex]) ‹ 0) { min = j; } размяна (думи, i, j); } } } - person user3525012; 09.05.2014
comment
Използвайте j вместо индекс. Също така разменете i и min - person Kakarot; 09.05.2014
comment
работи чудесно. Благодаря много. просто добави друг метод към примера. чудя се дали да добавя потребителско валидиране там или в основния метод? - person user3525012; 09.05.2014
comment
зависи от това какво валидирате и от нуждата - person Kakarot; 09.05.2014
comment
добре, че за този метод/област трябва да потвърдя, че въвеждат 1-4, а не буква. Друга област, която трябва да потвърдя, въвежда дума, а не число. - person user3525012; 09.05.2014
comment
Валидирането трябва да се извършва, когато потребителят въвежда данните, а не когато искате да сортирате данните - person Kakarot; 09.05.2014
comment
показан досега метод. Трябва ли да добавя цикъл while в метода? - person user3525012; 09.05.2014