Как переделать программу, чтобы она могла работать с несколькими запросами?

88
23 августа 2021, 11:40

Есть программа, которой подается на вход 2 натуральных числа: размеры таблицы (а*b) и строка вида ADD (число) (число). Оба числа являются координатами ячейки в таблице. Программа должна прибавить 1 в ячейку с такими координатами. У меня программа может обрабатывать только 1 строку, а как сделать так, чтоб можно было ввести сразу несколько запросов?

public class Test3 {
static Scanner scanner = new Scanner (System.in);
static String str = scanner.nextLine();
static int a = scanner.nextInt();
static int b = scanner.nextInt();

static int[][] table = new int[a][b];
public static void main (String args[]) {

    res(getOp(str));
    for (int i = 0; i < a; i++) {  
        for (int j = 0; j < b; j++) {
            System.out.print(" " + table[i][j] + " "); 
        }
        System.out.println();
    }
}
public static String getOp(String str) {
    String [] ops = str.split(" ");
    return ops[0];
}
public static int getX(String str) {
    String [] ops = str.split(" ");
    return Integer.parseInt(ops[1]);
}
public static int getY(String str) {
    String [] ops = str.split(" ");
    return Integer.parseInt(ops[2]);
}
public static void res(String op) {
    switch(op) {
    case "ADD":
        table [getX(str)-1][getY(str)-1]+=1;
        break;
    }
}
Answer 1

Старайтесь хоть немного избавляться от статики. Помните о инкапсуляции. Разбивайте методы осмыслено, а не лишь бы раздробить на части. К примеру, вы создали 3 метода, которые делят строку сплитом(каждый), два из них парсит стринг в инт? Это дублирование кода. Старайтесь быстрее выйти за пределы класса и метода мейн. А еще свитч с одним кейсом выглядит очень странно...

import java.util.Scanner;
class Test3 {
    public static void main(String args[]) {
        while (true) {
            Scanner scanner = new Scanner(System.in);
            String str = scanner.nextLine();
            int a = scanner.nextInt();
            int b = scanner.nextInt();
            new Test4(a, b).start(str);
        }
    }
}
class Test4 {
    private final int[][] table;
    public Test4(int a, int b) {
        this.table = new int[a][b];
    }
    public void start(String str) {
        res(str, table);
        printTable(table);
    }
    private void res(String str, int[][] table) {
        final String[] split = str.split(" ");
        switch (split[0]) {
            case "ADD":
                table[stringToInteger(split[1]) - 1][stringToInteger(split[2]) - 1] += 1;
                break;
        }
    }
    private Integer stringToInteger(String s) {
        return Integer.valueOf(s);
    }
    private void printTable(int[][] table) {
        for (int i = 0; i < table.length; i++) {
            for (int j = 0; j < table[i].length; j++) {
                System.out.print(" " + table[i][j] + " ");
            }
            System.out.println();
        }
    }
}
READ ALSO
Ошибки в пути к картинке, как исправить

Ошибки в пути к картинке, как исправить

У меня есть отдельный файл с картинками под названием src, в котором файл img и там картинкиФайл Src я назначил права Resources Root

287
Класс обёртка Integer

Класс обёртка Integer

Почему во всех примерах, я вижу вот такое: Integer a = new Integer(242); - хотя этот вариант деприкейтед, в идее прям зачеркивает этот кодПочему никто не показывает...

169
Как сделать зависимость между кнопкой и option?

Как сделать зависимость между кнопкой и option?

Как в зависимости от выбранной опции тега select, содержащей data-id, привязать его к кнопке, те при выборе 1, кнопка получала data-id = 1 и тд

88
SyntaxError: Unexpected token =

SyntaxError: Unexpected token =

подскажите пожалуйста при запуске данного кода мне выдаётся ошибка

297