#java
#java
Вопрос:
При попытке написать следующий код выдает 3 ошибки. Синтаксическая ошибка в токене ‘else’, вставьте ‘выражение assignmentoperator’ для завершения присваивания и не удается преобразовать из строки в логическое значение. Это для поля со списком, и когда я выбираю из поля со списком, я хочу удалить другие сайты из списка. ‘site’ — это переменная в main и c.site — это параметр в другом агенте. Может кто-нибудь объяснить, что делать.
if ( site ) {
if ( c.site.equals( "x" ) ) {
cavernIterator.remove();
continue;
}
}
else {
if ( c.site.equals( "y" ) ) {
cavernIterator.remove();
continue;
}
}
else {
if ( c.site.equals( "z" ) ) {
cavernIterator.remove();
continue;
}
}
else {
( c.site.equals( "a" ) ) {
cavernIterator.remove();
continue;
}
}
Комментарии:
1. Можете ли вы предоставить сайт. System.out.println(«Site: » сайт);
Ответ №1:
У вас не может быть нескольких else
блоков для одного и того же if
. Каждый else
блок должен быть присоединен к своему if
:
if(a) {
...
} else {
if (b) {
...
}
else {
if (c) {
...
}
else {
...
}
}
}
Или, сокращенно для всего этого, вы можете иметь блок с одним оператором внутри else
, чтобы он выглядел так:
if (a) {
...
}
else if (b) {
...
}
else if (c) {
...
}
else {
...
}
Этот второй вариант почти такой же, как и первый, поскольку он использует преимущество отсутствия необходимости заключать блок оператора в фигурные скобки, если ваш блок оператора содержит только один оператор, например:
if (myCondition)
System.out.println("My condition passed");
else
System.out.println("My condition did not pass");
Ответ №2:
Остальное, если должно быть написано таким образом :
if (...) {
// Code here
} else if (...) {
// Code here
} else {
// Code here
}
Также ваши случаи кажутся похожими
String[] sites = {"x","y","z","a"};
boolean contains = Arrays.stream(sites).anyMatch(c.site::equals);
if (contains) {
cavernIterator.remove();
continue;
}
РЕДАКТИРОВАТЬ: Учитывая, что сайт является строкой
String site = "x"; // Default value provided
String[] sites = {"x","y","z","a"};
boolean condition = site.equals(c.site) amp;amp; Arrays.stream(sites).anyMatch(c.site::equals);
if (condition) {
cavernIterator.remove();
continue;
}
Комментарии:
1. Второй код удаляет все из списка. Я просто хочу удалить остальные 3, когда выбран 1. В первом коде все еще говорится, что невозможно преобразовать строку в логическое значение
2. @Flygerian if (сайт) … site — это строка, которая не может быть преобразована в логическое
3. @Flygerian .remove(), безусловно, является причиной удаления всего из списка 😉
4. что я должен написать вместо этого, или я должен изменить параметр или переменную]
5. итак, поле со списком должно быть связано с переменной в main, так что это сайт. Таким образом, ‘if (site)’ должен связать переменную site с параметром site. Или есть другой способ сделать это
Ответ №3:
if ( site ) {
if ( c.site.equals( "x" ) ) {
}
}
равно
if(site amp;amp; c.site.equals("x")){
}
И ваше последнее еще перепутано.
Вероятно, посмотрите некоторые руководства по Java, потому что вы пишете наименее эффективный способ. Короче говоря, это ваш код:
if (site amp;amp; (c.site.equals("x") || c.site.equals("y") || c.site.equals("z") || c.site.equals("a"))) {
cavernIterator.remove();
}
Комментарии:
1. В вашем коде появляется ошибка «оператор amp;amp; не определен для типа (ов) аргумента String, boolean»
2. @Flygerian как упоминалось выше, если site является строкой, его нельзя сравнить с помощью amp;amp;
3. тогда каким должен быть сайт
4. В зависимости от того, что вы хотите использовать, логическое значение, строку, любой объект… Каково ваше условие if? если (site != null) ? если (!site.equals(«a»)) ?
5. Я хочу, чтобы это была строка, как это есть. мое условие if — если это сайт, я хочу удалить другие сайты