2013-11-17 2 views
2
String car; 

    if (type == 'E') 
     {fee = rate*50; 
     car = "Economy";} 

    else if (type == 'M') 
     {fee = rate*70; 
     car = "Midsize";} 


    else if (type == 'F') 
     {fee = rate*100; 
     car = "Fullsize";} 

System.out.println("Car type is " + car); 

Это часть моей программы, с которой у меня проблемы. Я получаю, что «локальная переменная машина, возможно, не была инициализирована». Что я должен сделать, чтобы инициализировать «автомобиль»?Как инициализировать строку?

+2

А что если тип не равен 'E',' M' или 'F'? Просто инициализируйте его с помощью 'String car =" ";' –

+0

Это ситуация, когда вы действительно должны использовать 'enum' для своих значений' E', 'M' и' F'; вы можете назначать имена, описания, ставки и т. д. значениям перечисления, и это делает ваш код более чистым, безопасным и более удобным. – chrylis

ответ

4

Java не может гарантировать, что car когда-либо будет инициализирован. У вас нет гарантированного случая (else) в вашем заявлении if, которое назначает car.

Инициализировать его до некоторого значения, например пустую строку.

String car = ""; 
+1

Убейте меня к нему: D –

+3

Правильно ли всегда инициализировать ваши строковые переменные пустым вместо нуля? – Diganta

0

В общем, вы установите строку в null решить ошибку компиляции.

String car = null; 

Это потому, что Java пытается защитить вас от выполнения чего-то, чего вы не ожидаете. Если все операторы if не выполняются, переменная не будет назначена. Чтобы сказать Java, что вы знаете, что это может произойти, вы просто решили явно установить его на null.

0

Java не может сказать, что произойдет с вашей печатью переменной, поскольку она изначально указывает нигде, и дальнейшие инициализации заключены в условные выражения. Установите свою переменную автомобиля в значение по умолчанию в зависимости от логики: «» или «нуль» являются хорошими варианты, но это действительно до вас в конце концов

0

Я бы рассмотреть, чтобы сделать это по-другому:

switch (type) { 
case 'E': 
    fee =rate* 50; 
    car = "Economy"; 
    break; 
case 'M': 
    fee =rate* 70; 
    car = "Economy"; 
    break; 
case 'F': 
    fee =rate*100; 
    car = "Economy"; 
    break; 
default: 
    fee = 0; 
    car = ""; 
} 
0

Как бы, решить эту проблему, используя внутренний Enum класс.

public class EnumExample { 
    public enum CarType { 
     E(50,"Economy"), 
     F(70, "Midsize"), 
     M(100, "Fullsize"); 
     // Add as many as you want 

     private int cost; 
     private String type; 

     CarType(int theCost, String theType) { 
      cost = theCost; 
      type = theType; 
     } 

     public int getFee(int rate) { 
      return rate*cost; 
     } 

     public String toString() { 
      return type; 
     } 
    } 
    public static void main(String[] args) { 
     String type = "E"; 
     int rate = 25; 

     switch(CarType.valueOf(type)) { 
      case E: 
       System.out.println("The Car Type is: " + CarType.E); 
       System.out.println("The fee is: " + CarType.E.getFee(rate)); 
       break; 
      case F: 
       System.out.println("The Car Type is: " + CarType.F); 
       System.out.println("The fee is: " + CarType.F.getFee(rate)); 
       break; 
      case M: 
       // ETC 
      default: 
       // Use a switch/case so you can add 'no car type' e.g Fee = 0; 
     } 
    } 
} 
Смежные вопросы