【问题标题】:JAVA - Error incompatible types: String cannot be converted to String[ ]JAVA - 错误不兼容类型:字符串无法转换为字符串 []
【发布时间】:2014-05-25 02:16:05
【问题描述】:

我正在开发 Java 项目 - Playing Cards。

而且,在这个 Card.java 类中,我已经声明并初始化了变量和数组列表。我遇到了这个错误。这些错误在每个 getter 和 setter 方法下。

error: incompatible types: String cannot be converted to String[]
error: incompatible types: int[] cannot be converted to int

public class Card {

   // private String suit;
    //private String name;
    //private int value;

private String[] suit = {"spades","hearts","clubs","diamonds"};
private String[] name = {"Ace","Jack","Queen","King"};
private int[] value = {1,2,3,4,5,6,7,8,9,10,11,12,13};

public Card(String s, String n, int v)
{
    suit = s;
    name = n;
    value = v;
}

public String getSuit()
{
    return suit;
}

public String getName()
{
    return name;
}

public int getValue()
{
    return value;
}

public String toString()
{
    return "<"+suit+" "+name+">";
}

这是整个班级。

希望有人知道并可以帮助我,谢谢! (:

如果你不明白我的意思,请告诉我,尽我所能解释

【问题讨论】:

  • suit的类型是什么?你想给它分配什么? value 也是如此。
  • int[]int 不相同
  • 字符串不能按原样分配给字符串数组,int也一样
  • 你的意思是什么类型的西装和价值?我没有说明它们的数据类型以及它的数组列表中有哪些元素吗?

标签: java arrays string arraylist int


【解决方案1】:

使用

for(String s:suit){
System.out.println(s);
}

从字符串数组中获取字符串

【讨论】:

    【解决方案2】:

    我敢打赌,您为这些初始字段集生成了 getter 和 setter 以及构造函数。

    // private String suit;
    // private String name;
    // private int value;
    

    但是在将它们改为

    之后
    private String[] suit = { "spades", "hearts", "clubs", "diamonds" };
    private String[] name = { "Ace", "Jack", "Queen", "King" };
    private int[] value = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
    

    您忘记相应地修改它们。您需要将您的 getter 和 setter 以及构造函数更改为类似的内容。 toString() 方法也是如此。

    public class Card {
    
        private String[] suit = { "spades", "hearts", "clubs", "diamonds" };
        private String[] name = { "Ace", "Jack", "Queen", "King" };
        private int[] value = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13 };
    
        public Card(String[] suit, String[] name, int[] value) {
            super();
            this.suit = suit;
            this.name = name;
            this.value = value;
        }
    
        public String[] getSuit() {
            return suit;
        }
    
        public void setSuit(String[] suit) {
            this.suit = suit;
        }
    
        public String[] getName() {
            return name;
        }
    
        public void setName(String[] name) {
            this.name = name;
        }
    
        public int[] getValue() {
            return value;
        }
    
        public void setValue(int[] value) {
            this.value = value;
        }
    
        @Override
        public String toString() {
            return "Card [suit=" + Arrays.toString(suit) + ", name="
                + Arrays.toString(name) + ", value=" + Arrays.toString(value)
                + "]";
        }
    }
    

    如果您碰巧更改了类中的字段,请始终记住生成新的 getter、setter、构造函数、toString() 方法。

    【讨论】:

      【解决方案3】:

      使用 String[] 代替 String 和 Int[] 而不是 int

      在你所有的 getter setter 方法中。

      【讨论】:

        【解决方案4】:

        您在 get 方法中返回数组,并且您已声明其返回类型 String,它应该是 字符串数组

         public String[] getName()
         {
             return name;
         }
        

        你可以为别人做类似的事情。

        【讨论】:

          【解决方案5】:

          它们不兼容,因为您的 get 方法是 String 和 int 类型,并且您要求这些方法返回一个数组。

          【讨论】:

            【解决方案6】:

            您的变量suitnamevalue 是数组:

            private String[] suit = {"spades","hearts","clubs","diamonds"};
            private String[] name = {"Ace","Jack","Queen","King"};
            private int[] value = {1,2,3,4,5,6,7,8,9,10,11,12,13};
            

            在构造函数中,您将String s , String n, int v 作为单一数据类型传递,并将其分配给数组suitnamevalue

            public Card(String s, String n, int v)
            {
                suit = s;
                name = n;
                value = v;
            }
            

            让他们String[] s, String[] n , int[] v 你的错误就会消失:

            public Card(String[] s, String[] n, int[] v)
            {
                suit = s;
                name = n;
                value = v;
            }
            

            在下面的代码中,您得到的是一个数组而不是单个字符串。将他们的返回类型设为String[]

            public String getSuit()
            {
                return suit;
            }
            
            public String getName()
            {
                return name;
            }
            

            【讨论】:

              【解决方案7】:

              Card 构造函数中变量 suit、name 和 value 的赋值错误。变量 suit , name 和 value 是数组类型,您正在为其分配 string 和 int 类型。这是错误的。在Java中,如果数组的大小是固定的,就不能修改。您可以使用数组列表代替,

              import java.util.ArrayList;
              import java.util.Arrays;
              
              public class Card {
              
                  private static ArrayList<String> suitArrayList = new ArrayList<String>();
                  private static ArrayList<String> nameArrayList = new ArrayList<String>();
                  private static ArrayList<Integer> valueArrayList = new ArrayList<Integer>();
              
                  private static String[] suit = {"spades","hearts","clubs","diamonds"};
                  private static String[] name = {"Ace","Jack","Queen","King"};
                  private static Integer[] value = {1,2,3,4,5,6,7,8,9,10,11,12,13};
              
                  public Card(String s, String n, int v)
                  {
                      suitArrayList.add(s);
                      nameArrayList.add(n);
                      valueArrayList.add(v);
                  }
              
                  public static void main(String[] args) {
                      suitArrayList.addAll(Arrays.asList(suit));
                      nameArrayList.addAll(Arrays.asList(name));
                      valueArrayList.addAll(Arrays.asList(value));
                      Card card = new Card("ADDED SUITE", "ADDED NAME", 222222);
                      for (String s : suitArrayList) {
                          System.out.println("suit element :: " + s);
                      }
                      for (String s : nameArrayList) {
                          System.out.println("name element :: " + s);
                      }
              
                      for (Integer i : valueArrayList) {
                          System.out.println("value element :: " + i);
                      }
                  }
              }
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2018-07-05
                • 1970-01-01
                • 1970-01-01
                • 2023-03-26
                • 2014-02-17
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多