Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Помогите разделить код на методы

KOT Профи (531), закрыт 3 недели назад
/*
Online Java - IDE, Code Editor, Compiler

Online Java is a quick and easy tool that helps you to build, compile, test your programs online.
*/
import java.util.Scanner;

public class Main
{
public static void main(String[] args) throws Exception {
Scanner scn = new Scanner( System.in );
String exp = scn.nextLine();
char action;
String[] data;
if (exp.contains(" + ")) {
data = exp.split(" \\+ ");
action = '+';
} else if (exp.contains(" - ")) {
data = exp.split(" - ");
action = '-';
} else if (exp.contains(" * ")) {
data = exp.split(" \\* ");
action = '*';
} else if (exp.contains(" / ")) {
data = exp.split(" / ");
action = '/';
}else{
throw new Exception("Некорректный знак действия");
}
if (action == '*' || action == '/') {
if (data[1].contains("\"")) throw new Exception("Строчку можно делить или умножать только на число");
}
for (int i = 0; i < data.length; i++) {
data[i] = data[i].replace("\"", "");
}

if (action == '+') {
printInQuotes(data[0] + data[1]);
} else if (action == '*') {
int multiplier = Integer.parseInt(data[1]);
String result = "";
for (int i = 0; i < multiplier; i++) {
result+=data[0];
}
printInQuotes(result);
} else if (action == '-') {
int index = data[0].indexOf(data[1]);
if(index == -1){
printInQuotes(data[0]);
}else{
String result = data[0].substring(0, index);
result+=data[0].substring(index+data[1].length());
printInQuotes(result);
}
}else{
int newLen = data[0].length()/Integer.parseInt(data[1]);
String result = data[0].substring(0,newLen);
printInQuotes(result);
}


}
static void printInQuotes(String text){
if (text.length()>40){
System.out.println("""+text.substring(0,40)+"..."+""");
}
else{
System.out.println("\""+text+"\"");}

}
}
Лучший ответ
Татьяна Просветленный (32581) 3 недели назад
 import java.util.Scanner; 

public class Main {
public static void main(String[] args) throws Exception {
Scanner scn = new Scanner(System.in);
String exp = scn.nextLine();
char action = getAction(exp);
String[] data = getData(exp, action);

if (action == '*' || action == '/') {
validateMultiplicationOrDivision(data[1]);
}

for (int i = 0; i < data.length; i++) {
data[i] = data[i].replace("\"", "");
}

String result = calculateResult(action, data);
printInQuotes(result);
}

static char getAction(String exp) throws Exception {
if (exp.contains(" + ")) {
return '+';
} else if (exp.contains(" - ")) {
return '-';
} else if (exp.contains(" * ")) {
return '*';
} else if (exp.contains(" / ")) {
return '/';
} else {
throw new Exception("Некорректный знак действия");
}
}

static String[] getData(String exp, char action) {
String[] data;
switch (action) {
case '+':
data = exp.split(" \\+ ");
break;
case '-':
data = exp.split(" - ");
break;
case '*':
data = exp.split(" \\* ");
break;
case '/':
data = exp.split(" / ");
break;
default:
data = new String[0]; // technically unreachable
}
return data;
}

static void validateMultiplicationOrDivision(String data) throws Exception {
if (data.contains("\"")) {
throw new Exception("Строчку можно делить или умножать только на число");
}
}

static String calculateResult(char action, String[] data) throws Exception {
String result = "";
switch (action) {
case '+':
result = data[0] + data[1];
break;
case '*':
int multiplier = Integer.parseInt(data[1]);
for (int i = 0; i < multiplier; i++) {
result += data[0];
}
break;
case '-':
int index = data[0].indexOf(data[1]);
if (index == -1) {
result = data[0];
} else {
result = data[0].substring(0, index) + data[0].substring(index + data[1].length());
}
break;
case '/':
int newLen = data[0].length() / Integer.parseInt(data[1]);
result = data[0].substring(0, newLen);
break;
}
return result;
}

static void printInQuotes(String text) {
if (text.length() > 40) {
System.out.println("\"" + text.substring(0, 40) + "...\"");
} else {
System.out.println("\"" + text + "\"");
}
}
}
Теперь код разбит на методы, что облегчает его чтение и сопровождение:

getAction определяет действие на основе введенного выражения.
getData разбивает строку на данные в зависимости от действия.
validateMultiplicationOrDivision проверяет корректность деления или умножения строки.
calculateResult вычисляет результат в зависимости от действия.
printInQuotes выводит результат в кавычках.
Этот подход помогает сделать код более структурированным и модульным.
KOTПрофи (531) 3 недели назад
Помогите пожалуйста еще с таким вопросом Как прописать чтобы Калькулятор принимал на вход числа от 1 до 10 включительно, не более. И строки длинной не более 10 символов
Остальные ответы
Максим Искусственный Интеллект (200418) 3 недели назад
Такой код лучше писать по типу: readInt, readOperator без всяких contains. Тем более что Scanner это хорошо умеет.
Похожие вопросы