Форум программистов, компьютерный форум, киберфорум
Разработка и тестирование
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.93/40: Рейтинг темы: голосов - 40, средняя оценка - 4.93
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9

Junit тест простейшего калькулятора

31.01.2017, 19:38. Показов 8165. Ответов 15

Студворк — интернет-сервис помощи студентам
Доброго дня! Сделал первый шажок - написал калькулятор в Eclipse. Все вычисления назначил по нажатию на "=". Никак не соображу: как прикрутить Junit тесты на каждую арифметическую операцию и корень? Как "закинуть" данные в калькулятор для проверки? В "JButton btnSq" - значок квадратного корня. Сам код ниже:

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
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
import java.awt.EventQueue;
 
import javax.swing.JFrame;
import javax.swing.JTextField;
import javax.swing.SwingConstants;
import java.awt.Font;
import javax.swing.JButton;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
 
public class MyCalc {
 
    private JFrame frame;
    private JTextField textField;
    
    double firnum;
    double secnum;
    double result;
    String oper;
 
    /**
     * Launch the application.
     */
    public static void main(String[] args) {
        EventQueue.invokeLater(new Runnable() {
            public void run() {
                try {
                    MyCalc window = new MyCalc();
                    window.frame.setVisible(true);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        });
    }
 
    /**
     * Create the application.
     */
    public MyCalc() {
        initialize();
    }
 
    /**
     * Initialize the contents of the frame.
     */
    private void initialize() {
        frame = new JFrame();
        frame.setBounds(100, 100, 308, 455);
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        frame.getContentPane().setLayout(null);
        
        textField = new JTextField();
        textField.setFont(new Font("Tahoma", Font.BOLD, 24));
        textField.setHorizontalAlignment(SwingConstants.RIGHT);
        textField.setBounds(10, 11, 270, 45);
        frame.getContentPane().add(textField);
        textField.setColumns(10);
        
        JButton btn7 = new JButton("7");
        btn7.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent arg0) {
                
                String EnterNumber = textField.getText() + btn7.getText();
                textField.setText(EnterNumber );
            }
        });
        btn7.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn7.setBounds(10, 137, 60, 60);
        frame.getContentPane().add(btn7);
        
        JButton btn8 = new JButton("8");
        btn8.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn8.getText();
                textField.setText(EnterNumber );
            }
        });
        btn8.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn8.setBounds(80, 137, 60, 60);
        frame.getContentPane().add(btn8);
        
        JButton btn9 = new JButton("9");
        btn9.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn9.getText();
                textField.setText(EnterNumber );
            }
        });
        btn9.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn9.setBounds(150, 137, 60, 60);
        frame.getContentPane().add(btn9);
        
        JButton btnMns = new JButton("-");
        btnMns.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                firnum = Double.parseDouble(textField.getText());
                textField.setText("");
                oper = "-";
            }
        });
        btnMns.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnMns.setBounds(220, 137, 60, 60);
        frame.getContentPane().add(btnMns);
        
        JButton btn4 = new JButton("4");
        btn4.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn4.getText();
                textField.setText(EnterNumber );
            }
        });
        btn4.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn4.setBounds(10, 207, 60, 60);
        frame.getContentPane().add(btn4);
        
        JButton btn5 = new JButton("5");
        btn5.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn5.getText();
                textField.setText(EnterNumber );
            }
        });
        btn5.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn5.setBounds(80, 207, 60, 60);
        frame.getContentPane().add(btn5);
        
        JButton btn6 = new JButton("6");
        btn6.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn6.getText();
                textField.setText(EnterNumber );
            }
        });
        btn6.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn6.setBounds(150, 207, 60, 60);
        frame.getContentPane().add(btn6);
        
        JButton btnMlt = new JButton("*");
        btnMlt.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                firnum = Double.parseDouble(textField.getText());
                textField.setText("");
                oper = "*";
            }
        });
        btnMlt.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnMlt.setBounds(220, 207, 60, 60);
        frame.getContentPane().add(btnMlt);
 
        JButton btn1 = new JButton("1");
        btn1.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn1.getText();
                textField.setText(EnterNumber );
            }
        });
        btn1.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn1.setBounds(10, 277, 60, 60);
        frame.getContentPane().add(btn1);
        
        JButton btn2 = new JButton("2");
        btn2.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn2.getText();
                textField.setText(EnterNumber );
            }
        });
        btn2.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn2.setBounds(80, 277, 60, 60);
        frame.getContentPane().add(btn2);
        
        JButton btn3 = new JButton("3");
        btn3.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn3.getText();
                textField.setText(EnterNumber );
            }
        });
        btn3.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn3.setBounds(150, 277, 60, 60);
        frame.getContentPane().add(btn3);
        
        JButton btnDiv = new JButton("/");
        btnDiv.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                firnum = Double.parseDouble(textField.getText());
                textField.setText("");
                oper = "/";
            }
        });
        btnDiv.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnDiv.setBounds(220, 277, 60, 60);
        frame.getContentPane().add(btnDiv);
        
        JButton btnPnt = new JButton(".");
        btnPnt.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btnPnt.getText();
                textField.setText(EnterNumber );
            }
        });
        btnPnt.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnPnt.setBounds(10, 347, 60, 60);
        frame.getContentPane().add(btnPnt);
        
        JButton btnClr = new JButton("C");
        btnClr.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                textField.setText(null);
            }
        });
        btnClr.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnClr.setBounds(10, 67, 130, 60);
        frame.getContentPane().add(btnClr);
        
        JButton btnSq = new JButton("√");
        btnSq.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                double sqw = Double.parseDouble(String.valueOf(textField.getText()));
                sqw = Math.sqrt(sqw);
                textField.setText(String.valueOf(sqw));
            }
        });
        btnSq.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnSq.setBounds(150, 67, 60, 60);
        frame.getContentPane().add(btnSq);
        
        JButton btn0 = new JButton("0");
        btn0.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                String EnterNumber = textField.getText() + btn0.getText();
                textField.setText(EnterNumber );
            }
        });
        btn0.setFont(new Font("Tahoma", Font.BOLD, 22));
        btn0.setBounds(80, 347, 60, 60);
        frame.getContentPane().add(btn0);       
        
        JButton btnPls = new JButton("+");
        btnPls.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                
                firnum = Double.parseDouble(textField.getText());
                textField.setText("");
                oper = "+";
            }
        });
        btnPls.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnPls.setBounds(220, 67, 60, 60);
        frame.getContentPane().add(btnPls);
        
        JButton btnEq = new JButton("=");
        btnEq.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
 
                secnum = Double.parseDouble(textField.getText());
                
                    if (oper =="+") {
                    
                        double result = Double.parseDouble(String.valueOf(textField.getText()));
                        result = firnum +  secnum;
                        textField.setText(String.valueOf(result));
                    }
                
                    else if (oper =="-") {
                        
                        double result = Double.parseDouble(String.valueOf(textField.getText()));
                        result = firnum -  secnum;
                        textField.setText(String.valueOf(result));
                        
                    }
                    
                        else if (oper =="*") {
                        
                        double result = Double.parseDouble(String.valueOf(textField.getText()));
                        result = firnum *  secnum;
                        textField.setText(String.valueOf(result));
                        
                    }
                    
                        else if (oper =="/") {
                        if (secnum != 0) {  
                        double result = Double.parseDouble(String.valueOf(textField.getText()));
                        result = firnum /  secnum;
                        textField.setText(String.valueOf(result)); }
                        else {
                            textField.setText("Деление на ноль!");     
                        }
                    }
        
                
            }
        }); 
        btnEq.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnEq.setBounds(150, 347, 130, 60);
        frame.getContentPane().add(btnEq);
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
31.01.2017, 19:38
Ответы с готовыми решениями:

Создание простейшего калькулятора
Добрый день. С Джава GUI работаю впервые. Создал простейшее окно с двумя элементами ввода, одним вывода и 4 кнопки операции(сложение,...

Функции для простейшего калькулятора
Уважаемые гуру форума ) поскажите в чем я туплю. #include <iostream> using namespace std; int Kalkulator(int number1, char...

Написать скрипт простейшего калькулятора
требуется помощь в сложной ситуации , нужно написать скрипт простейшего калькулятора на пхп .... сложность в том что я в этом пхп не...

