首页 > 解决方案 > 类型不匹配无法从 String 转换为 int

问题描述

该应用程序的目标如下:我想创建类“Flugzeug”(飞机的德语单词)的对象(飞机)。我想创建一个引用对象不同属性的数组。

问题是(据我所知)一个数组只能引用完全相同类型的变量。

我怎样才能改变我的程序,它可以工作?是否不可避免地为每个属性创建一个数组(例如,为每个不同类型的变量)?

编码:

public class Fluggesellschaft {
    public static void main(String[] args) {

        Flugzeug [] airline = new Flugzeug [4]; 
        for (int i = 0; i < 4; i=i+1){  
            airline[i] = new Flugzeug ();
            airline[0].type = "A320";
            airline[0].idNumber = "1";
            airline[0].seats = "165";
            airline[0].velocity = "890";
            airline[0].range = "12600";
            airline[1].type = "Boeing 747";
            airline[1].idNumber = "2";
            airline[1].seats = "416";
            airline[1].velocity = "907";
            airline[1].range = "12700";
            airline[2].type = "Avro RJ 85";
            airline[2].idNumber = "3";
            airline[2].seats = "93";
            airline[2].velocity = "760";
            airline[2].range = "2200";
            airline[3].type = "Airbus 380";
            airline[3].idNumber = "4";
            airline[3].seats = "516";
            airline[3].velocity = "907";
            airline[3].range = "12000";
        }

        for (int i=0; i < 4; i=i+1) {
            airline[i].printInfo();
            double time = airline[i].getTime(6320);  //distance from Zurich to New York
            System.out.println("duration: " + time + " h");
            int capacity = airline[i].getCapacity(365);
            System.out.println("capacity: " + capacity + " passengers / year");
        }        
   }             
}   


public class Flugzeug {

    String type;
    int idNumber;
    int seats;
    double velocity;
    double range;
    double distance;
    int days;

    public void printInfo() {
        System.out.println("type: " + this.type);
        System.out.println("ID-number: " +this.idNumber);
        System.out.println("seats: " + this.seats);
        System.out.println("velocity: " + this.velocity);
        System.out.println("range: " + this.range);
    }

    public double getTime (double dist) {
        double result = 0;
        result = dist / velocity;
        double time = result;
        return time;    
    }

    public int getCapacity(int days) {
        int capacity = seats * days;
        return capacity;
    }

}

标签: javaarraystypes

解决方案


你的问题的核心是:

一个数组只能引用完全相同类型的变量。

这是正确的(或者大部分正确,数组的所有元素都必须有一个共同的基本类型,但现在这不是相关的区别)。

但是你的数组里面的类型是Flugzeug,不是String

所以数组的每个元素都必须是一个Flugzeug. 这并不意味着该类的字段都必须共享一个类型(实际上,正如您发布的那样,它们没有)。

看看这一行:

airline[0].idNumber = "1";

几乎是正确的,但既然idNumber是 anint你必须给它分配一个int值(例如1):

airline[0].idNumber = 1;

第二个(大部分不相关)问题是您尝试访问Flugzeug创建它们的循环内的所有 4 个实例。这意味着当您在创建第一个实例(仅!)之后尝试访问第二个实例时,它将崩溃:

替换这个:

for (int i = 0; i < 4; i=i+1) {  
    airline[i] = new Flugzeug ();
    airline[0].type = "A320";
    airline[1].type = "Boeing 747";
    airline[2].type = "Avro RJ 85";
    airline[3].type = "Airbus 380";
}

有了这个:

for (int i = 0; i < 4; i=i+1) {  
    airline[i] = new Flugzeug ();
}
airline[0].type = "A320";
airline[1].type = "Boeing 747";
airline[2].type = "Avro RJ 85";
airline[3].type = "Airbus 380";

推荐阅读