Мой Java сканер не перестанет работать. Я пытался сделать метод, который сортирует строку по алфавиту, но сканер не остановит сканирование - PullRequest
0 голосов
/ 12 января 2020
import java.util.Scanner;

public class SortAlphabetically
{
    public static String sortString(String inputString) 
    { 
        char[] stringArr = new char[inputString.length()];
        char temp;
        int n;

        for (int i = 0; i < inputString.length(); i ++)
        {
            stringArr[i] = inputString.charAt(i);
        }

        n = stringArr.length;

        while ( n > 1)
        {
            for(int i=0;i<(stringArr.length-1);i++)
            {
                for(int j=i+1;j>0;j--)
                {
                    if(stringArr[j]<stringArr[j-1])
                    {
                        temp = stringArr[j-1];
                        stringArr[j-1] = stringArr[j];
                        stringArr[j] = temp;
                    }
                }
            }
        }

        String orderedWord = new String (stringArr);
        return orderedWord;
    }

    public static void main(String[] args)
    {
        Scanner scan = new Scanner(System.in);
        String finalWord;
        String initialWord;

        System.out.print("Please enter a word: "); // scan wont stop scanning

        initialWord = scan.nextLine();        
        finalWord = sortString(initialWord);

        System.out.println(finalWord);
    }
}

Ответы [ 2 ]

2 голосов
/ 12 января 2020

Вы забыли уменьшить n и, следовательно, while (n > 1) останется true навсегда. Уменьшите значение n следующим образом, и ваша программа будет работать должным образом:

while (n > 1) {
    for (int i = 0; i < (stringArr.length - 1); i++) {
        for (int j = i + 1; j > 0; j--) {
            if (stringArr[j] < stringArr[j - 1]) {
                temp = stringArr[j - 1];
                stringArr[j - 1] = stringArr[j];
                stringArr[j] = temp;
            }
        }
    }
    n--;
}

В примечании можно заменить следующий фрагмент кода

char[] stringArr = new char[inputString.length()];      

for (int i = 0; i < inputString.length(); i++) {
    stringArr[i] = inputString.charAt(i);
}

только одной строкой следует

char[] stringArr = inputString.toCharArray();
0 голосов
/ 13 января 2020

нет проблем со сканером, ваш while l oop работает бесконечно -> while (n> 1), так как n не уменьшается.

...