Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.61/75: Рейтинг темы: голосов - 75, средняя оценка - 4.61
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 30

Строковый калькулятор

15.08.2013, 14:02. Показов 13963. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Создаю строковый калькулятор, используя алгоритм обратная польская запись. В некоторых случаях код работает, в большинстве случаев работает неправильно. Подскажите, пожалуйста, в чём проблема.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
import java.io.IOException;
import java.util.ArrayList;
import java.util.Stack;
 
public class Calculator {
    static String opn = "";
    static Stack stack;
    static int priority;
    static char temp;
 
    static int currentPriority;
    static double first;
    static double second;
 
    public static void main(String[] args) throws IOException {
        stack = new Stack();
        System.out.println("Enter string: ");
        String s = DataInput.getString();
 
        /**
         * Цикл переводит выражение о Обратную Польскую Нотацию.
         */
        for (int i = 0; i < s.length(); i++) {
 
            /**
             * помещение числа в строку
             * */
            if (Character.isDigit(s.charAt(i))) {
                opn += s.charAt(i);
            }
 
            /**
             * если на вход приходит символ
             * */
            else if (s.charAt(i) == '+' || s.charAt(i) == '-'
                    || s.charAt(i) == '*' || s.charAt(i) == '/'
                    || s.charAt(i) == '^' || s.charAt(i) == '('
                    || s.charAt(i) == ')') {
                /*
                 * if (i > 0 && opn.charAt(opn.length() - 1) != ' ') opn += ' ';
                 * // (1+2)*4+3 // 3 + 4 * 2 / (1 - 5)^2
                 */
                /**
                 * определяется приоритет операции
                 * */
                switch (s.charAt(i)) {
                case '^':
                    priority = 3;
                    break;
                case '/':
                    priority = 2;
                    break;
                case '*':
                    priority = 2;
                    break;
                case '+':
                    priority = 1;
                    break;
                case '-':
                    priority = 1;
                    break;
                case '(':
                    priority = 0;
                    break;
                }
 
                /**
                 * если стек пустой
                 * */
 
                if (stack.empty()) {
                    stack.push(s.charAt(i));
                }
 
                /**
                 * если скобка, помещаем в стек
                 * */
                else if (s.charAt(i) == '(') {
                    stack.push(s.charAt(i));
                }
 
                /**
                 * если закрывающая скобка, то извлекаем символы из стека в
                 * выходную строку до тех пор, пока не встретим в стеке
                 * открывающую скобку
                 * */
                else if (s.charAt(i) == ')') {
                    while (!stack.empty()) {
                        if ((Character) stack.peek() == '(')
                            break;
                        if (!stack.empty() && (Character) stack.peek() != '(') {
                            opn += stack.pop();
                        }
 
                    }
 
                    if (!stack.empty() && (Character) stack.peek() == '(') {
                        stack.pop();
                    }
 
                }
 
                /**
                 * если стек не пустой, определяется приоритет верхнего символа
                 * стека.
                 * */
                else if (!stack.empty()) {
                    temp = (Character) stack.peek();
                    switch (temp) {
                    case '^':
                        currentPriority = 3;
                        break;
                    case '/':
                        currentPriority = 2;
                        break;
                    case '*':
                        currentPriority = 2;
                        break;
                    case '+':
                        currentPriority = 1;
                        break;
                    case '-':
                        currentPriority = 1;
                        break;
                    case '(':
                        currentPriority = 0;
                        break;
                    }
 
                    //
                    /**
                     * если находящиеся в нем символы (а находится в нем могут
                     * только знаки операций и открывающая скобка) имеют меньший
                     * приоритет, чем приоритет текущего символа, то помещаем
                     * текущий символ в стек.
                     */
                    if (currentPriority < priority) {
                        stack.push(s.charAt(i));
                    }
                    //
                    /**
                     * Если символ, находящийся на вершине стека имеет
                     * приоритет, больший или равный приоритету текущего
                     * символа, то извлекаем символы из стека в выходную строку
                     * до тех пор, пока выполняется это условие
                     */
                    else if (currentPriority >= priority) {
                        while (!stack.empty()) {
 
                            temp = (Character) stack.peek();
                            switch (temp) {
                            case '^':
                                currentPriority = 3;
                                break;
                            case '/':
                                currentPriority = 2;
                                break;
                            case '*':
                                currentPriority = 2;
                                break;
                            case '+':
                                currentPriority = 1;
                                break;
                            case '-':
                                currentPriority = 1;
                                break;
                            case '(':
                                currentPriority = 0;
                                break;
                            }
                            /*
                             * if(currentPriority<priority) break;
                             */
                            if (currentPriority >= priority)
                                opn += (Character) stack.pop();
                            else
                                break;
 
                        }
 
                    }
 
                }
 
            }
        }
 
        while (!stack.empty()) {
            if ((Character) stack.peek() == '(')
                stack.pop();
            else
                opn += stack.pop();
        }
 
        System.out.println("Our OPN:" + opn);
 
        /**
         * считаем выражение в ОПН
         * */
        Stack newstack = new Stack();
        for (int i = 0; i < opn.length(); i++) {
            if (Character.isDigit(opn.charAt(i))) {
                newstack.push(opn.charAt(i));
            }
 
            double result = 1;
            if (opn.charAt(i) == '+' || opn.charAt(i) == '-'
                    || opn.charAt(i) == '*' || opn.charAt(i) == '/'
                    || opn.charAt(i) == '^') {
                String fir = "";
                String sec = "";
                fir += newstack.pop();
                sec += newstack.pop();
                first = Double.parseDouble(fir);
                second = Double.parseDouble(sec);
 
                switch (opn.charAt(i)) {
                case '^':
                    result = Math.pow(second, first);
                    newstack.push(result);
                    break;
                case '/':
                    newstack.push(second / first);
                    break;
                case '*':
                    newstack.push(second * first);
                    break;
                case '+':
                    newstack.push(second + first);
                    break;
                case '-':
                    newstack.push(second - first);
                    break;
 
                }
            }
 
        }
        System.out.println("Result: " + newstack.peek());
    }
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.08.2013, 14:02
Ответы с готовыми решениями:

Написать простейший строковый калькулятор, поддерживающий несколько систем счисления
Здравствуйте! Есть идеи, как написать простейший строковый калькулятор, поддерживающий несколько систем счисления? Признательна за помощь.

Строковый Тип данных
Задача такая. Нужно ввести предложение и нужно чтобы слова в нем стали в алфавитном порядке. Пример: Я ДАУН ПОМОГИТЕ РЕШИТЬ----&gt;ДАУН...

Строковый литерал на файл
Не могу достучаться до картинки в res/icons/mailbox.png .:wall:

5
 Аватар для eejunior
6 / 6 / 1
Регистрация: 21.04.2013
Сообщений: 28
16.08.2013, 00:09
Цитата Сообщение от stalkervlad Посмотреть сообщение
public static void main(String[] args) throws IOException {
* * * * stack = new Stack();
* * * * System.out.println("Enter string: ");
* * * * String s = DataInput.getString();
stack = new Stack(); а разве здесь не надо указать тип объекта Stack ??

Добавлено через 5 минут
сорри, тупанул.
А где метод DataInput ??
1
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 30
16.08.2013, 00:11  [ТС]
DataInput

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
 
public final class DataInput {
 
    private static void writeText(String wr){
        if (wr == null)
            System.out.print("Введіть дані: ");
        else 
            System.out.print(wr);
    }
    
    public static Long getLong() throws IOException{
        String s = getString();
        Long value = Long.valueOf(s);
        return value;
    }
    
    public static char getChar() throws IOException{
        String s = getString();
        return s.charAt(0);
    }
    
    public static Integer getInt(String wr){
        writeText(wr);
        String s = "";
        try {
            s = getString();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Integer value = Integer.valueOf(s);
        return value;
        
    }
    
    public static String getString() throws IOException{
        InputStreamReader isr = new InputStreamReader(System.in);
        BufferedReader br = new BufferedReader(isr);
        String s = br.readLine();
        return s;
    }
    
}
0
 Аватар для eejunior
6 / 6 / 1
Регистрация: 21.04.2013
Сообщений: 28
16.08.2013, 00:40
сорри оффтоп ....

Добавлено через 12 минут
этот консольный калькулятор считает только чосла меньше 10 ( X <= 9 )
и в Эклипсе у меня код выглядит так:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
import java.io.IOException;
import java.util.Stack;
 
public class Calculator {
    static String opn = "";
    static Stack<Character> stack = new Stack<Character>();
    static int priority;
    static char temp;
 
    static int currentPriority;
    static double first;
    static double second;
 
    public static void main(String[] args) throws IOException {
//        stack = new Stack();
        System.out.println("Enter string: ");
        String s = DataInput.getString();
 
        for (int i = 0; i < s.length(); i++) {
            if (Character.isDigit(s.charAt(i))) {
                opn += s.charAt(i);
            }
            else if (s.charAt(i) == '+' || s.charAt(i) == '-'
                    || s.charAt(i) == '*' || s.charAt(i) == '/'
                    || s.charAt(i) == '^' || s.charAt(i) == '('
                    || s.charAt(i) == ')') {
                /*
                 * if (i > 0 && opn.charAt(opn.length() - 1) != ' ') opn += ' ';
                 * // (1+2)*4+3 // 3 + 4 * 2 / (1 - 5)^2
                 */
                switch (s.charAt(i)) {
                case '^':
                    priority = 3;
                    break;
                case '/':
                    priority = 2;
                    break;
                case '*':
                    priority = 2;
                    break;
                case '+':
                    priority = 1;
                    break;
                case '-':
                    priority = 1;
                    break;
                case '(':
                    priority = 0;
                    break;
                }
               if (stack.empty()) {
                    stack.push(s.charAt(i));
                }
                else if (s.charAt(i) == '(') {
                    stack.push(s.charAt(i));
                }
                else if (s.charAt(i) == ')') {
                    while (!stack.empty()) {
                        if (stack.peek() == '(')
                            break;
                        if (!stack.empty() && stack.peek() != '(') {
                            opn += stack.pop();
                        }
 
                    }
 
                    if (!stack.empty() && stack.peek() == '(') {
                        stack.pop();
                    }
 
                }
                else if (!stack.empty()) {
                    temp = stack.peek();
                    switch (temp) {
                    case '^':
                        currentPriority = 3;
                        break;
                    case '/':
                        currentPriority = 2;
                        break;
                    case '*':
                        currentPriority = 2;
                        break;
                    case '+':
                        currentPriority = 1;
                        break;
                    case '-':
                        currentPriority = 1;
                        break;
                    case '(':
                        currentPriority = 0;
                        break;
                    }
                   if (currentPriority < priority) {
                        stack.push(s.charAt(i));
                    }
                    //
                   else if (currentPriority >= priority) {
                        while (!stack.empty()) {
 
                            temp = stack.peek();
                            switch (temp) {
                            case '^':
                                currentPriority = 3;
                                break;
                            case '/':
                                currentPriority = 2;
                                break;
                            case '*':
                                currentPriority = 2;
                                break;
                            case '+':
                                currentPriority = 1;
                                break;
                            case '-':
                                currentPriority = 1;
                                break;
                            case '(':
                                currentPriority = 0;
                                break;
                            }
                            /*
                             * if(currentPriority<priority) break;
                             */
                            if (currentPriority >= priority)
                                opn += stack.pop();
                            else
                                break;
 
                        }
 
                    }
 
                }
 
            }
        }
 
        while (!stack.empty()) {
            if (stack.peek() == '(')
                stack.pop();
            else
                opn += stack.pop();
        }
 
        System.out.println("Our OPN:" + opn);
 
        Stack<Comparable> newstack = new Stack<Comparable>();
        for (int i = 0; i < opn.length(); i++) {
            if (Character.isDigit(opn.charAt(i))) {
                newstack.push(opn.charAt(i));
            }
 
            double result = 1;
            if (opn.charAt(i) == '+' || opn.charAt(i) == '-'
                    || opn.charAt(i) == '*' || opn.charAt(i) == '/'
                    || opn.charAt(i) == '^') {
                String fir = "";
                String sec = "";
                fir += newstack.pop();
                sec += newstack.pop();
                first = Double.parseDouble(fir);
                second = Double.parseDouble(sec);
 
                switch (opn.charAt(i)) {
                case '^':
                    result = Math.pow(second, first);
                    newstack.push(result);
                    break;
                case '/':
                    newstack.push(second / first);
                    break;
                case '*':
                    newstack.push(second * first);
                    break;
                case '+':
                    newstack.push(second + first);
                    break;
                case '-':
                    newstack.push(second - first);
                    break;
 
                }
            }
 
        }
        System.out.println("Result: " + newstack.peek());
    }
}
чтобы считало числа X > 9 надо дорабатывать.
1
1 / 1 / 0
Регистрация: 16.12.2011
Сообщений: 30
16.08.2013, 00:46  [ТС]
к сожалению не все примеры правильно переделываются в ОПН. например такие как (1+2)*4+3 и 7+2-4*6
скорее всего напутал с условиями. писал код по этому уроку http://trubetskoy1.narod.ru/ppn.html
0
23 / 23 / 7
Регистрация: 21.04.2013
Сообщений: 52
16.08.2013, 01:31
осторожно, тут код.
Кликните здесь для просмотра всего текста

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
import java.io.IOException;
import java.util.EmptyStackException;
import java.util.LinkedList;
import java.util.Scanner;
import java.util.Stack;
 
public class Calculator {
 
    private String getOPN(String inputString) throws EmptyStackException {
        LinkedList<String> opn = new LinkedList<String>();
        Stack<String> stack = new Stack<String>();
 
        for (String currentSymbol : inputString.split(" ")) {
 
            //число сразу в выходную строку
            if (isNumber(currentSymbol)) {
                opn.add(currentSymbol + " ");
                continue;
            }
 
            //скобку сохраним в стеке операций
            if (currentSymbol.equals("(") || stack.empty()) {
                stack.push(currentSymbol);
                continue;
            }
 
            if (isOperator(currentSymbol)) {
                /*
                 * если верхний в стеке оператор имеет больший
                 * приоритет, чем приоритет текущего оператора, то 
                 * извлекаем символы из стека в выходную строку
                 * до тех пор, пока выполняется это условие
                 */
                while (!stack.isEmpty()
                        && priorityOfOperation(stack.peek()) >= priorityOfOperation(currentSymbol)) {
                    opn.add(stack.pop() + " ");
                }
                stack.push(currentSymbol);
                continue;
            }
 
            /*
             * если закрывающая скобка, то извлекаем символы из
             * стека операций в выходную строку до тех пор,
             * пока не встретим открывающую скобку.
             */
            if (currentSymbol.equals(")")) {
                while (!stack.peek().equals("(")) {
                    opn.add(stack.pop() + " ");
                }
                stack.pop();//выталкиваем саму скобку.
                continue;
            }
        }
 
        /* 
         * отложенные в стеке операторы добавляем
         * в выходную строку.
         */
        while (!stack.empty()) {
            opn.add(stack.pop() + " ");
        }
 
        //крепим вместе последовательность - и на выход
        StringBuilder sb = new StringBuilder();
        for (String s : opn)
            sb.append(s);
 
        return sb.toString();
    }
 
    private boolean isNumber(String currentSymbol) {
        try {
            Double.parseDouble(currentSymbol);
            return true;
        } catch (Exception e) {
            return false;
        }
    }
 
    private boolean isOperator(String c) {
        return c.equals("+") || c.equals("-") || c.equals("*") || c.equals("/")
                || c.equals("^");
    }
 
    private int priorityOfOperation(String temp) {
        switch (temp) {
        case "^":
            return 3;
        case "/":
        case "*":
            return 2;
        case "+":
        case "-":
            return 1;
        default:
            return 0;
        }
    }
 
    private double calculateResult(String OPN) {
        Stack<String> stack = new Stack<String>();
 
        for (String currentSymbol : OPN.split(" ")) {
            if (isNumber(currentSymbol)) {
                stack.push(currentSymbol);
                continue;
            }
 
            if (isOperator(currentSymbol)) {
                double result = 0;
                double first = Double.parseDouble(stack.pop());
                double second = Double.parseDouble(stack.pop());
 
                switch (currentSymbol) {
                case "^":
                    result = Math.pow(second, first);
                    break;
                case "/":
                    result = second / first;
                    break;
                case "*":
                    result = second * first;
                    break;
                case "+":
                    result = second + first;
                    break;
                case "-":
                    result = second - first;
                    break;
                }
                stack.push(String.valueOf(result));
            }
        }
        return Double.parseDouble(stack.pop());
    }
 
    /*
     * что мы делаем - читаем тут 
     * [url]http://ru.wikipedia.org/wiki/%CE%E1%F0%E0%F2%ED%E0%FF_%EF%EE%EB%FC%F1%EA%E0%FF_%E7%E0%EF%E8%F1%FC[/url]
     */
    public static void main(String[] args) throws IOException {
 
        Calculator calculator = new Calculator();
 
        System.out.println("Enter string: ");
        Scanner scan = new Scanner(System.in);
        String s = scan.nextLine();
        //String s = "( 1 + 2 ) * 4 + 3";
        scan.close();
 
        String opn = calculator.getOPN(s);
        System.out.print("Our OPN: " + opn);
 
        double result = calculator.calculateResult(opn);
        System.out.println("\nResult: " + result);
}
}


вы наверное на уроках или на парах изучаете прелести машины фон Неймана, и то, что данные неотличимы от операций над данными)). это круто, конечно, но в джаве всё изначально имеет свой тип. и тип одних данных не равен типу других. если к этой задачке и есть академический интерес, то как раз чтобы показать, что джава - язык со строгой типизацией и тут выкрутасы типа смешения типов очень накладны( нужно постоянно делать что-то вроде Double.parseDouble(string) ).

конкретно по классу выше, что можно сказать - есть два глобальных косяка.
1. под символом понимается не отдельная цифра или знак оператора.. символом может быть и многозначное число еще и с точкой. так что в варианте выше примеры заведомо не работают, если получаются промежуточные числа больше 9 или нецелые.
2. когда мы получили ОПН - мы имеем слипшиеся цифры, никак не разделенные ни операторами, ни пробелами.

нужно принять две меры - все символы строго и всегда делить пробелами и читать не отдельные чары, а подстроки, разделенные пробелами.

зы свой класс протестил только на паре примеров из вики)
2
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.08.2013, 01:31
Помогаю со студенческими работами здесь

Строковый калькулятор
добрый вечер. мне нужно написать программу, выполняющую функцию строкового калькулятора с операциями+-*/. Нашла исходники, но там помимо...

Строковый калькулятор на VB 6.0
Помогите пожалуйста! Надо сдать курсовой проект. Идея калькулятора - в текстовое поле записана математическая формула. Все действия...

Строковый калькулятор
Здравствуйте! Очень нуждаюсь в помощи! С Delphi 6 знаком ооочень поверхностно,но курсовая горит((((( Нужно сделать Строковый калькулятор...

Строковый калькулятор
Здравствуйте! Очень прошу помочь с задачей на С. Только только начал изучать язык и не могу справится с ней. Условие задачи следующее: ...

Строковый калькулятор
У меня есть задание создать строковый калькулятор для вычисления только основных действий, с учётом конечно же приоритетов операций. Сам...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru