import java.util.Scanner;
public class Trial7 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("Please enter a array of numbers");
int n = input.nextInt();
int[] nums= new int[n];
int[] nums2= evenPositionsOnly(nums);
System.out.println(nums2);
}
public static int[] evenPositionsOnly(int[] nums){
//int[] result= new int[nums.length];
for(int i = 0; i<nums.length; i=i+2) {
if(i/2==0)
nums[i]= nums[i] ;
}
return nums;
}
}
这是一个更新。我不断收到错误消息,但不确定为什么。谁能解决可能出现的问题?
答案 0 :(得分:1)
由于顶部主要是切饼器,因此我们将重点放在方法evenPositionsOnly
上。我们需要考虑完成此任务的逻辑步骤,“打印在索引为偶数的数组中找到的值”。
我们需要一些东西来保持我们的发现价值。我们称之为evenIndexedValues
:
int[] evenIndexedValues = new int[some size value here];
我们需要知道制作新阵列的大小。我们知道它的大小不会超过原始大小的一半。我们可以添加一个只是为了确保我们有足够的空间,以保持这一简单性:
int size = (nums.length / 2) + 1;
int[] evenIndexedValues = new int[size];
请记住,int
除以int
只会产生int
,而“提醒”将被截断。因此,如果您的数组大小为奇数,则(nums.length / 2)
将产生一个小于“实数”一半大小的值;这就是为什么我们添加一个(尽管在这种情况下实际上没有必要,因为我们的索引不会达到该值)。
现在有了容器,我们可以遍历nums
数组,获取在每个偶数索引处找到的值,并将其插入新数组:
int size = (nums.length / 2) + 1;
int[] evenIndexedValues = new int[size];
for(int index = 0; i < nums.length; i += 2){
}
但是等等!我们如何知道将我们的均值放在哪里?我们不能使用i
,因为它将具有0、2、4等值,这会跳过新数组中的斑点(更不用说很快越界了)。因此,我们需要定义一个局部变量,并在循环中每次将其手动增加一个:
int size = (nums.length / 2) + 1;
int[] evenIndexedValues = new int[size];
int j = 0;
for(int index = 0; i < nums.length; i += 2){
// some code here
j += 1;
}
因此,最后一点是添加代码以插入我们的值,然后将其全部包装在我们的方法主体中:
public static int[] evenPositionsOnly(int[] nums){
int size = (nums.length / 2) + 1;
int[] evenIndexedValues = new int[size];
int j = 0;
for(int i = 0; i < nums.length; i += 2){
evenIndexedValues[j] = nums[i];
j += 1;
}
return evenIndexedValues;
}
现在定义了evenPositionsOnly
,让我们考虑一下main
应该做什么。您开始时基本上是正确的:
Scanner input = new Scanner(System.in);
System.out.println("Please enter a array of numbers");
int n = input.nextInt();
int[] nums = new int[n];
您使用n
的方式表明您的意图是询问要输入多少个数字。假设这是正确的,让我们更正提示:
Scanner input = new Scanner(System.in);
System.out.println("Please enter the size of the array to create");
int n = input.nextInt();
int[] nums = new int[n];
有了这些,我们需要提示输入这些值,或者随机生成它们。我认为应该提示您,所以:
Scanner input = new Scanner(System.in);
System.out.println("Please enter the size of the array to create");
int n = input.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++){
System.out.printf("Value #%i?: ", i+1);
int value = input.nextInt();
nums[i] = value;
}
然后,在示例中添加最后两行,将其包装在main
中,您已经完成了很多工作:
import java.util.Scanner;
import java.util.Arrays;
public class Trial7 {
public static void main(String[] args){
Scanner input = new Scanner(System.in);
System.out.println("Please enter the size of the array to create");
int n = input.nextInt();
int[] nums = new int[n];
for(int i = 0; i < n; i++){
System.out.printf("Value #%i?: ", i+1);
int value = input.nextInt();
nums[i] = value;
}
int[] evens = evenPositionsOnly(nums);
System.out.println(Arrays.toString(evens));
}
public static int[] evenPositionsOnly(int[] nums){
int size = (nums.length / 2) + 1;
int[] evenIndexedValues = new int[size];
int j = 0;
for(int i = 0; i < nums.length; i += 2){
evenIndexedValues[j] = nums[i];
j += 1;
}
return evenIndexedValues;
}
}
Arrays.print与扫描仪位于同一java.utils.*
名称空间中-由您决定是使用它还是在数组中循环并手动打印每个值。有关更多建议,请参见What's the simplest way to print a Java array?。