Visualizzazione dei risultati da 1 a 3 su 3
  1. #1

    Progetto Java non stampa niente

    Salve ragazzi, ho un problema con un codice..sono quasi 2 mesi che ci lavoro sopra per un motivo o per un'altro e adesso che credevo di essere riuscito (in linea teorica) ad arrivare al risultato, quando eseguo il codice, non fà nulla, rimane in run..(Uso NetBeans IDE 7.0.1) senza stampare niente...
    Vi posto il codice:
    codice:
    import java.util.*; 
    import javax.swing.*;  
    public final class Matrice {
          private int[][] A; // matrice A
          private int[] r; // vettore r a valori casuali
          int[] xa; // vettore che mi conterrà le ascisse delle direzioni
          int[] yb; // vettore che mi conterrà le ordinate delle direzioni
          Random random = new Random();
          ArrayList<HashMap<Integer, ArrayList<Coppia>>> listaMappe = new ArrayList<HashMap<Integer, ArrayList<Coppia>>>();     
          ArrayList<ArrayList> listaVettoriC = new ArrayList<ArrayList>();     
          HashMap<Integer, ArrayList<Coppia>> mappa;      /* costruttore che prende in input il numero di direzioni e le dimensioni della griglia */     
          public Matrice(int m, int n, int k) {
              int righe = 0;
              for (int i = 0; i < k; i++) {
                  try {
                      /* Inserisco le coordinate (a,b) per determinare le direzioni */
                     int a, b;
                     do {
                         a = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci l'ascissa della " + (i + 1) + " direzione:"));
                         if (a < 0) {
                             System.err.println("Errore: Inserire un valore intero positivo dell'ascissa.");
                         }
                     } while (a < 0);
                     b = Integer.parseInt(JOptionPane.showInputDialog(null, "Inserisci l'ordinata della " + (i + 1) + " direzione (può essere anche negativa):"));
                      /*Verifico la proprietà che devono rispettare a,b*/
                      if (a != 0 && b != 0) { // esempio (3,4)
                         if (coprimi(a, b) == false) {
                             System.err.println("Errore: le coordinate inserite non sono coprime, inserire delle coordinate con Massimo Comun Divisore uguale a 1.");
                             break;
                         }
                     }
                     /*Creo il vettore degli c per questa direzione e lo salvo in un ArrayList*/
                      listaVettoriC.add(cList(m, n, a, b));
    
                     /*Sommo le dimensioni dei vettori creati per aver il numero di righe che formeranno la matrice A*/
                      righe += (listaVettoriC.get(i)).size();
    
                     /*Creo la HashMap della direzione (a,b) di dimensione del vettore c e la salvo nell' ArrayList listaMappe*/
                      mappa = new HashMap<Integer, ArrayList<Coppia>>((listaVettoriC.get(i)).size());
                     listaMappe.add(mappaCoordinate(m, n, a, b));
                      System.out.println("l'ascissa della " + (i + 1) + " direzione è " + a + " l'ordinata " + b);
                 } catch (Exception e) {
                 }
             }
             A = new int[righe][m * n];
             /*Range delle righe per ogni direzione*/
             int startRow = 0;
              int dimDir = (listaVettoriC.get(0)).size();
               for (int i = 0; i < k; i++) { // per ogni direzione riempio la matrice A
                  if (i != 0) {
                     startRow += (listaVettoriC.get(i - 1)).size();
                     dimDir = dimDir + (listaVettoriC.get(i)).size();
                 }
                  for (int row = startRow; row < dimDir; row++) { //scandisco le righe
                     int col = 0; // scandisco le colonne
                     if ((listaMappe.get(i)).containsKey((listaVettoriC.get(i)).get(row))) { // cerco c nella HashMap
                         ArrayList<Coppia> coordinate = ((listaMappe.get(i)).get((listaVettoriC.get(i)).get(row))); // estraggo la lista di coppie
                         for (int s = 0; s < coordinate.size(); s++) { // memorizzo ordinate e ascisse in due vettori
                             xa[s] = (coordinate.get(s)).get_x();
                             yb[s] = (coordinate.get(s)).get_y();
                         }
                         for (int y = m - 1; y >= 0; y--) {
                             for (int x = 0; x < n; x++) {
                                 for (int index = 0; index < xa.length; index++) {
                                     if (x == xa[index] && y == yb[index]) {
                                         A[row][col] = 1;
                                     } else {
                                         A[row][col] = 0;
                                     }
                                 }
                                 col++;
                             }
                         }
                     }
                 }
             }
         }
    /*Creo un vettore contenente tutti i valori di c corrispondenti alle rette della direzzione scelta; ha ordine decrescente
        in modo da far corrispondere la prima retta con vettore[0] a partire da max, cioè da (0,m-1)*/
    
        public ArrayList cList(int m, int n, int a, int b) {
            ArrayList vettore = new ArrayList();
            for (int y = m - 1; y >= 0; y--) {
                for (int x = 0; x < n;) {
                    int c = -b * x + a * y;
                    if (vettore.contains(c) == false) {
                        vettore.add(c);
                    }
                }
            }
            Collections.sort(vettore);
            Collections.reverse(vettore);
            return vettore;
        }
        /*Crea la Mappa Hash che associa ad ogni key c una coppia di valori (x,y), ovvero gli indici che mi serviranno per
        mettere ugali a 1 gli elementi corrispondenti in A*/
    
        public HashMap<Integer, ArrayList<Coppia>> mappaCoordinate(int m, int n, int a, int b) {
    
            for (int y = m - 1; y >= 0; y--) {
                for (int x = 0; x < n;) {
                    int c = -b * x + a * y;
                    if (mappa.containsKey(c)) {
                        // C'è già una mappatura... ottengo l'ArrayList e aggiungo la nuova coppia
                        ArrayList<Coppia> lista = mappa.get(c);
                        lista.add(new Coppia(x, y));
                    } else {
                        // Non c'è nessuna mappatura: la aggiungo
                        ArrayList<Coppia> lista = new ArrayList<Coppia>();
                        lista.add(new Coppia(x, y));
                        mappa.put(c, lista);
                    }
                }
            }
            return mappa;
        }
    }
    Questo è invece il main:
    codice:
    import javax.swing.*; 
    import java.io.*;
    public class ProvaMain {
          public static void main(String[] args) throws IOException {
              int m = Integer.parseInt(JOptionPane.showInputDialog(null, "inserisci il numero di righe della griglia: "));
             int n = Integer.parseInt(JOptionPane.showInputDialog(null, "inserisci il numero di colonne della griglia: "));
             int k = Integer.parseInt(JOptionPane.showInputDialog(null, "inserisci il numero di direzioni: "));
              Matrice A = new Matrice(m, n, k);
             A.stampa(m, n);
         }
     }
    Se lo eseguo con m = n = 4, k = 1, a = 2, b = 1 dovrebbe crearmi e stamparmi la matrice A come:
    1000000000000000
    0100000000000000
    0010100000000000
    0001010000000000
    0000001010000000
    0000000101000000
    0000000000101000
    0000000000010100
    0000000000000010
    0000000000000001
    oppure se la eseguo con m = n = 4, k = 1, a = 0, b = 1 dovrebbe crearla come:
    1000100010001000
    0100010001000100
    0010001000100010
    0001000100010001
    Ed invece sembra che vada in loop per rimane in esecuzione senza creare niente..
    Potete aiutarmi a trovare la causa?
    Grazie in anticipo.

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    A me il tuo codice non compila nemmeno. Tentando di compilare la classe Matrice ottengo 20 errori.

    codice:
    Matrice.java:84: ';' expected
                for (int x = 0; x < n {
                                     ^
    Matrice.java:84: illegal start of expression
                for (int x = 0; x < n {
                                      ^
    Matrice.java:84: ')' expected
                for (int x = 0; x < n {
                                       ^
    Matrice.java:91: <identifier> expected
            Collections.sort(vettore);
                            ^
    Matrice.java:91: <identifier> expected
            Collections.sort(vettore);
                                    ^
    Matrice.java:92: <identifier> expected
            Collections.reverse(vettore);
                               ^
    Matrice.java:92: <identifier> expected
            Collections.reverse(vettore);
                                       ^
    Matrice.java:93: illegal start of type
            return vettore;
            ^
    Matrice.java:93: ';' expected
            return vettore;
                  ^
    Matrice.java: 98: class, interface, or enum expected
        public HashMap<Integer, ArrayList<Coppia>> mappaCoordinate(int m, int n, int a, int b) {
               ^
    Matrice.java: 100: class, interface, or enum expected
            for (int y = m - 1; y >= 0; y--) {
                                ^
    Matrice.java: 100: class, interface, or enum expected
            for (int y = m - 1; y >= 0; y--) {
                                        ^
    Matrice.java: 101: class, interface, or enum expected
                for (int x = 0; x < n {
                                ^
    Matrice.java: 103: class, interface, or enum expected
                    if (mappa.containsKey(c)) {
                    ^
    Matrice.java: 106: class, interface, or enum expected
                        lista.add(new Coppia(x, y));
                        ^
    Matrice.java: 107: class, interface, or enum expected
                    } else {
                    ^
    Matrice.java: 110: class, interface, or enum expected
                        lista.add(new Coppia(x, y));
                        ^
    Matrice.java: 111: class, interface, or enum expected
                        mappa.put(c, lista);
                        ^
    Matrice.java: 112: class, interface, or enum expected
                    }
                    ^
    Matrice.java: 116: class, interface, or enum expected
        }
        ^
    20 errors
    Io proverei a correggerli, uno alla volta.

    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie per la risposta..
    Ahahahah Boia un disastro!!! correggo e ti faccio sapere..

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.