gpt4 book ai didi

java - 如何以数字0退出循环?但现在我有其他问题

转载 作者:行者123 更新时间:2023-12-01 16:01:23 27 4
gpt4 key购买 nike

package hw3;

public class Main {
public static void main(String[] args) {
final int NumberOfElements = 1000;
int[] num = new int[NumberOfElements];
int var = 0;
//create input
java.util.Scanner input = new java.util.Scanner(System.in);
for (int i = 0; i < NumberOfElements; i++) {
System.out.print("Enter any positive number or enter 0 to stop: ");
num[i] = input.nextInt();
var++;
if (num[i] == 0)

break;

}
Arrays.sort( num, 0, var);
int i;
for (i = 0; i < var; i++) {
System.out.print(" " + num[i]);


}
}
}

编写一个 Java 程序,读取每行输入一个的正整数序列。当输入整数“0”时,程序停止读取。程序会将它们按升序排序并输出。例如:5 1 7 12 36 8 0输出:1 5 7 8 12 36

最佳答案

尝试理解问题:分为三个步骤。
步骤1:获取用户的输入。继续获取输入,直到用户输入 0
第2步:排序
第三步:打印结果

第 1 步:您的 for循环几乎是正确的。
但是 for 循环应该在获得输入后立即结束。
在下面的代码中,

   num[i] = input.nextInt();
var++;
if (num[i] == 0)
break;

您正在将用户输入添加到数组中,然后检查它是否为 0 。这意味着0也将成为您数组的一部分。如果您不希望这样,则应检查输入并将其添加到数组中(仅当它不是 0 时) 。

另请注意 i 的声明之前for环形。因为我们在 for 循环之后需要它。为什么?见下文。

int i = 0; 
for (i = 0; i < NumberOfElements; i++) {
int n = input.nextInt();
if (n == 0)
break;
else
num[i] = n;
} //for loop ends here

第 2 步:排序
Arrays.sort(num);

第 3 步:打印输出:

for (i = 0; i < num.length; i++) {
System.out.print(" " + num[i]);
}

问题是,在步骤 2 中,对 1000 个元素的数组进行了排序,而实际上您只需要考虑用户输入的元素数量。您最初并不知道这就是您创建一个包含 1000 个元素的数组的原因。但是,此时(第 2 步之后)您确实知道用户输入了多少个元素。这存在于 i

第 1 步和第 2 步之间的新步骤:创建一个仅包含用户输入的元素的新数组。
步骤1.5:

int[] newArray = Arrays.copyOf(num, i);

现在对这个新数组进行排序,然后打印它(与您的代码相同,但使用我们刚刚创建的新数组)

Arrays.sort(newArray);

for (i = 0; i < newArray.length; i++) {
System.out.print(" " + newArray[i]);
}

注释:
1. 实现此目的的理想方法是使用列表而不是数组,但可能由于这是家庭作业,您可能必须使用数组。

  1. 由于这是作业,我不知道您是否可以使用 Arrays.sortArrays.copy 。您的教授可能对此皱眉,因为也许他的意图是您通过 for 学习该语言的构造。 , ifwhile 。在这种情况下,您必须执行步骤 1.5(使数组具有正确的大小)并自行排序。
    这并不困难(但请记住,这不是最好的方法,除了家庭作业)

复制数组(自制)(代替上面的步骤 1.4)

int[] newArray = new int[i]
for(int j=0; j<i; j++){
newArray[j] = num[j];
}

排序(自制)(代替上面的步骤 2):

  1. 循环元素
  2. 如果一个元素大于前一个元素,则交换它们(按升序排列,前一个元素始终小于或等于下一个元素)

有两个循环,因为您必须连续进行比较:第一个元素,与整个数组比较,将其放在正确的位置,第二个元素与整个数组比较等等...)

  for(int j=0; j<newArray.length; j++) {
for(int k=0; k<newArray.length; k++) {
if(newArray[k] > newArray[j]) {
//the swap logic:
int t = newArray[k];
newArray[k] = newArray[j];
newArray[j] = t;
}
}
}

尝试了解到底发生了什么,而不是仅仅复制粘贴。一旦理解了自制的排序逻辑,请考虑一下:排序 or(int k=0; k<newArray.length; k++) { 中的第二个 for 循环实际上可以是for(int k=0; k<newArray.length; k++) { 。为什么?

您的打印循环将保持您编写的方式,但您将打印 newArray而不是num 。您可能想要将循环变量更改为 int j或其他什么,但是i也会起作用。 ( i 现在保存输入的数量,所以我不会将它用于任何其他目的。但这只是一种编码方式。技术上没有区别 - 代码将以相同的方式工作)

我不会组合这些部分。我把这个留给你了,否则看起来就像我做了你的作业:-)

关于java - 如何以数字0退出循环?但现在我有其他问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3792802/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com