簡體   English   中英

不兼容的類型:java.lang.String 不能轉換為 int[]

[英]incompatible types: java.lang.String cannot be converted to int[]

我正在制作一個打印數組的偶數和奇數的 java 程序。 這是我的偶數代碼,它返回 evens 變量並在 runner 案例中打印偶數。

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]+" "。這對我來說太困難了。

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

請更改方法的返回類型。 您返回的 String 但方法返回類型是 int Array。 這就是您無法編譯代碼的問題。

你可以做這樣的事情:

僅供參考:我沒有測試過這個,但應該沒問題。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM