Программа - калькулятор. Ввожу в консоли в строку значения, сканер их считывает. После эти значения толкаю в массив(пробовал и отдельные переменные). Все значения кроме "+" успешно проходят данную операцию, но от плюса присваивания из сканера прекращаются, вследствие чего программа не работает.
Буду очень благодарен, если кто подскажет в чём трабл с + заключается. Интернет рыл, ничего подобного не нашёл.
package CalcCons;
import java.util.Scanner;
public class CalculatorConsole {
public static void main(String[] args) {
Input myInput = new Input(); // объект класса ввода выражения
CalcAction myCalcAction = new CalcAction(); // Объект расчёта выражения
myInput.Input(); // Вызов ввода выражения
myCalcAction.CalcAction(); // Вызов расчёта выражения
}
}
class Input {
public void Input() {
System.out.println("Введите выражение:");
Scanner in = extracted().useDelimiter("[,\\s+]"); // Считывание строки
proverkaRome(in); // Проверка: арабские или римские числа введены
if (Example.value[3] == "1") { // если это не целые числа, то
converterRome();
} else
{
MathTrue();
}
}
private void proverkaRome(Scanner in) {
boolean Rome1 = false;
boolean Rome2 = false;
if(in.hasNextInt()) {
Example.value[0] = in.next();
} else {
Rome1 = true;
Example.value[0] = in.next();
}
Example.value[1] = in.next();
if(in.hasNextInt()) {
Example.value[2] = in.next();
} else {
Rome2 = true;
Example.value[2] = in.next();
}
if (((Rome1 == false) && (Rome2 == true)) || ((Rome2 == false) && (Rome1 == true))) {
System.out.println("Введено недопустимое выражение");
System.exit(0);
}
if ((Rome1 == true) && (Rome2 == true)) {
Example.value[3] = "1";
}
}
private void converterRome() { // конвертация римских чисел в арабские
String firstRome = Example.value[0]; //присваиваем значения из скана
String secondRome = Example.value[2];
// Массив с римскими числами:
String[] rome = {"0","I","II","III","IV","V","VI","VII","VIII","IX","X"};
boolean rome1 = false, rome2 = false;
//сравниваем считанные из скана значения со значениями из массива
for (int i = 1; i < 11; i++) {
if (firstRome.equals(rome[i])) { // конвертируем римские числа в арабские и ставим галочку
Example.value[0] = String.valueOf(i);;
rome1 = true;
}
if (secondRome.equals(rome[i])) {
Example.value[2] = String.valueOf(i);
rome2 = true;
}
}
if ((rome1 == false) || (rome2 == false)) { // Если оба числа не оказались римскими, то
System.out.println("Введено недопустимое выражение");
System.exit(0);
}
MathTrue();
}
private Scanner extracted() {
return new Scanner(System.in);
}
private static void MathTrue() {
int a = Integer.parseInt(Example.value[0]);
int c = Integer.parseInt(Example.value[2]);
if ((a > 10) || (a < 1) || (c > 10) || (c < 1)) {
System.out.println("Введено недопустимое выражение; Я умею считать только числа от 1 до 10");
System.exit(0);
}
int index1 = Example.value[1].indexOf('+');
int index2 = Example.value[1].indexOf('-');
int index3 = Example.value[1].indexOf('*');
int index4 = Example.value[1].indexOf('/');
if ((index1 == -1) && (index2 == -1) && (index3 == -1) && (index4 == -1)) {
System.out.println("Введено недопустимое выражение; Я не знаю такого оператора");
System.exit(0);
}
}
}
class CalcAction {
public void CalcAction() {
int first, second;
first = Integer.parseInt(Example.value[0]);
second = Integer.parseInt(Example.value[2]);
int answer = 0;
switch(Example.value[1]) {
case("+"):
answer = Summa(first, second);
break;
case("-"):
answer = Subtraction(first, second);
break;
case("*"):
answer = Multiplication(first, second);
break;
case("/"):
answer = Division(first, second);
break;
}
if (Example.value[3] == "0") {
System.out.println(answer);
} else {
reConverter(answer);
}
}
private static int Summa(int first, int second) {
return (first + second);
}
private static int Subtraction(int first, int second) {
return (first - second);
}
private static int Multiplication(int first, int second) {
return (first * second);
}
private static int Division( int first, int second) {
return(first / second);
}
private static void reConverter(int answer) {
String[] rome = {"0","I","II","III","IV","V","VI","VII","VIII","IX","X"};
for (int i = 1; i < 11; i++) {
if (answer == i) {
System.out.println(rome[i]);
}
}
}
}
class Example {
public static String[] value = {"0","0","0","0"};
}
Класс Input, метод Input(). В строке:Scanner in = extracted().useDelimiter("[,\\s+]");
исправьте регулярное выражение. Уберите плюс и оставьте [,\\s]
Так все работает.
Небольшой совет. Логическое выражение if (((Rome1 == false) && (Rome2 == true)) || ((Rome2 == false) && (Rome1 == true)))
легко упрощается до вот такого вида: if (!Rome1 && Rome2 || !Rome2 && Rome1)
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Передо мной стоит задача по нажатию добавлять input с кнопкой удаления этого инпутаМаксимальное кол-во инпутов 4
Пытаюсь удалить комментарии из контейнера, так как потом работаю с потомками этого контейнера используя firstChild в циклеУдаляю ненужных потомков...