数组方法,在偶数位置返回整数

时间:2019-03-05 05:39:17

标签: java for-loop return

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; 
    }
}

这是一个更新。我不断收到错误消息,但不确定为什么。谁能解决可能出现的问题?

1 个答案:

答案 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?