15
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
01.02.2017, 22:11  [ТС]
Попробовал выделить арифметику в отдельный метод, но никак не пойму: как его вызвать в Junit-тесте, а, самое главное: как передать в него значения из теста???

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
public double mathoper() {
        
        if (oper =="+") {
            
            double result = Double.parseDouble(String.valueOf(textField.getText()));
            result = firnum +  secnum;
            textField.setText(String.valueOf(result));
        }
    
        else if (oper =="-") {
            
            double result = Double.parseDouble(String.valueOf(textField.getText()));
            result = firnum -  secnum;
            textField.setText(String.valueOf(result));
            
        }
        
            else if (oper =="*") {
            
            double result = Double.parseDouble(String.valueOf(textField.getText()));
            result = firnum *  secnum;
            textField.setText(String.valueOf(result));
            
        }
        
            else if (oper =="/") {
            if (secnum != 0) {  
            double result = Double.parseDouble(String.valueOf(textField.getText()));
            result = firnum /  secnum;
            textField.setText(String.valueOf(result)); }
            else {
                textField.setText("Деление на ноль!");     
            }
        }
        return result;
    }
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2017, 09:49
Интерфейс должен быть отделен от вычислений. Внутри тестируемого метода не должно быть обращения к элементам интерфейса, в данном случае к textField. На входе может быть три аргумента: операция и два операнда.
1
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
02.02.2017, 09:56  [ТС]
Спасибо, что помогаете!!! Я головой-то понимаю, а вот с реализацией... практически без знаний... Сделал вот так (только с делением на 0 пока баг):

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
JButton btnEq = new JButton("=");
        btnEq.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
 
                secnum = Double.parseDouble(textField.getText());
                result = 0;
                mathoper ();
                textField.setText(String.valueOf(result));
                
                            
            }
        }); 
        btnEq.setFont(new Font("Tahoma", Font.BOLD, 22));
        btnEq.setBounds(150, 347, 130, 60);
        frame.getContentPane().add(btnEq);
        
            
        }
    
    public double mathoper() {
        
        if (oper =="+") {
            
            
            result = firnum +  secnum;
            
        }
    
        else if (oper =="-") {
            
            
            result = firnum -  secnum;
            
            
        }
        
            else if (oper =="*") {
            
            
            result = firnum *  secnum;
            
            
        }
        
            else if (oper =="/") {
            if (secnum != 0) {  
            
            result = firnum /  secnum;
            }
            
            else {
            
            result = Double.parseDouble("Деление на ноль!");   
        }
        }
        return result;
Добавлено через 2 минуты
Если это верно, то как потом проверить метод в JUnit? И с "Делением но ноль" бы разобраться...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2017, 10:00
Я предполагал такую сигнатуру:
Java
1
public double mathoper(String op, String left, String right);
Тогда вызов:
Java
1
2
3
mathoper("+", "1", "2");
mathoper("", "", "");
mathoper("$", "kitten", "beer");
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
02.02.2017, 10:04  [ТС]
Но в моём случае два операнда - double и один- String...
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2017, 10:05
Цитата Сообщение от Molodoy73 Посмотреть сообщение
Но в моём случае два операнда - double и один- String...
Где выполняется преобразование Double в String? В коде UI? Как тогда тестировать этот код?
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
02.02.2017, 10:12  [ТС]
Я так понял, в Junit вызываю метод mathoper, как-то отправляю на вход double firnum = 10, String oper = "+" и double secnum = 20, а потом через assertEquals(30, result) проверяю... Что-то не так?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2017, 11:02
Для начала можно и так. Напишите, чтобы работало. Потом уже в получившемся решении можно будет искать недостатки, так будет более очевидно, чем на словах.
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
02.02.2017, 11:58  [ТС]
А как правильно реализовать

Java
1
2
3
4
5
6
7
8
9
else if (oper =="/") {
            if (secnum != 0) {  
            
            result = firnum /  secnum;
            }
            
            else {
            
            result = Double.parseDouble("Деление на ноль!");
чтобы

public void actionPerformed(ActionEvent e) {

Java
1
2
mathoper ();
                textField.setText(String.valueOf(result));
выводил эту надпись на дисплей?

Кстати, само деление в калькуляторе работает, а когда делитель 0 - не работает... (выводит на дисплей "0.0) Что-то не так реализую?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2017, 12:13
Цитата Сообщение от Molodoy73 Посмотреть сообщение
Java
1
result = Double.parseDouble("Деление на ноль!");
Вот вы какого результата ожидаете от кода, который пытается распарсить строку, в которой заведомо не записано вещественное число?

Можно перехватывать исключение, генерируемое в случае деления на ноль или при проверке того, что делитель равен нулю, кидать свое исключение. В интерфейсе перехватывать и принимать решение, как сообщить пользователю об ошибке.
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
02.02.2017, 12:25  [ТС]
Спасибо за ваше терпение! Понимаете, меня не учили программированию, я пытаюсь лишь поступить на курсы..., поэтому и не знаю многих нюансов.

Я предположил, что строка выше присвоит значение в result, а далее оно выведется на дисплей... Не та грамматика?
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
02.02.2017, 12:42
Цитата Сообщение от Molodoy73 Посмотреть сообщение
Я предположил, что строка выше присвоит значение в result, а далее оно выведется на дисплей...
Чтобы не было предположений, есть документация.
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
02.02.2017, 15:39  [ТС]
Нужен ValueOf? Написали бы, как правильно, быстрее б понял.... ))))

Добавлено через 1 час 9 минут
Так понимаю, вообще нельзя конвертировать String в Double...

Добавлено через 11 минут
Хотя, наверно, можно попробовать через (char)...

Добавлено через 1 час 1 минуту
А так передать данные в метод - это слишком коряво?

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import org.junit.Assert;
import org.junit.Test;
 
public class TestMyCalcNew {
    
    MyCalcNew exp = new MyCalcNew();
    
 
    @Test
    public void testAdd() {
        exp.firnum = 10;
        exp.secnum = 20;
        exp.oper = "+";
        exp.mathoper();
        if (exp.result != 30) Assert.fail();
            
        }
        
}
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
03.02.2017, 13:37
Много несвязных вопросов.

Цитата Сообщение от Molodoy73 Посмотреть сообщение
Так понимаю, вообще нельзя конвертировать String в Double...
Можно.
Java
1
2
String s = "3.1415";
double value = parseDouble(s);
Еще раз: какой результат ожидается от попытки конвертировать строку «Деление на ноль!» в число с плавающей точкой.

Цитата Сообщение от Molodoy73 Посмотреть сообщение
А так передать данные в метод - это слишком коряво?
Да. По смыслу метод должен принимать аргументы. Значит, они должны быть частью сигнатуры.
0
0 / 0 / 0
Регистрация: 31.01.2017
Сообщений: 9
04.02.2017, 20:59  [ТС]
Я пробовал писать сигнатуры, типа mathoper (double firnum, String oper, double secnum), но eclipse почему-то так не принимает... Наверно, порядок не тот? Сначала "знак", а потом аргументы? Недавно лишь узнал о сигнатурах... А double result тоже надо добавлять в метод?

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

Создание простейшего калькулятора с базовым функционалом
По заданию преподавателя в универе начали писать программку калькулятора с парой действий. В ходе попытки сдать ей сию работу возникли...

Разработка простейшего калькулятора (поймать деление на 0)
подскажите как сделать, чтобы на ноль разделить было нельзя с выходом сообщения об ошибке в label 4. вот код программы: var Form1:...

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

Реализация простейшего арифметического калькулятора в указанной системе счисления
Составить алгоритм решения(и текст программы), реализующий простейший арифметический калькулятор (+,-,*,:) в указанной системе счисления. ...

Написать функцию (строковый парсер), воспроизводящую работу простейшего калькулятора
В качестве параметра задается строка где a - целое число от 1 до 9, Z - знак * или / Функция анализирует синтаксис строки и в случае...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Киев стоит - украинская песня
zorxor 28.01.2026
wfWdiRqdTxc О Господи, Вечный, Ты . . . Я помоги, Бесконечный. . . Я прошу Ты. . . Я погибаю, спаси. . . Я прошу Тебя Вечный. . .
Загрузка 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 и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru