不兼容的类型:java.lang.String无法转换为int []

时间:2020-02-26 04:57:28

标签: java

我正在制作一个Java程序,该程序打印一个数组的偶数和奇数。这是我的偶数代码,它返回evens变量并在小写的情况下打印偶数。

public static int[] getAllEvens(int[] array)
    {  
        String evens;

        for(int i=0; i<array.length; i++)
        {
            if(array[i]%2==0)
            {
                 evens = (array[i]+" ");
            }
        }
        return evens;   
    }

但是当我编译时,它说Evens变量不能转换为int []。我知道不应该使用String或int来定义偶数,但是我不知道我还能如何返回array [i] +“”。这对我来说很难。

3 个答案:

答案 0 :(得分:1)

编辑1:使用Scanner和临时ArrayList使int[]紧凑

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int[] arr = new int[n];
        for (int i = 0; i < n; i++) {
            arr[i] = sc.nextInt();
        }
        int[] evens = getAllEvens1(arr);
        for (int i : evens) {
            System.out.print(i + " ");
        }
    }

    public static int[] getAllEvens1(int[] array) {
        int[] temp = new int[array.length]; // if all of array are `even`..
        Arrays.fill(temp, -1); //or any flag.. to indicate it's unnecessary

        int j = 0;
        for (int i : array) {
            if (i % 2 == 0) {
                temp[j++] = i;
            }
        }

        int[] ret = new int[j];
        j = 0;
        for (int i : temp) {
            if (i != -1) {
                ret[j++] = i;
            }
        }
        return ret;

    }

    public static int[] getAllEvens(int[] array) {
        ArrayList<Integer> temp = new ArrayList();

        for (int i : array) {
            if (i % 2 == 0) {
                temp.add(i);
            }
        }
        return temp.stream().mapToInt(Integer::intValue).toArray();
    }
}

您的代码中有几个问题。 首先,您尝试返回String,而函数返回类型为int[] 其次,您只将当前偶数分配给尚未初始化的String

修复:

 public static String getAllEvens(int[] array) {
        StringBuilder evens = new StringBuilder();

        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 0) {
                evens.append(array[i]).append(" ");
            }
        }
        return evens.toString();
    }

或者使用String代替StringBuilder

  public static String getAllEvens(int[] array) {
        String ret = "";

        for (int i = 0; i < array.length; i++) {
            if (array[i] % 2 == 0) {
                ret += array[i] + " ";
            }
        }
        return ret;
    }

答案 1 :(得分:0)

请更改方法的返回类型。 您返回的String,但方法的返回类型为int Array。那就是您无法编译代码的问题。

答案 2 :(得分:0)

您可以执行以下操作:

仅供参考:我尚未对此进行测试,但应该可以。

public static int[] getAllEvens(int[] array) {

int[] tmp = new int[array.length];
   for (i = 0; i < array.length; i++) {
       if (array[i] % 2 == 0) {
          tmp[even_count++] = array[i];
       }
   }

return tmp;
}
相关问题