Удаление символов

317
30 августа 2017, 14:34

Имеется следующий код:

package com.company;
public class Main {
    public static void main(String[] args) {
        String[] arr = {"+5", "-3"};
        int a = 0;
        for (int i = 0; i<arr.length; i++){
            if (arr[i].contains("+")){
                arr[i].replace('+',' ');
            }
            else if (arr[i].contains("-")){
                arr[i].replace('-',' ');
            }
            System.out.print(arr[i]+" ");
        }
    }
}

Задача программы - изъятие элемента массива, определение знака для вычисления и последующее вычисление. a - начальное число. Другого способа удаления +/-, после определения знака, не нашёл, но и этот не работает. В чём ошибка?

Answer 1

Не работает, потому что строки неизменяемые. Вы пытаетесь в строке arr[i] заменить + на пробел, но он не заменится, вместо этого метод replace вернёт вам новую строку, в которой + будут заменены на пробел. Соответственно чтобы код работал, нужно писать так:

arr[i] = arr[i].replace('+',' ');
Answer 2

Предлагаю такое решение, учитывая что a с типом int, т.е. не дробное, то результат будет с усечением:

public class Test {
    public static void main(String[] args) {
        String[] arr = {"+5", "-3", "*5", "/2", "%2"};
        int a = 0;
        for (int i = 0; i<arr.length; i++){
            // получим знак операции
            char sign = arr[i].toCharArray()[0];
            // получим число, и произведём автораспаковку в примитив int
            int num = Integer.valueOf(arr[i].substring(1));
            // условия для знака операции 
            switch(sign){
                case '+' : a += num; break;
                case '-' : a -= num; break;
                case '*' : a *= num; break;
                case '/' : a /= num; break;
                case '%' : a %= num; break;
            }
        }
        // результат
        System.out.print(String.format("Result: %d", a));
    }
}

Answer 3

Поскольку вы задаете числа строками, можно их конвертировать встроенными средствами:

public static void main(String[] args) {
    String[] arr = {"+5", "-3"};
    int result = 0;
    for (String numStr : arr) {
        result += Integer.parseInt(numStr);
    }
    System.out.println(result);
}
READ ALSO
Android - как сделать EditText неактивным, в то же самое время сохраняя курсор?

Android - как сделать EditText неактивным, в то же самое время сохраняя курсор?

Я разрабатываю клавиатуру используя EditText и Button-ыПри нажатии на кнопку, текстовое поле заполняется соответствующей буквой

330
Повтор обработки событий в Java

Повтор обработки событий в Java

Есть кнопка, при нажатии на которую проигрывается звук и меняется цветКак заставить через время возвращать кнопку первоначальный цвет и добавить...

398
Вставить текст в закладки MS Word

Вставить текст в закладки MS Word

Доброго времени суток! Есть шаблон Word(doc), его необходимо открыть и на место закладок, которые имеются в документе, вставить текст, после сохранить...

378