Переменные не используются, но явно используются! — Java

#java #variables

#java #переменные

Вопрос:

Итак, я получаю некоторые странные ошибки, такие как незаконный запуск типа и переменных, которые не используются, когда я их явно вызываю. Сейчас я использую последнюю версию netbeans, и я не эксперт в Java, но я полагаю, что мои netbeans могут быть повреждены или что-то в этом роде, в чем я не уверен.

Насколько моя логика согласуется с этими циклами if, все должно быть в порядке, отсюда и причина, по которой я не собираюсь вдаваться в подробности о том, для чего используется программа.

В любом случае, вот код, в котором я выделю области с ошибками.

Заранее спасибо с уважением -Skeng-

 import javax.swing.*;
import java.io.*;

public class Envelope extends Parcel {

protected char[] size = {'S','M','L'};

public Envelope(){

ImageIcon imageES = new ImageIcon ("..\Images\envelope-small.png");
ImageIcon imageEM = new ImageIcon ("..\Images\envelope-medium.png");
    ImageIcon imageEL = new ImageIcon ("..\Images\envelope-large.png");


    double ChargeS = 4.50; 
    double ChargeM = 8.50;
    double ChargeL = 16.99;        
    double ChargeFinal = 0;   **//Variable not being used**

    if (size[0] == 'S') {
        ChargeFinal = ChargeS;
    } else if (size[1] == 'M') {
        ChargeFinal = ChargeM;
    } else if (size[2] == 'L')
        ChargeFinal = ChargeL;
    }

    int zone = 0; //Zone will equal whatever the user selects for their parcel size
    double zonecharge; //ZoneCharge will be the price depending on the zone


    if (zone == 1) {             **//Illegal Start of Type** 
        zonecharge = 0;          **//Illegal Start of Type**
     } else if (zone == 2) {     **//Illegal Start of Type**
        zonecharge = 1.5;        **//Illegal Start of Type**
     } else if (zone == 3) {     **//Illegal Start of Type**
        zonecharge = 2;          **//Illegal Start of Type**
     } 

     double EndPrice = ChargeFinal * zonecharge;  **//Cannot find Symbol "ChargeFinal"**
     System.out.println("Charge: £"   EndPrice);  **//Illegal Start of Type**


@Override
public String toString() {
return "ID: "   idNum   "Zone: "   zone   "Charge: "   charge   "Size: "   size;
}

@Override
ImageIcon getImage() {
    return image;
}
}
  

Комментарии:

1. Игнорируя вашу проблему на данный момент, в чем именно смысл if утверждений после Charge объявлений? Будет выполнена только одна, хотя все три из них тривиально верны.

2. перед первым переопределением отсутствует }

3. (Вы также должны увидеть, что zonecharge неинициализировано. Я предлагаю добавить else , а не присваивать значение при объявлении. Переменная может быть создана final . Кроме того, это хороший кандидат для «троичного оператора» ? : .

4. И неточные double s за деньги, как правило, считаются плохой идеей.)

Ответ №1:

Это потому, что вам не хватает открывающей скобки после первого else if

 if (size[0] == 'S') {
        ChargeFinal = ChargeS;
    } else if (size[1] == 'M') {
        ChargeFinal = ChargeM;
    } else if (size[2] == 'L') { // ADD THIS BRACKET
        ChargeFinal = ChargeL;
    }
  

Ответ №2:

У вас отсутствует фигурная скобка в конце этой строки:

     } else if (size[2] == 'L')
  

В результате скобка двумя строками позже завершает работу конструктора, и приходят предупреждения «Недопустимое начало типа», потому что следующий блок кода находится за пределами любого метода. Разумеется, у вас не может быть инструкций в области видимости класса!

Комментарии:

1. Lol Чистый сумасшедший от моего имени. Хотя я, в свою защиту, пытался запрограммировать это в 5 утра. xD

2. Рад помочь. Стратегия, позволяющая избежать этого в будущем: если ваш компилятор сообщает вам что-то сумасшедшее, запустите код через средство форматирования — т. Е. попросите Eclipse отформатировать файл или что бы вы ни использовали. Это сразу указало бы на эту проблему.

Ответ №3:

 } else if (size[2] == 'L')
    ChargeFinal = ChargeL;
}  // <-- move this bracket to the end of the constructor 
  

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