Форум программистов, компьютерный форум, киберфорум
Java: Сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211

Работа с Сервером

25.11.2015, 19:20. Показов 2342. Ответов 37
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите знатоки это задание в сервер встроить.
Заданы три массива: х={x1,x2,х3,х4,х5}; у = {y1,y2,y3,y4,y5,y6}; z={z1,z2,z3,z4}. Упорядочить по возрастанию три числа а, b, c, где а – минимальный элемент массива х, b - минимальный элемент массива у, с - минимальный элемент массива z. Поиск минимального элемента массива оформить в сервере.

Ну типа клиент ввел числа в форму и запросил а сервер посчитал и дал ответ в форме можно сказать!

Вот само задание про массивы сделал, но не знаю как сделать что бы можно было писать вручную числа в форму и встроить это в сервер.
Кликните здесь для просмотра всего текста
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
import java.util.Arrays;
 
public class Returnnnn {
    public static Object java;
    public static void main(String[] args) {
        // Создаю массивы
        int[] x = {3, 0, 12, 23, 12}; 
        int[] y = {87, -1, 45, 7, 29, 22};
        int[] z = {34, 4, 77, 102};
        int[] res = new int[3];
        // Получаю минимальный элемент каждого массива
        int a = min(x);
        int b = min(y);
        int c = min(z);
        // Заполняю массив, в котором будут храниться результаты, минимальными значениями
        res[0] = a;
        res[1] = b;
        res[2] = c;
        // Т.к. отсортировать нужно по возрастанию, первый элемент - минимальный из a, b, c
        res[0] = min(res);
        // Нахожу максимальный элемент и записываю его в конец res
        if (a >= c && a >= b) res[2] = a;
        else if (b >= c && b >= a) res[2] = b;
        else res[2] = c;
        // Теперь ищу элемент, который не является ни макс. ни мин (т.е. средний)
        // И записываю в середину
        if (res[0] != a && res[2] != a) res[1] = a;
        else if (res[0] != b && res[2] != b) res[1] = b;
        else res[1] = c;
 
        System.out.print("Результат :"+ Arrays.toString(res));
    }
    // Та "подпрограмма", о которой шла речь в задании
    public static  int min(int[] arr) { 
         // Записываю первый элемент массива в res
         int res = arr[0];
         // Иду в цикле по каждому элементу массива, начиная со второго (т.к. первый у нас уже в res)
         for (int i = 1; i < arr.length; i++)
             // Если нашёл элемент меньше чем res - записываю его как минимальный
            // Ну а если не нашёл таких - значит первый элемент массива и есть минимальный
            if (arr[i] < res)
                res = arr[i];
        return res;
    }
}
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.11.2015, 19:20
Ответы с готовыми решениями:

Работа с сервером.
Всем вечер добрый. Имеется вопросик. Имеется файл на сервере. Нужно не скачивая его, узнать размер данного файла? Как это можно...

Работа с сервером
Уважаемые форумчене! Всем доброго времени суток. :senor: Делаю прогу для игры там присутствует такая функция как инжект, и как мы все...

Работа с сервером
Добрый вечер!Вопрос может быть не по тему,но очень распространенный.Я начинающий веб программист, изучил php,js,node js. Основные языки...

37
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 12:41
Студворк — интернет-сервис помощи студентам
Думаю надо выкинуть шаг с размером массива.
Клиент просто вводит строку (массив).
Сервер получает эту строку (в моём коде есть коммент, где он получает и что надо с ним сделать).
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 14:18  [ТС]
Doctor_, Что значит выкинуть шаг с размером массива?
Я эту задачу сделал только не в режиме там форме и сервера, я не знаю как встроить это в ваш код.
Вот Вы где оставили коммент в классе сервере, я там же этот код кинул, и тогда при запуске он все считал , только в консоле.
Покажите как это делается пожалуйста!
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 14:24
Я вам сказал, читайте про сокеты.

Зачем что-то вводить на сервере, если вам "массив" присылает клиент. Сервер получил этот массив и виде строки, надо его разбить на элементы и конвернтуть в int массив.
давай-те начнём так.
У вас есть:
Java
1
String stringArray = "1, 2, -10, 6, 9, 10,  3, -9";
Сделайте метод, который это превратит в int массив.
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 14:30  [ТС]
Doctor_, я то должен вводить любые числа в форму же, а вы хотите что бы я сделал массив константным?
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 14:32
Он не будт константым. Сейчас, в моём коде, пользователь вводит массив руками в поле. Сервер это получает как string строку.
Она, например, может быть такой: "1, 2, -10, 6, 9, 10, 3, -9". Ну то есть такую ввёл пользователь (клиент).
Серверу это строку надо превратить в int массив чтобы обработать его вашей функцией.
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 14:44  [ТС]
Типа так?
Java
1
2
3
4
int integerValue; 
String strValue; 
 
strValue = String.valueOf(integerValue);
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 14:48
Это готовая функция? Которая вернёт int[]?
Я это вижу так:
Java
1
2
3
4
5
6
private int[] parseToIntArray(String arrayString){
// разбить строку на элементы
// парсить элемент в Int Integer.parseInt(str);
// если нет exception то добавлять в массив
// нет, возращать 0
}
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 15:03  [ТС]
Doctor_, Хорошо, возьму ваш метод. А теперь что нужно сделать?
То есть Сервер мы не трогаем, а пишем в классе Клиент , и дописываем туда мою задачу так?
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 15:11
Не так.
На клиентн должно быть только ввод массивов(3) в вашем случае.

На сервере происходит вся магия. Сбор трёх массивов. Ваша функция. Сервер высылает просто ответ, результат вашей функции.
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 15:22  [ТС]
Doctor_, Вот именно это я не знаю как сделать, работать в самом сервере, вот как понял сама формула так назовем этот код, которая считает весь массив который ввел клиент, находится в сервере , а в классе "Клиент" просто должна быть форма для написания каких-либо чисел (любых), что бы в одной форме же происходила вся процедура , ну типа пишу любые числа(задаю размер массива и его элементы заполняю), ответ в той же форме выходит с ответом!
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 17:21
Боги мой. Я вам уже 100500 раз сказал что там почти всё готово. Вам только надо стринг распарсить в инт массив.
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 17:25  [ТС]
Doctor_,
Java
1
private int[] parseToIntArray(String arrayString){
Я не знаю как сделать, может я вас не понимаю, или совсем тугой!
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 17:51
Ну это печально.
1) Разбить string запятой в string массив: str.split(",");
2) Создать int массив размера массива из пункта 1;
3) В цикле, крутить стринг массив из пункта 1;
4) Парсит значение (с trim) в int (Integer.parseInt(str)); (отдельной функцией)
5) В случае если пасер ловит exception, Значит у нас не Int, и мы записываем значение 0 в int массив;
6) Парсер не ловит ошибку - записываем значение в int массив.
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 18:06  [ТС]
Что не так?
Почему на parseToIntArray ругается!
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
package ргр22;
 
import java.io.*;
import java.net.*;
import java.util.Scanner;
 
 
public class Server {
    private ServerSocket server;
    private Socket client;
 
    public static void main(String[] args) {
        new Server().start();
    }
 
