我的代码有关数组和int变量的问题。在我遇到问题的部分中,我试图检查一个数组(用户输入自己的整数)是否按顺序增加,如果按顺序递增,则打印数组;如果没有,则显示错误消息。我试图使用int两个变量来做这个,一个叫做c1,另一个叫做orderCheck1(都初始化为0)。
int[ ] list1 = new int [10000];
int a1 =0;
int b1 =0;
int c1 =0;
int value1;
int orderCheck1 =0;
while (a1 ==0){
if (b1 < list1.length){
value1 = scan.nextInt();
//checks to see if value entered is positive
if (value1 >=0){
list1[b1] = value1;
b1++;
}
else{
a1 =1;
}
}
}
while (c1 <(list1.length-1)){
if (list1[c1] >list1[(c1+1)]){
orderCheck1 =1;
}
c1++;
}
if (orderCheck1 ==0){
for (int i =0; i < b1; i++){
System.out.print (list1[i] + " ");
}
}
else{
System.out.println ("ERROR: One or both arrays are not in an increasing order.);
}
基本上,如果数组中的数字大于后面的数字,则orderCheck将变为1.稍后在代码中,它会检查orderCheck1是零还是一。如果orderCheck1为零,则打印数组中的整数;如果是1,则显示错误消息。 问题是,无论我输入什么,orderCheck1总是变成一个,因此始终打印错误消息。我的代码出了什么问题?
注意:当用户在数组中输入值时,他们应该输入一个负数来停止输入值。
答案 0 :(得分:0)
我建议采用一种方法:
static boolean isAscending(int[] nums) {
for (int i = 1; i < nums.length; i++)
if (nums[i - 1] > nums[i])
return false;
return true;
}
请注意,这会处理大小为零或一个正确数组的边缘情况。
答案 1 :(得分:0)
我认为,主要问题是您已经分配了10000个元素的列表,并且您不会全部使用它们。 Java将元素初始化为0.(请注意,在其他一些语言中,像这样的构造可以将元素初始化为随机垃圾值。)
然后编写一个输入数字的循环,直到用户输入负数。这将为某些数字 n 设置循环的第一个 n 元素。但其余的元素不会被阵列切断。他们仍在那里,他们仍然是0。
这会导致此循环出现问题:
while (c1 <(list1.length-1)){
if (list1[c1] >list1[(c1+1)]){
orderCheck1 =1;
}
c1++;
}
请注意list1.length
仍然是10000,即使用户没有输入10000个值。使用new int[10000]
或类似的东西创建数组后,会修复数组的.length
。这个长度不能改变。这意味着c1
将达到9999,无论输入的值是多少。
因此,在某些时候,您将在创建它时开始与数组中放入的0值进行比较。由于用户输入的所有值均为正数,因此当list1[c1] > list1[c1+1]
是输入的最后一个值时,list[c1]
将为真,因为list1[c1+1]
仍为0。
解决方案是,不要让c1
升级到list1.length-1
,而是当它到达时,我必须停止它,少于用户条目的数量。看起来您已经有b1
来计算条目数,因此while
需要更改为while (c1 <
some-expression-that-uses-b1 )
。我会让你努力让这个上限正确。
还有一件事:如果你有一个这样的数组,其大小并不为人所知,那么使用ArrayList
会更好。与int[]
不同,ArrayList<Integer>
会在向其添加元素时增长,size()
方法将返回实际添加的元素数。