Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Максимальная неубывающая последовательность в масс


Автор: virt117 22.5.2013, 20:33
Нужно написать клиент серверное приложение которое возвращает максимальную неубывающую последовательность массива.
Почемуто количество элементов максимальной последовательности находит и выводит верное, а вместо самой последовательности выводит не максимальную, а последнюю найденную. Никак не могу понять в чем ошибка, помогите пожалуйста.
Код

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.StringTokenizer;
 
public class ServerTokenizerNumber {
    public static void main(String[] args) {
        try {
            ServerSocket sock1 = new ServerSocket(8189);
            while (true) {
                Socket incoming = sock1.accept();
                Runnable r = new ThreadedEchoHandler(incoming);
                Thread t = new Thread(r);
                t.start();
            }
        } catch (IOException ex) {
        }  }  }
 
class ThreadedEchoHandler implements Runnable {
    private Socket incoming;
    public ThreadedEchoHandler(Socket i) {
        this.incoming = i;
    }
 
    @Override
    public void run() {
        try {
            ObjectInputStream input = new ObjectInputStream(incoming.getInputStream());
            OutputStream outputStream = incoming.getOutputStream(); 
            PrintWriter out = new PrintWriter(outputStream, true); 
            out.println("Есть соединение!");
            String readObject = (String) input.readObject(); 
            numberParse(readObject, out); 
 
        } catch (ClassNotFoundException ex) {
            System.out.println(ex);
        } catch (IOException ex) {
            System.out.println(ex);
        }  }
 
    private void numberParse(String str, PrintWriter out) {
      try {
            ArrayList<Integer> list = new ArrayList<Integer>(); 
             ArrayList<Integer> pos = new ArrayList<Integer>();
             ArrayList<Integer> pos2 = new ArrayList<Integer>(); 
            StringTokenizer stringTokenizer = new StringTokenizer(str, " \n\r,");
            while (stringTokenizer.hasMoreTokens()) { 
                String nextToken = stringTokenizer.nextToken(); 
                int parseInt = Integer.parseInt(nextToken);   
                    list.add(parseInt); 
            }
 
 int i, MaxLen,Len;
   MaxLen= 0;
   Len= 1;
     for (int s=1 ; s<list.size(); s++){
      if (list.get(s)> list.get(s - 1)){
        pos.add(list.get(s));
        Len= Len + 1;
    }
    else
    {
        if (Len > MaxLen) {
          pos2=pos;
          MaxLen= Len;
          pos.clear ();
        Len= 1;
     }  } }
            out.println(MaxLen);
              for (Integer t : pos2) {
                 out.println(t);
          }
        } catch (Exception ex) {
      out.println("Введены неверные данные");
        } } }


Вот тут проблемный момент
Код

int i, MaxLen,Len;
   MaxLen= 0;
   Len= 1;
     for (int s=1 ; s<list.size(); s++){
      if (list.get(s)> list.get(s - 1)){
        pos.add(list.get(s));
        Len= Len + 1;
    }
    else
    {
        if (Len > MaxLen) {
          pos2=pos;
          MaxLen= Len;
          pos.clear ();
        Len= 1;
     }  } }
            out.println(MaxLen);
              for (Integer t : pos2) {
                 out.println(t);
          }

Автор: Pawl 22.5.2013, 22:25
когда делаешь так
Код

pos2=pos;
 a затем так
Код

pos.clear ();

pos2 тоже чистится.
попробуй так:
Код

pos2 = (ArrayList<Integer>) pos.clone();

Автор: virt117 22.5.2013, 23:43
Огромное спасибо, вы меня спасли.

Автор: virt117 23.5.2013, 00:20
Извиняюсь еще одна проблемка всплыла, почтему то всегда выводит массив начиная со второго числа, т.е. если у нас 1 2 3 4 выдает 2 3 4.

Автор: Mirkes 23.5.2013, 15:01
Цитата(virt117 @  22.5.2013,  20:33 Найти цитируемый пост)
      if (list.get(s)> list.get(s - 1)){
        pos.add(list.get(s));
        Len= Len + 1;
    }

потому, что записывается со второго. Первый элемент никто не записывал

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)