    public void start() {
        try {
            server = new ServerSocket(9999);
            while (true) {
                client = server.accept();
                new ClientHandler(client).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    class ClientHandler extends Thread {
        private ObjectOutputStream sOut;
        private ObjectInputStream sIn;
        private Socket client;
 
        public ClientHandler(Socket client) {
            this.client = client;
        }
 
        public void run() {
            try {
                sIn = new ObjectInputStream(client.getInputStream());
                sOut = new ObjectOutputStream(client.getOutputStream());
                sOut.writeObject("Hello");
                sOut.flush();
                while (true) {
                    Object object = sIn.readObject();
                    if (object instanceof String) {
                        
                        private int[] parseToIntArray(int arrayString){
 
                         String str;
                        int[] a = new int[ (Integer.parseInt(str))];
                    
                         for (int i = 0; i < arrayString; i++)
                    
                         if (i < arrayString - 2)
                         if (a[i] + a[i + 1] + a[i + 2] > 0)
                         System.out.print(" true\na[i] = " + a[i] + "\na[i+1] = " + a[i + 1] + "\na[i+2] = " + a[i + 2]);
                         // получаем массив от клиента в виде стринг
                        // делаем всю магию, парсим с массив int,
                        // вызываем вашу функцию
                        // отправляем ответ клиенту
                        System.out.println(object);
                        }   }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
01.12.2015, 18:29
так зачем вы весь метод запихнули туда? там только вызов должен быть.
0
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
01.12.2015, 20:05  [ТС]
Doctor_, хз, я так представлял!!!
Покажи как делать в коде!
Извиняюсь за самбур в коде!

Добавлено через 1 час 29 минут
Doctor_, Плизз покажите в коде как это делается полностью, то что я сделал вы сказали не правильно, тогда как?
0
 Аватар для Doctor_
238 / 237 / 142
Регистрация: 03.02.2011
Сообщений: 1,437
02.12.2015, 09:02
Лучший ответ Сообщение было отмечено MR_Clock как решение

Решение

Сразу говорю, ничего больше делать не буду. Всё работает, если что-то не устраивает придётся делать самому:
Сервер:
Кликните здесь для просмотра всего текста
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
import java.io.*;
import java.net.*;
 
public class Server {
    private ServerSocket server;
    private Socket client;
 
    public static void main(String[] args) {
        new Server().start();
    }
 
    public void start() {
        try {
            server = new ServerSocket(9999);
            while (true) {
                client = server.accept();
                new ClientHandler(client).start();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    class ClientHandler extends Thread {
        private ObjectOutputStream sOut;
        private ObjectInputStream sIn;
        private Socket client;
        // переменные которые должы держать наши массивы
        int[] x, y, z;
 
        public ClientHandler(Socket client) {
            this.client = client;
        }
 
        private void sendObject(Object object) {
            try {
                sOut.writeObject(object);
                sOut.flush();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
 
        public void run() {
            try {
                sIn = new ObjectInputStream(client.getInputStream());
                sOut = new ObjectOutputStream(client.getOutputStream());
                sOut.writeObject("Hello");
                sOut.flush();
                while (true) {
                    // получаем объект от клиента
                    Object object = sIn.readObject();
                    // если объект инстанса String, то мы считаем что это массив
                    if (object instanceof String) {
                        System.out.println(object);
                        // если на сервере первый массив равен Null, значит
                        // клиент прислал нам первый массив
                        if (x == null) {
                            x = parseArray((String) object);
                            // отправляем клиенту сообщение,
                            // что нам нужен следующий массив
                            sendObject("More");
                        } else if (y == null) {
                            // если на сервере второй массив равен Null, значит
                            // клиент прислал нам второй массив
                            y = parseArray((String) object);
                            // отправляем клиенту сообщение,
                            // что нам нужен следующий массив
                            sendObject("More");
                        } else if (z == null) {
                            // если на сервере третий массив равен Null, значит
                            // клиент прислал нам третий массив
                            z = parseArray((String) object);
                            // мы больше не запрашиваем у клиента присылать
                            // следующий массив, так как у нас есть уже все три
                        }
                        // массив, в который записывается результат
                        int[] resultArray = doMagic(x, y, z);
                        if (resultArray != null) {
                            sOut.writeObject(resultArray);
                            sOut.flush();
                        }
                    }
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
 
    /**
     * По факту, это ваша функция, слегка модифицированая
     * Возвращает Int массив в случае, если ф функцию передали все 3 массива
     * @param x
     * @param y
     * @param z
     * @return
     */
    private int[] doMagic(int[] x, int[] y, int[] z) {
        int[] res = null;
        if (x != null && y != null && z != null) {
            int a = min(x);
            int b = min(y);
            int c = min(z);
            res = new int[3];
            res[0] = a;
            res[1] = b;
            res[2] = c;
            // сортироваку сделал отдельным методом
            sort(res);
        }
        return res;
    }
 
    /**
     * Метод сортировки
     * @param arr
     */
    private void sort(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] < arr[j]) {
                    int tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }
    }
 
    /**
     * Получение минимального элемента в массиве
     * @param arr
     * @return
     */
    public int min(int[] arr) {
        int res = arr[0];
        for (int i = 1; i < arr.length; i++) {
            if (arr[i] < res) {
                res = arr[i];
            }
        }
        return res;
    }
 
    /**
     * Функция которая парсит стринг строку в int массив
     * @param arrayString
     * @return
     */
    private int[] parseArray(String arrayString) {
        String[] stringArray = arrayString.split(",");
        int[] vec = new int[stringArray.length];
        for (int i = 0; i < vec.length; i++) {
            vec[i] = convertToInt(stringArray[i]);
        }
        return vec;
    }
 
    /**
     * Функция которая конвертит стрин в Int
     * @param num
     * @return
     */
    private int convertToInt(String num) {
        try {
            return Integer.parseInt(num.trim());
        } catch (Exception e) {
            // если парсит не получается, возвращаем 0
            return 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
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
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;
import javax.swing.*;
 
public class Client extends JFrame implements ActionListener {
    private static final long serialVersionUID = 1L;
    private JButton sendButton;
    private JTextField messageField;
    private Socket socket;
    private ObjectOutputStream oOut;
    private ObjectInputStream oIn;
 
    public static void main(String[] args) {
        new Client();
    }
 
    Client() {
        setSize(400, 300);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLocationRelativeTo(null);
        JPanel panel = new JPanel();
        panel.add(new JLabel("Message:"));
        messageField = new JTextField(10);
        panel.add(messageField);
        add(panel, BorderLayout.NORTH);
        sendButton = new JButton("Send");
        add(sendButton, BorderLayout.CENTER);
        sendButton.addActionListener(this);
        setVisible(true);
        new RunClient().start();
    }
 
    private class RunClient extends Thread {
        public void run() {
            runClient();
        }
    }
 
    private void runClient() {
        try {
            socket = new Socket("localhost", 9999);
            oOut = new ObjectOutputStream(socket.getOutputStream());
            oIn = new ObjectInputStream(socket.getInputStream());
        } catch (Exception e) {
            e.printStackTrace();
        }
        new ListenServer().run();
    }
 
    @Override
    public void actionPerformed(ActionEvent evnt) {
        Object source = evnt.getSource();
        if (source == sendButton) {
            String textToSend = messageField.getText();
            if (textToSend != null && !"".equals(textToSend)) {
                sendObject(textToSend);
                messageField.setText("");
            }
        }
    }
 
    private void sendObject(String text) {
        try {
            oOut.writeObject(text);
            oOut.flush();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
 
    private class ListenServer extends Thread {
        public void run() {
            try {
                while (true) {
                    Object object = oIn.readObject();
                    if (object instanceof String) {
                        if (object.equals("Hello")) {
                            JOptionPane.showMessageDialog(null,
                                    "Connection with server established.");
                        // в случае если сервер просит ввести следующий массив, показываем диалог
                        } else if (object.equals("More")) {
                            JOptionPane.showMessageDialog(null,
                                    "Please input next array.");
                        }
                    }
                    // получили массив с результатот вычисления от сервера
                    if (object instanceof int[]) {
                        int[] resultArray = (int[]) object;
                        String result = "";
                        for (int i = 0; i < resultArray.length; i++) {
                            result += resultArray[i] + " ";
                        }
                        JOptionPane.showMessageDialog(null, "Result array: "
                                + result);
                    }
                }
            } catch (IOException | ClassNotFoundException e) {
                e.printStackTrace();
            }
        }
    }
}
1
1 / 1 / 0
Регистрация: 01.11.2015
Сообщений: 211
02.12.2015, 20:27  [ТС]
Doctor_, Огромное спасибо за ваш труд и терпение!!!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
02.12.2015, 20:27

работа с сервером
Добрый вечер. Подскажите, пожалуйста.В bat файле можно поставить команды считывания с сервера файла,можно использовать system() в коде.А...

Работа с сервером
Здравствуйте, пишу игру камень,ножницы,бумага пишет list index out of bounds и считает только до двух unit Unit1; interface ...

Работа с сервером
Доброго дня всем! Я уже как 2 дня ломаю голову и гуглю над вопросом &quot;как послать с сервера всем пользователям сообщение&quot; ?? ...

Работа с почтовым сервером
Почтовый сервер не отвечает на команду &quot;HELO&quot; после того как произошел коннект ...

Работа с Com сервером Excel
Добрый день всем! Помогите, кто может. Не могу разобраться... Работаю на C# с Excel документами. excelapp = new...


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

Или воспользуйтесь поиском по форуму:
38
Ответ Создать тему
Новые блоги и статьи
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
Генератор паролей (вариант №2)
Maks 30.10.2026
Обновленная версия ранее созданной обработки. Добавлены следующие реквизиты типа Булево: - Буквы; - Цифры; - Символы. Изменена логика команды "Сгенерировать" и процедуры "ПриОткрытии":. . .
Генератор паролей (вариант №1)
Maks 29.10.2026
Реализация из решения ниже выполнена исключительно по моей инициативе, дабы облегчить себе работу в создании паролей для администрируемых мною сервисов и пользователей. Самым главным критерием для. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru