Lista w Javie

0

Witam, mam taki problem. Napisałem kod, który generuje macierz. Całość ma służyć do testowania algorytmów znajdowania MST. Poszczególne elementy macierzy oznaczają koszt drogi między elementami tablicy/węzła [i][j]. No i wygenerowaną macierz muszę teraz zapisać za pomocą listy jednokierunkowej. Ma ktoś pomysł co trzeba dodać do tego mojego programiku, by reprezentować to za pomocą listy?

Gdyby mój kod był nieczytelny, macierz znajduje się po prostu w tablicy topology



package boty_bez_klas;

import javax.swing.*;
import java.io.*;
import java.util.*;

public class boty_bez_klas_Main {
 

    public static void main(String[] args) {


     int size;  //rozmiar tablicy-ilosc wezlow

      String temp;  //zmienna pomocnicza, tylko do przechowania wartosci przed konwersja string-integer
      int  i, j, zd, zg; //"zd" i "zg" zakres dolny i gorny do ustalenia prawdopodob


        temp = JOptionPane.showInputDialog(null, "Podaj ilosc wezlow");  //wczytaj z klawiatury 
        size = Integer.parseInt(temp);  //konwersja size to ilosc wezlow
        int[][] topology = new int [size][size]; //topology to rozklad kosztow pomiedzy wezlami

       Random r=new Random();  //generetor liczb los.

        j=0;
        for(i=0;  i<size; i++){        //i!=j warunek, by po przekatnej byly same zera

            zd=r.nextInt(27);   // wartosci dobrane na okolo 30% (by ok 30% wylosowal
            zg=r.nextInt(40);  // z uwzglednieniem samych zer po przekatnej
            if ((zd>zg)&&(i!=j)){    //warunek zd i zg granica dolna, gorna do obliczen prawdopodobienstwa
            topology[i][j]=r.nextInt(10);
            }

            else {  topology[i][j]=0; }          //wyswietla tablice topology
            System.out.print(topology[i][j]+" ");

        
            if (i>=size-1)  { i=-1; j++; System.out.print("\n"); }       //wyswietla topology
            if (j>=size)  { break; }

        }
         j=1;
            for(i=0; i<size-1; i++){
                topology[i][j]=1; j++;
            }
        

        
       /////////////////////////////////////////////EDIT topology[][] porzadkowanie tablicy
///////////////////////////// w sumie nie jest to konieczne
       int a,b;  //tylko pomocnicze, 
       int l=0;  //indeks-to samo co i,j
        System.out.print("\n \n");
        for(int k=0; k<size; k++){

                a=topology[k][l];
                b=topology[l][k];

                    if(a>0) {  if((a>b)&&(b!=0)){ topology[k][l]=topology[l][k]; }
                              if((a<b)&&(b!=0)){ topology[l][k]=topology[k][l]; }
                    }
                    if((a==0)&&(b!=0))  { topology[k][l]=topology[l][k]; licz1++; licz0--;}
                System.out.print(topology[k][l]+" ");
                if (k>=size-1)  { k=-1; l++; System.out.print("\n"); }
               if (l>=size)  { break; }

        }   ////////////////////////koniec porzadkowania tablicy topology

        
       
	}


}

No tak to wyglada, generalnie tablice topology[size][size] trzeba zapisać/reprezentować za pomocą listy.
Będę bardzo wdzięczny za pomoc

0

Może przerobisz sobie to:

public static Collection<Obiekt> readList(String fileName) {
BufferedReader reader = null;
try {

                    reader = new BufferedReader(new  
                    InputStreamReader(newFileInputStream(fileName),"UTF8"));
                    ArrayList<Zlecenie> list = new ArrayList<Zlecenie>();
                    String line  = null;
                    String line1 = null;
                    String line2 = null;
                    String line3 = null;
                    String line4 = null;
                    String line5 = null;
                    String line6 = null;
                    String line7 = null;
                    String line8 = null;
                    while((line = reader.readLine()) != null)
                    {
                           line1=reader.readLine();
                           line2=reader.readLine();
                           line3=reader.readLine();
                           line4=reader.readLine();
                           line5=reader.readLine();
                           line6=reader.readLine();
                           line7=reader.readLine();
                           line8=reader.readLine();
                         
                           list.add(new Zlecenie(line,line1,line2,line3,line4,line5,line6,line7,line8));
                    }
                    return list;
            } catch(IOException exc) {
                    exc.printStackTrace();
                    return null;
            } finally {
                    if(reader != null) {
                            try {
                                    reader.close();
                            } catch (IOException e) {
                                    e.printStackTrace();
                            }
                    }
            }
    }

Tu wczytujesz z pliku tekstowego, ale może jakoś Ci to pomoże ;)

0

Przydały by się jakieś komentarze w kodzie ;)

0

ArrayList<Zlecenie> list = new ArrayList<Zlecenie>(); //lista obiektów o nazwie "lista" obiekt -> "Zlecenie"
W przykładzie czyta linie z pliku:
list.add(new Zlecenie(line,line1,line2,line3,line4,line5,line6,line7,line8)); Każda linia to atrybut obiektu Zlecenie

Nie czytałem twojego kodu ale zakładajac ze masz tablice[] nozesz w petli stworzyc wczytywanie do listy gdize:

ArrayList<Obiekt> lista = new ArrayList<Obiekt>();

for(int i=0;i<"wielkosc_tablicy";i++)
{
list.add(tablica[i][1],tablic[i][2])...);
}

Moze teraz lepiej

0
Aiden napisał(a)

Może przerobisz sobie to:

public static Collection<Obiekt> readList(String fileName) {
BufferedReader reader = null;
try {

                    reader = new BufferedReader(new  
                    InputStreamReader(newFileInputStream(fileName),"UTF8"));
                    ArrayList<Zlecenie> list = new ArrayList<Zlecenie>();
                    String line  = null;
                    String line1 = null;
                    String line2 = null;
                    String line3 = null;
                    String line4 = null;
                    String line5 = null;
                    String line6 = null;
                    String line7 = null;
                    String line8 = null;
                    while((line = reader.readLine()) != null)
                    {
                           line1=reader.readLine();
                           line2=reader.readLine();
                           line3=reader.readLine();
                           line4=reader.readLine();
                           line5=reader.readLine();
                           line6=reader.readLine();
                           line7=reader.readLine();
                           line8=reader.readLine();
                         
                           list.add(new Zlecenie(line,line1,line2,line3,line4,line5,line6,line7,line8));
                    }
                    return list;
            } catch(IOException exc) {
                    exc.printStackTrace();
                    return null;
            } finally {
                    if(reader != null) {
                            try {
                                    reader.close();
                            } catch (IOException e) {
                                    e.printStackTrace();
                            }
                    }
            }
    }

Tu wczytujesz z pliku tekstowego, ale może jakoś Ci to pomoże ;)

A co jak plik nie będzie miał dostatecznej ilości lini :>

0

hehe ale przecież nie napisałe aby to skopiował, w odpowiedzi niżej masz wyjaśnienie. Niech zbuduje siebie kod w oparciu o to. Ilość lini dostosowuje się do ilości atrybutów obiektu ale to tyczy sie czytania z pliku. Niech zbuduj sobie listę obiektów które już posiada. To nie byl gotowy kod miało tylko wskazać drogę (sam kod tyczył sie wczytywania z pliku które jemu nie było potrzebne).

0

no dobra, dzięki. Zobaczymy co z tego uda mi się zmontować.

1 użytkowników online, w tym zalogowanych: 0, gości: 1