Проблема несовместимых типов

1

Я пытаюсь запустить эту программу, которая должна содержать класс Building который расширен двумя другими классами TradeCenter и SportCenter. Программа должна распечатать информацию для 3 зданий (массив). Проблема в том, что я продолжаю получать эту ошибку Incompatible types issue для int в массиве, и я не уверен, как ее исправить, так как я новичок. Кто-нибудь может помочь?

class Building {
    String Name;
    String Addres;
    private int floors;

    Building(String N, String A, int F) {
        Name = N;
        Addres = A;
        floors = F;
    }

    public void SetFloors(int f) {
        if (f <= 0)
            floors = 1;
        else
            floors = f;
    }

    public int GetFloors() {
        return floors;
    }

    void Print() {
        System.out.print("Name=" + Name + "Addres=" + Addres + "floors=" + floors);
    }
}

class TradingCenter extends Building {
    String Owner;
    String Brands[] = {"Brand"};

    TradingCenter(String N, String A, int F, String O, String B[]) {
        super(N, A, F);
        Owner = O;
        Brands = B;
    }
}

class SportCenter extends Building {
    String Sports[] = {"Sport"};
    String Teams[] = {"Team"};

    SportCenter(String N, String A, int F, String S[], String T[]) {
        super(N, A, F);
        Sports = S;
        Teams = T;
    }
}

class DemoBuilding {
    public static void main(String args[]) {
        Building arr[] = new Building[3];
        arr[0] = new TradingCenter("Mall Plovdiv", "Smirnenski", 3, "Unknown", "Brand");
        arr[1] = new SportCenter("ATLETIK", "Trakia", 1, "Sport1", "Team3");
        arr[2] = new TradingCenter("Paradise Mall", "Sofia, bul. Cherni vruh 100", 5, "Unknown", "Brand");
        for (int i = 0; i < arr.length; i++)
            arr[i].Print();
    }
}
  • 1
    Отправьте точное сообщение об ошибке, которое включает номера строк. Кроме того, соглашение Java должно начинать имена методов со строчной буквы, и инструменты будут более полезны, если вы будете следовать этому соглашению.
  • 0
    "(int)3" является строкой, а не int. Используйте только 3 вместо. И "Brand 2" - это просто строка, а не массив строк. Это также должно быть исправлено.
Показать ещё 2 комментария
Теги:

4 ответа

2
Лучший ответ

Потому что вместо того, чтобы передавать int как параметр, вы фактически передаете String. Кроме того, вместо передачи строки [] вы просто передаете строки.

Ваше определение для конструктора TradingCenter

TradingCenter(String N, String A, int F, String O, String B[])  
// 3rd argument is supposed to be of type int here and the last(5th) argument is supposed to be of type String[]

Ваше определение для конструктора SportCenter

SportCenter(String N, String A, int F, String S[], String T[])
// 3rd argument is supposed to be of type int here and the second-last(4th) and the last(5th) argument is supposed to be of type String[]

Проверьте:

arr[0]=new TradingCenter("Mall Plovdiv","Smirnenski","(int)3","Unknown","Brand 2");   
//  "(int)3" is a String,not int; "Brand 2" is not a String Array
arr[1]=new SportCenter("ATLETIK","Trakia","(int)1","Sport 1","Team 3"); 
//  "(int)1" is a String,not int; "Unknown" & "Brand 2" are Strings,not the String[]
arr[2]=new TradingCenter("Paradise Mall","Sofia, bul. Cherni vruh 100","(int)5","Unknown","Brand 2");
//  "(int)5" is a String,not int; "Brand 2" is not a String Array

Чтобы просто использовать 3,1,5 в качестве целого числа, передайте 3,1,5 напрямую без кавычек в вызове конструктора.

Кроме того, чтобы использовать "Неизвестный" и "Бренд 2" как String [], передайте их в качестве нового String [] {"Неизвестно" и новую String [] {"Торговая марка 2"} в конструкторе.

  • 0
    Прежде чем пытаться с (int) я попробовал только номер, и появилась та же ошибка ...
  • 0
    @ DanielaGocheva-Поскольку у вас также есть ошибка при передаче String Arrays, пожалуйста, проверьте мои последние изменения. Мой последний абзац суммирует, что вы должны сделать, чтобы избежать ошибки.
Показать ещё 1 комментарий
1

Вы используете это утверждение

 arr[1] = new SportCenter("ATLETIK", "Trakia", "(int)1", "Sport 1", "Team 3");

"(int)1" Это не преобразует String 1 в целое число, оно по-прежнему является строкой.

Используйте это везде, где это необходимо

 arr[1] = new SportCenter("ATLETIK", "Trakia", 1, "Sport 1", "Team 3");

и для синтаксического анализа строки в целое число

Integer inputAsInteger=Integer.parseInt(InputString)

Обновить

Другая ошибка: вы передаете String в String Array

Вам нужно пройти так

arr[1] = new SportCenter("ATLETIK", "Trakia", 1, new String[]{"Sport 1"}, new String[]{"Team 3"});
  • 0
    Большой! Это сработало, но теперь у меня есть проблемы для String, которые не могут быть преобразованы в String []. И если я удаляю "", я получаю сообщение об ошибке; ожидается...
  • 0
    @shekharsuman моя ошибка, спасибо за указание, я исправил это, фактически не видел это.
Показать ещё 5 комментариев
0

Конструкторы, которые вы используете в своем основном методе, не соответствуют типам, указанным в ваших классах.

Вы пытаетесь построить TradingCenter в своем основном методе с пятью последовательными строковыми параметрами, но ваше определение класса Trading Center требует:

(String, String, int, String, String [])

Аналогичная проблема возникает и в SportCenter... конструктор не соответствует определению класса.

0

Значение передается как A String, т.е. "(Int) 3". Все, что внутри "", рассматривается как строка. Но ваш конструктор исключает целочисленное значение. Поэтому либо измените параметр constuctor на String, либо передайте его как целое (без кавычек).

PS Если вы хотите преобразовать String в int, используйте Integer.parseInt(str); например

String str = "8";
int i = Integer.parseInt(str);

Значение я теперь 8.

  • 0
    Большой! Это сработало, но теперь у меня есть проблемы для String, которые не могут быть преобразованы в String []. И если я удаляю "", я получаю сообщение об ошибке; ожидается...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню