如何以数字0退出循环?但现在我还有其他问题 包装hw3; 公共班机{ 公共静态void main(字符串[]args){ 最终int NumberOfElements=1000; int[]num=新的int[NumberOfElements]; int-var=0; //创建输入 java.util.Scanner输入=新的java.util.Scanner(System.in); for(int i=0;i
编写一个Java程序,读取每行输入一个正整数的序列。输入整数“0”时,程序停止读取。程序将按升序对它们进行排序并输出。例如:5 1. 7. 12 36 8. 0如何以数字0退出循环?但现在我还有其他问题 包装hw3; 公共班机{ 公共静态void main(字符串[]args){ 最终int NumberOfElements=1000; int[]num=新的int[NumberOfElements]; int-var=0; //创建输入 java.util.Scanner输入=新的java.util.Scanner(System.in); for(int i=0;i,java,arrays,loops,Java,Arrays,Loops,编写一个Java程序,读取每行输入一个正整数的序列。输入整数“0”时,程序停止读取。程序将按升序对它们进行排序并输出。例如:5 1. 7. 12 36 8. 0 输出:1 5 7 8 12 36在这里,您的应用程序正在读取int,您可以检查最后一个是否为!=从0开始。和中断循环。 如果您不喜欢使用break,您仍然可以为的添加一个条件 对于数组排序,有Arrays.sort()解决方案 要打印它们,您需要另一个循环,但要小心,因为数组中的项目可能少于1000个,您不能简单地打印整个数组。 您需要
输出:1 5 7 8 12 36在这里,您的应用程序正在读取int,您可以检查最后一个是否为!=从0开始。和
中断循环。
如果您不喜欢使用break,您仍然可以为
的添加一个条件
对于数组排序,有Arrays.sort()
解决方案
要打印它们,您需要另一个循环,但要小心,因为数组中的项目可能少于1000个,您不能简单地打印整个数组。
您需要找到一种方法来计算在数组中添加的元素数
编辑后:
很好,您的应用程序似乎很有效,这是我得到的:
Mac Makkhdyn:~Makkhdyn$javahw3.Main
输入任意正数或输入0停止:1
输入任意正数或输入0停止:2
输入任意正数或输入0停止:3
输入任意正数或输入0停止:4
输入任意正数或输入0停止:5
输入任意正数或输入0停止:0
麦克·马克戴恩:~Makkhdyn$
您拥有的0必须来自其他地方。您的实际代码与您在此处发布的代码不是略有不同吗
资源:
for (i = 0; i < num.length; i++) {
System.out.print(" " + num[i]);
}
num[i]
保存您正在读取的最后一个数字。因此,您必须将其与0
进行比较,如果它是0
,则必须结束循环。阅读了解如何做到这一点
一般来说,阅读这本书可能对你也有好处。试着理解这个问题:有三个步骤。
步骤1:从用户处获取输入。继续获取输入,直到用户输入0
步骤2:排序
第三步:打印结果
步骤1:您的for
循环几乎正确。
但是for循环应该在获得输入后立即结束。
在下面的代码中
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]);
}
}
}
您正在将用户输入添加到数组中,然后检查它是否为0
。这意味着0
也将是数组的一部分。如果您不希望这样做,则应检查输入,仅当输入不是0
时才将其添加到数组中
还要注意for
循环前面的i
声明。因为我们在for循环之后需要它。为什么?见下文
num[i] = input.nextInt();
var++;
if (num[i] == 0)
break;
问题是,在步骤2中,对1000个元素的数组进行排序,而实际上只需要考虑用户输入的元素数量。起初你不知道这就是为什么你创建了1000个元素的数组,但是现在(在第2步之后)你知道用户输入了多少个元素。这在i
因此,1和2之间的新步骤是:创建一个只包含用户输入的元素的新数组。
第1.5步:
for (i = 0; i < num.length; i++) {
System.out.print(" " + num[i]);
}
现在对这个新数组进行排序,并打印它(与代码相同,但使用我们刚刚创建的新数组)
Arrays.sort(newArray)代码>
排序(自制)(代替上述步骤2):
for (i = 0; i < num.length; i++) {
System.out.print(" " + num[i]);
}
通过元素循环
如果一个元素大于上一个元素,则交换它们(按asc顺序,上一个元素始终小于或等于下一个元素)
有两个循环,因为您必须在连续的基础上进行比较:第一个元素,与整个数组进行比较,将其放置在正确的位置,第二个元素与整个数组进行比较,等等。)
用于(int j=0;jjk你在使用什么JDK?使用OpenJDK 1.6.0,我在输出中看不到额外的零。好的,它现在似乎可以工作了。在我复制和粘贴之后。你真的需要使用数组吗?这是作业中指定的吗?我想是的,因为我们简单地了解到还有一种通过交换数字来完成的方法。奇怪的是,现在我复制粘贴它,它似乎工作了k、 …好的,我想现在是下一个问题,即添加数组.sort(),而不打印出1000个字符…System.out.print(“accing order number:”;arrays.sort(num);for(i=0;ifor (i = 0; i < newArray.length; i++) {
System.out.print(" " + newArray[i]);
}
int[] newArray = new int[i]
for(int j=0; j<i; j++){
newArray[j] = num[j];
}
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;
}
}
}