【问题标题】:incompatible types: java.lang.String cannot be converted to int[]不兼容的类型:java.lang.String 无法转换为 int[]
【发布时间】:2020-02-26 04:57:28
【问题描述】:

我正在制作一个打印数组的偶数和奇数的 java 程序。这是我的偶数代码,它返回偶数变量并在运行器案例中打印偶数。

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]+" "。这对我来说太难了。

【问题讨论】:

  • 在将整数添加到字符串时,使用 Integer.toString() 方法将整数转换为字符串。例如:evens += Integer.toString(array[i]) + " ";
  • 您的代码有两个问题。 1.你返回String,你的方法需要int[] 2.如果你将返回类型固定为String,你会得到Variable 'evens' might not have been initialized错误。

标签: java


【解决方案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;
    }

【讨论】:

  • @Sean,你想返回 int[] 还是 String?请将代码粘贴到您调用此方法的位置
  • 我想返回 int[]。我想在运行器案例中调用此方法,使用扫描仪中的数组,但我还没有创建测试用例,我不知道如何创建。这应该是方法的输出:[2, 4, 6, 8, 10, 12, 14]
  • 我已经发布了答案,请检查。
  • @Sean Scanner 使用并在 ArrayList 的帮助下,我们可以使我们的 int[] 紧凑。当然它可以在没有ArrayList 的情况下完成,在这种情况下,我们需要使用标志-1 或其他任何东西以及另一个临时int[]
【解决方案2】:

请更改方法的返回类型。 您返回的字符串但方法返回类型是 int Array。那就是你无法编译代码的问题。

【讨论】:

    【解决方案3】:

    你可以这样做:

    仅供参考:我尚未对此进行测试,但应该没问题。

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

    【讨论】:

      猜你喜欢
      • 2017-10-03
      • 2017-03-29
      • 2017-02-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多