我们正在课堂上学习数组,我被分配了这个编程项目。到目前为止,我已经编写了下面的代码,但我对如何使其正常工作感到困惑。我应该为我的代码使用带有System.out.println语句的for循环。
实例化一个数组并使用值加载它。写方法确定了多少 数组中的值是奇数,有多少是偶数。这些方法应该返回包含的数组 赔率和赔率
Sample Data :
2 4 6 8 10 12 14
1 2 3 4 5 6 7 8 9
2 10 20 21 23 24 40 55 60 61
Sample Output :
Odds - []
Evens - [2, 4, 6, 8, 10, 12, 14]
Odds - [1, 3, 5, 7, 9]
Evens - [2, 4, 6, 8]
Odds - [21, 23, 55, 61]
Evens - [2, 10, 20, 24, 40, 60]
这是我的代码:
public class OddEvensHW {
public static void main(String[] args){
int x = 0;
int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
System.out.println("Even : ");
for ( x = 0; x < numbers.length; x++);
{
if( numbers[x]%2 == 0){
int even = numbers[x];
System.out.print ( even + "\t");
}
else {
}
System.out.println(numbers[x] + " ");
}
// odds now
System.out.println("Odds : ");
for ( x = 0; x < numbers.length; x++);
{
if( numbers[x]%2 != 0){
int odd = numbers[x];
System.out.print ( odd + "\t");
}
else {
}
}
System.out.println(numbers[x] + " ");
}
答案 0 :(得分:2)
for(x = 0; x&lt; numbers.length; x ++);是错误的,你必须删除&#34 ;;&#34;
答案 1 :(得分:1)
方法应该返回包含赔率和平均值的数组
你什么也没有回来。
1)您应该返回数组中包含的两个数组(奇数数组和偶数数组)。
问题是你以前无法知道每个数组的大小,并且数组不能动态扩展。
您可以使用初始数组的大小初始化两个数组。其余元素将为null。
另一个解决方案是第一次迭代计算奇数和偶数元素,并使用此信息实例化数组,然后再次在初始数组上迭代以填充两个数组。
2)你不需要在初始数组上迭代两次:一次处理奇数值,另一次处理偶数值。
你应该在一个循环中处理这两种情况(奇数和偶数)。
答案 2 :(得分:1)
你要
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 20
这是因为你在几个for
循环中,循环运行到x < numbers.length
numbers.length gives you the total number of entries in array. So in this case its 20, but the last index is 19 (it starts from 0 and ends at 19). Index 20 doesn't exist at all. Thus the `ArrayIndexOutOfBoundsException`
要解决此问题,请在偶数和奇数情况下将for
简单更改为for (x = 0; x < numbers.length - 1; x++)
。
因此您的代码如下:
public class OddEvensHW {
public static void main(String[] args) {
int x = 0;
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 };
System.out.println("Even : ");
for (x = 0; x < numbers.length - 1; x++)
{
if (numbers[x] % 2 == 0) {
int even = numbers[x];
System.out.print(even + "\t");
}
}
// odds now
System.out.println("Odds : ");
for (x = 0; x < numbers.length - 1; x++)
{
if (numbers[x] % 2 != 0) {
int odd = numbers[x];
System.out.print(odd + "\t");
}
}
}
}
希望它有所帮助!
答案 3 :(得分:1)
你的问题在于:for ( x = 0; x < numbers.length; x++);
最后的分号终止了语句,因此除了递增x
之外,循环基本上什么都不做。在该循环结束后,x
的值为numbers.length
(在这种情况下为20
),因此当您到达if (numbers[x] % 2 == 0) {
时,您将获得ArrayIndexOutOfBoundsException
,因为numbers[20]
位于界限之外。要解决此问题,只需从每个;
循环中删除for
。
对于您的任务,您应该编写方法,返回包含所有奇数和偶数的数组。所以基本上你需要有两种方法,一种用于赔率,一种用于平均值。
首先,他们应该看起来像这样:
public static int[] odds(int[] input) {
int count = 0;
//insert logic to count the odds in the input
int[] odds = new int[count];
// insert logic to fill the "odds" array with the odd values from "input"
return odds;
}
public static int[] evens(int[] input) {
// analogous
}
这应该为你提供继续的基础。
答案 4 :(得分:1)
这里你可以做什么,因为你的循环错了,它实际上并没有运行。当它发生时你可以在一个循环而不是2个时刻收集数据,因为任何一个数字都是奇数/偶数,而不是其他可能性。因此,if-else
将完成工作
int x = 0;
int[] numbers = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
String even="";
String odd="";
for(;x<numbers.length;x++){
if( numbers[x]%2 == 0){
even += numbers[x] + ", ";
}
else {
odd += numbers[x] + ", ";
}
}
System.out.println("Even ="+even);
System.out.println("odd ="+odd);