我的 Java 扫描器不会停止 运行。我正在尝试制作一种按字母顺序对字符串进行排序的方法,但扫描仪不会停止扫描
My Java Scanner wont stop running. I was trying make a method that alphabetically sorts a string but the scanner wont stop scanning
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);
}
}
您忘记减少 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();
扫描仪没有问题,您的 while 循环是 运行 无限 -> while(n>1),因为 n 不会递减。
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);
}
}
您忘记减少 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();
扫描仪没有问题,您的 while 循环是 运行 无限 -> while(n>1),因为 n 不会递减。