簡體   English   中英

不兼容的類型字符串和字符

[英]Incompatible Types String and Char

我不確定為什么會收到此錯誤。 我認為代碼總體上還可以,盡管我敢肯定,然后使用所有其他ifs的方法會更短。 問題是它說類型不兼容,我真的只是迷失了解決方法。 任何幫助,將不勝感激。

import java.util.Scanner;
public class MissionImpossible
{
    public static void main(String [] args){
        String lineOne,  R2D2 = "";

       Scanner in = new Scanner(System.in);
       System.out.println("Please enter a word so I can see how many vowels it has.");

       int count = 0;

       lineOne = in.nextLine();

       int word = lineOne.length();

       for (int i = word -1; i>= 0; i--) 
        {
            R2D2= lineOne.charAt(i);

            if (R2D2== 'a'|| R2D2=='A')
            count++;
            else if (R2D2=='e'||R2D2=='E')
            count++;
            else if (R2D2=='o'|| R2D2=='O')
            count++;
            else if (R2D2=='u'||R2D2=='U')
            count++;
            else if (R2D2=='y'||R2D2=='Y')
            count++;

    }
    System.out.println(count);
          }
           }

char不是String R2D2聲明為char

char R2D2 = '';

要檢查元音,請使用以下方法,並在for循環中重用此方法並count元音的出現次數:

static boolean isVowel(char ch) {
    ch = Character.toLowerCase(ch);
    if (ch == 'a' || ch == 'e' || ch == 'i' || ch == 'o' || ch == 'u') {
        return true;
    }
    return false;
 }
    String lineOne,  R2D2 = "";

R2D2是一個字符串, if (R2D2== 'a'|| R2D2=='A') ,您正在與一個字符進行比較

嘗試這個

對於(int i = word -1; i> = 0; i--){R2D2 = lineOne.charAt(i);

        if (R2D2=="a"|| R2D2=="A")
        count++;
        else if (R2D2=="e"||R2D2=="E")
        count++;
        else if (R2D2=="o"|| R2D2=="O")
        count++;
        else if (R2D2=="u"||R2D2=="U")
        count++;
        else if (R2D2=="y"||R2D2=="Y")
        count++;

}

一方面,您應該使用.equals()而不是==進行比較

如果要修復長鏈,可以執行以下操作:

if (anyOf(R2D2, "AaEeIiOoUuYy".toCharArray())

后來有:

private static boolean anyOf(char in, char[] items) {
    for (int i = 0; i < items.length; i++) {
        if (in == items[i])
            return true;
    }
    return false;
}

R2D2的類型為String,而字符周圍的單引號(如'a' )使它成為字符文字。 無法分配字符串或將其與字符進行比較。 那就是原因。

代碼中存在兩種問題。

1. `R2D2= lineOne.charAt(i); // a character being assigned to a String variable`

解決方案: R2D2 = Character.toString(lineOne.charAt(i));

2. `if (R2D2== 'a'|| R2D2=='A')` //strings being compared with char literals.

解決方案: if (R2D2.equals("a")|| R2D2.equals("A"))

僅供參考,您還可以改善維護。

if(R2D2.equalsIgnoreCase('a'))

暫無
暫無

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

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