#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
имеет дополнительную скобку, которая закрывает конструктор.