【问题标题】:Array method, return integers in the even positions [closed]数组方法,在偶数位置返回整数[关闭]
【发布时间】:2019-07-26 12:34:27
【问题描述】:
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; 
    }
}

这是一个更新。我不断收到错误,但不确定为什么。任何人都可以帮助解决可能的问题吗?

【问题讨论】:

  • 想想回报的作用。如果您不确定,请找出答案。那么答案就很明显了。
  • 导入 java.util.Scanner;公共类 Trial7 { public static void main(String[] args){ Scanner input = new Scanner(System.in); System.out.println("请输入数字数组"); int n = input.nextInt(); int[] nums= 新的 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
  • 如果您打算将其作为更新,请使用问题左下方的编辑按钮
  • 感谢您的提示,对不起,我是 java 新手,所以遇到了很多麻烦。当我将迭代器更改为 i++ 时,我得到 [I@55f96302 作为输出。你会知道为什么会这样吗?
  • 尝试单步执行你的循环。当前您迭代整个数组,如果索引是偶数,则将值设置为它已经等于的值。这既使数组保持不变,也完全未修改。您将需要一个新数组(插入),并为其适当映射索引(使用/2 仍然有帮助)。

标签: java for-loop return


【解决方案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 与 Scanner 在同一 java.utils.* 命名空间中找到 - 由您决定是使用它还是循环遍历数组并手动打印每个值。更多建议请见What's the simplest way to print a Java array?

【讨论】:

  • 谢谢!逻辑对我来说确实有意义,但是我的输出仍然是: [I@55f96302 。你知道这是为什么吗?
  • 再次感谢您!非常感谢您向我彻底解释所有代码。但是我仍然遇到错误。你知道这是为什么吗?此代码仅用于我自己的练习。我特别苦苦挣扎的是如何将用户输入的数组返回到 main 方法中。我正在练习编码蝙蝠方法的逻辑。只是如何返回一个我不明白的主要方法。谢谢。
猜你喜欢
  • 2014-06-01
  • 2014-06-19
  • 2017-07-25
  • 1970-01-01
  • 2016-02-12
  • 2018-10-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多