Как правильно использовать оператор "&" в части перечисления нескольких элементов из списка?
Как правильно использовать оператор "&" в части перечисления нескольких элементов из списка?
Либо какой способ лучше выбрать, чтобы код заработал?
import java.util.Scanner;
public class Checkyourexp {
public static void main(String[] args)
{
System.out.print("Введите опыт торговли на финансовых рынках от 0 до 99 лет: ");
Scanner user_input = new Scanner(System.in);
int traderExperience = Integer.parseInt(user_input.next());
String mrating;
System.out.print("Выберите финансовый инструмент из списка: валюта, акции, облигации, фьючерсы, опционы, криптовалюты, NFT");
mrating = user_input.next();
if ((traderExperience == 0) || (mrating.equalsIgnoreCase("акции")) || (mrating.equalsIgnoreCase("фьючерсы")) || (mrating.equalsIgnoreCase("опционы"))
||(mrating.equalsIgnoreCase("криптовалюты")) || (mrating.equalsIgnoreCase("NFT")))
{
System.out.print("Вы не опытный трейдер, Вам нужны советы, обратите внимание на облигации либо попробуйте начать с торговли на валютных рынках");
}
else if (traderExperience ==1) || mrating.equalsIgnoreCase("опционы") || mrating.equalsIgnoreCase("криптовалюты") || mrating.equalsIgnoreCase("NFT")) {
System.out.print(" Вы начинающий трейдер, но мы не рекомендуем вам криптовалюты, опционы либо NFT ");
}
else if ((traderExperience >= 2) && mrating.equalsIgnoreCase("NFT")) {
System.out.print("У Вас хорошие навыки, но лучше попробуйте попрактиковаться ещё минимум год, и вернуться к теме NFT");
}
else {
System.out.print("Вы уже достаточно опытны, чтобы самостоятельно принимать решение по торговле тем или иным финансовым инструментом");
}
}
}
Ответы (2 шт):
Автор решения: Alex Rudenko
→ Ссылка
Замечания по коду:
&- это побитовый оператор И; в данном случае следует использовать логический оператор&&- Для проверки, содержит ли
mratingодно из многих допустимых значений следует использовать оператор логическое ИЛИ||-- переменнаяmratingне может одновременно быть равна двум и более разным строкам. - Поскольку строки являются объектами, их сравнение следует выполнять при помощи методов
String::equals/String::equalsIgnoreCase, а не оператора==, который будет сравнивать ссылки на строки, а не их значения - Так как для пользовательского ввода используется
Scanner::next, то введённые слова не будут содержать пробелов, как в случае" криптовалюты " - Условия
if (num_age >= 1 ...) if (num_age >= 2 ...)могут выполниться два раза, вероятно между ними должен быть операторelse. - Вместо проверки условий
if (mrating.equalsIgnoreCase(t1) || mrating.equalsIgnoreCase(t1) ...), можно создать множество допустимых значенийSet<String> m1 = Set.of("опционы", "криптовалюты", "NFT", "фьючерсы", "акции")и т.п., тогда можно использовать методSet::contains:if (m1.contains(mrating.toLowerCase())) - название переменной
user_ageвсё-таки обозначает возраст пользователя, а не стаж трейдераtraderExperience, также следует обратить внимание на соглашение об именах переменных/классов, принятое в Джаве, в частности, что названия переменных/методов записываются вcamelCase.
Полностью исправленный код не приводится, работу над указанными ошибками следует проделать самостоятельно.
Автор решения: Дима Ерохин
→ Ссылка
Добавлю к ответу и к коментам выше. Оператор & можно использовать , если все операнды типа boolean, иначе это уже побитовая операция, а && - это укороченное AND которое используется только с boolean. И зачем нужен Integer.parseInt если Сканер на то и Сканер , что у него есть методы парсинга :
- next (); считывает ввод до пробела
- nextLine (); всю стрроку до \n и переходит на следующую
- nextInt ();
- nextDouble ();