Вот код
public class Take1_Number {
public static Scanner oj = new Scanner(System.in);
public static int ParsInt;
public static int ParsInt2;
public static String Number1;
public static String hok;
public static int reshenm;
static boolean jok;
public static void take1() {
Number1=oj.next().toLowerCase();//берем значение введенное пользователем
RazborChisla();
ArifmDo arfm = new ArifmDo();
arfm.Sweetch();
}
public static void RazborChisla() {
int Num1,Num2;
String NuMbers="",NuMbers2="";
Pattern p = Pattern.compile("-?\\d+");
Matcher m = p.matcher(Number1);
while (m.find()) {
NuMbers=NuMbers+m.group();
NuMbers2=NuMbers2+m.group();}
if(Number1.contains("-")) {NuMbers=NuMbers.substring(0, NuMbers.length() - 2);}else {NuMbers=NuMbers.substring(0, NuMbers.length() - 1);}
Num1=Integer.parseInt(NuMbers);
ParsInt=Num1;
NuMbers2=NuMbers2.replace("-","");
NuMbers2=NuMbers2.substring(0, NuMbers2.length()-1);
System.out.println(NuMbers2);
Num2=Integer.parseInt(NuMbers2);
ParsInt2=Num2;
reshenm=Num1-Num2;
}
public void Exept(){
if(ParsInt<1 || ParsInt>10) {System.out.println("Ты ввел число больше 10, либо меньше 1);}
}
при отнимании, он складывает, а при других операциях, все нормально
public class ArifmDo extends Take1_Number{
public void Sweetch() {
String option=Number1;
if(option.contains("+")) {System.out.println(ParsInt=ParsInt+ParsInt2);}
if(option.contains("-")) {/*System.out.println((ParsInt=ParsInt-ParsInt2);*/System.out.println(reshenm);}
// где я закомментил, происходит баг, вместо сложеия, число складывается
if(option.contains("/")) {System.out.println(ParsInt=ParsInt/ParsInt2);}
if(option.contains("*")) {System.out.println(ParsInt=ParsInt*ParsInt2);}
}
}
main
public class Main {
static char operation;
static int firstN;
static int secondN;
public static void main(String[] args) {
// TODO Auto-generated method stub TODO
Take1_Number strok = new Take1_Number();
strok.take1();
}
Баг тут далеко не один. Попробуйте ввести 5+7. Зачем тут наследование? Почему вы не придерживаетесь правил именования переменных и методов? ПО какому принципу вы делите код на методы? В данном случае единственное, что могу предложить - простенькое альтернативное решение. А уже его рефакторингом и усовершенствованием займетесь сами.
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Calculator {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Calculator calculator = new Calculator();
String userInput = sc.nextLine().replace(",", ".").replace(" ", "");
List<String> list = calculator.parseInput(userInput);
Double result = calculator.calculate(list);
System.out.println(userInput + "=" + result);
}
private List<String> parseInput(String userInput) {
List<String> parseList = new ArrayList<>();
StringBuilder sb = new StringBuilder();
for (char ch : userInput.toCharArray()) {
if (Character.isDigit(ch) || ch=='.' || ch==',') sb.append(ch);
else {
parseList.add(sb.toString());
parseList.add(String.valueOf(ch));
sb = new StringBuilder();
}
}
parseList.add(sb.toString());
return parseList;
}
private Double calculate(List<String> parseList) {
Double result = null;
String mathAction = null;
for (int i = 0; i < parseList.size(); i++) {
if (i % 2 == 0) result = calculate(result, parseList.get(i), mathAction);
else mathAction = parseList.get(i);
}
return result;
}
private Double calculate(Double result, String numb, String mathAction) {
try {
Double number = Double.valueOf(numb);
if (result == null) return number;
switch (mathAction) {
case "+": return result + number;
case "-": return result - number;
case "*": return result * number;
case "/": return result / number;
default: throw new UnsupportedOperationException("Math action " + mathAction + " not supported!");
}
} catch (NumberFormatException e) {
throw new UnsupportedOperationException("User input contains unsupport characters: " + numb);
}
}
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Прописываю в идее эллементарный код со свитчемНо мне идея выдает,что она якобы не видит метод Switch
Ребят, помогите пожалуйстаПри запуске, написанного приложения, выскакивает уведомление, что в работе приложения произошел сбой
Подскажите пожалуйста (для прям совсем новичка) Как написать и запустить свой тест ? Например есть репозиторий https://githubcom/rojoangel/codewars/tree/master/java/are-they-the-same...
Хотите улучшить этот вопрос? Обновите вопрос так, чтобы он вписывался в тематику Stack Overflow на русском