使用扫描仪时循环hasNext()

时间:2016-11-01 14:33:37

标签: java arrays while-loop java.util.scanner

我尝试运行工作时遇到问题。 我必须通过控制台输入一些数字,它应按升序排列并保存到数组中。 我认为hasNext方法与String.nextLine()运行良好,但它似乎仍处于循环中。 谢谢你的帮助

import java.util.Scanner;

public class OrdinamentoMaggiore{
    public static void main(String[] args){
        Scanner sc = new Scanner(System.in);
        System.out.println("Digita dei numeri e te li mettero' in ordine crescente: ");
        String Numeri = sc.nextLine();
        int dimArray = 0;
        while (sc.hasNext(Numeri)){
            dimArray++; 
            System.out.println("Dimensione array: " + dimArray);
        }
        int min = 0, max = 0, temp;
        int[] mioArray = new int[dimArray]; 
        for (int i = 0; i <= mioArray.length; i++){
            mioArray[i] = Integer.parseInt(sc.next(Numeri));
        }    
        for (int j = 0; j <= mioArray.length; j++){
            for (int h = 1; h <= mioArray.length; h++){
                if (mioArray[j] < mioArray[h]){
                    continue;
                }
                else {
                    temp = mioArray[j];
                    mioArray[j] = mioArray[h];
                    mioArray[h] = temp;
                }
            }
        }
        System.out.println("Min: " + mioArray[0]);
        System.out.println("Max: " + mioArray[dimArray]);
        sc.close();
    }
}

1 个答案:

答案 0 :(得分:1)

问题是您正在读取变量Numeri的第一行输入。然后,您在hasNext上致电Numeri,而Scanner.hasNext的工作方式与您认为的不同。 List<Integer> numberList = new ArrayList<>(); while (sc.hasNextInt()) { numberList.add(sc.nextInt()); } Collections.sort(numberList); 被定义为here

  

如果下一个标记与构造的模式匹配,则返回true   指定的字符串。

所以它使用Numeri中的字符串作为它需要匹配的模式。绝对不是你想要的。

我会推荐一个列表并执行以下操作:

public static List<CustomDTO> mostCommonKeywords { get; set; }

列表很不错,因为您不必明确告诉它大小。这避免了你的第一次循环。现在,循环继续从System.in读取,直到它遇到一个不是整数的东西并将它们添加到列表中。

最后,它使用Collections.sort对列表进行排序。这有多美?您的整个程序只需几行即可复制。一定要尝试学习可用的库和函数。它可以为您节省大量的时间和精力。如果您有疑问,请告诉我。