我尝试运行工作时遇到问题。 我必须通过控制台输入一些数字,它应按升序排列并保存到数组中。 我认为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();
}
}
答案 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对列表进行排序。这有多美?您的整个程序只需几行即可复制。一定要尝试学习可用的库和函数。它可以为您节省大量的时间和精力。如果您有疑问,请告诉我。