因此该程序应允许用户输入10个分数,并在下一行按升序打印这些分数。由于某种原因,它允许我输入分数,但是下面的行只是填充0而不是按升序对输入进行排序。我不知道为什么,但任何输入都会有所帮助。
public static void main(String[] args) {
Scanner keyboard = new Scanner(System.in);
System.out
.println("Enter up to 35 scores between 0 and 100, -1 to stop:");
int[] score = new int[35];
int count = 0;
int sum = 0;
String scores = "";
for (int i = 0; i < score.length; i++) {
score[i] = keyboard.nextInt();
if (score[i] >= 0) {
scores = scores + score[i] + " ";
count++;
sum = sum + score[i];
} else
i = score.length + 1;
}
for (int i = 1; i < score.length; i++) {
int x;
int temp;
x = score[i];
temp = score[i];
for (x = i - 1; x >= 0 && score[x] > temp; x--) {
score[x + 1] = score[x];
}
score[x + 1] = temp;
}
System.out.printf("The %d scores you entered are: \n%s", count, scores);
System.out.println();
System.out.printf("The %d scored sorted in nondecreasing order are:\n",
count);
int k=1;
for (k=1; k <= count; k++) {
if (k % 11 == 0) {
System.out.println();
} else {
System.out.printf("%5d", score[k]);
}
}
for (int i = 1; i <= count; i++) {
if (i % 11 == 0) {
System.out.println();
} else {
System.out.printf("%5d", score[i]);
}
for (int j = 1; j < count; j++) {
if (Integer.compare(score[i], score[j]) < 0) {
int temp = score[i];
score[i] = score[j];
score[j] = temp;
}
}
}
答案 0 :(得分:1)
我同意关于学习调试的评论。你编写代码的方式很明显,你是初学者,所以这里是帮助你的答案。要回答您的问题,您的程序中会出现几个逻辑错误。
你可以简单地使用break来退出第一个for循环。所以在else语句中只写break;而不是i = score.length + 1;
接下来......错误的是您要对整个数组进行排序...但是,由于您在输入-1之前可能只输入了5或6个元素,因此您的前5个或6个元素将具有值和该分数中的所有其他值数组为0.如果你对整个数组进行排序,你显然会将前面的0和实际分数带到数组的后面。这是您的问题的答案。从i = 0到i&lt;计数。这将解决您的一些问题,但您还有更多问题。
还有其他一些问题。我希望你能够调试并找出答案。