hasnext hang如何更正此错误

时间:2016-02-17 18:49:32

标签: java

import java.util.Arrays;
import java.util.Scanner;

public class Sort {

    public static void main(String[] args) {
        String temp = "";
        String a ="";

        String[] New;

        Scanner keyboard = new Scanner(System.in);
        //String s1 = new String(keyboard.nextLine());

        System.out.println("Please write your elements.");

        while(keyboard.hasNext()){          
            String currentString = keyboard.next();
            if(currentString.equals(" ")){
                System.out.println("Bye");
            }
            a += (currentString.charAt(0) + "").toUpperCase() + currentString.substring(1).toLowerCase()+",";
        }
        a = a.substring(0, a.length()-1);

        New = a.split(",");
        System.out.println("Your elements are" + Arrays.toString(New) + ".");

        for (int x = 1; x < New.length; x++) {
            for (int y = 0; y < New.length - x; y++) {
                if (New[y].compareTo(New[y + 1]) > 0) {
                    temp = New[y];
                    New[y] = New[y + 1];
                    New[y + 1] = temp;

                }
            }

        } for(int i=0;i<New.length;i++){
            System.out.println(New[i]);
        }
        /*System.out.println("In alphabethical order form is:");
        System.out.println(Arrays.toString(New));*/

    }
}

hasnext in infiniteloopı已经搜索stackowerflow但是答案无法修复错误。请帮助我。这是我的代码请写下你的元素。

ıfı按空格键并输入ı有问题。

再见 线程“main”中的异常java.lang.StringIndexOutOfBoundsException:字符串索引超出范围:-1     at java.lang.String.substring(Unknown Source)     在aa.Sort.main(Sort.java:38)

2 个答案:

答案 0 :(得分:1)

一些事情。您应该使用hasNextLine()nextLine()代替hasNext()next()

更改后,您的while循环永远不会结束,因为您只需打印Bye并继续循环。打印break后,添加Bye语句。

if(currentString.equals(" ")){
    System.out.println("Bye");
    break;
}

答案 1 :(得分:0)

从控制台读取与读取文件不同。从Console读取程序需要一个Stream,它将等待进一步的输入。

从文件进行测试时(仍然使用System.in进行扫描程序,使用Java程序),hasNext()将在文件末尾返回false,因为无法再进行输入。