Visualizzazione dei risultati da 1 a 3 su 3

Discussione: Lista

  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    95

    Lista

    Programma sulla classica lista in java.
    Questi di seguito sono i file da cui partire ma prima di partire con tutti i metodi volevo creare e stampare la lista.
    Un problema alla volta, iniziamo con la creazione.

    TestList.java
    codice:
    package tests;
    import java.util.*;
    import java.io.*;
    import java.util.Scanner;
    import recursion.IntList;
    import static java.lang.System.*;
    import static recursion.IntList.*;
    
    public class TestList {
    	public static void main(String[] args) {
    		int [] a = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    		IntList myList = new IntList();
    		mylist = fromArray(a);
      }
    }
    Su tre righe di codice che ho scritto si salva solo la prima (creazione e inizializzazione dell'array) funziona.

    IntList.java
    codice:
    package recursion;
    
    public class IntList {
      private int element;
      private IntList next;
    
      public IntList(int el, IntList lis) {
        element = el;
        next = lis;
      }
    
      public IntList(int el) {
        this(el, null);
      }
    
      public static int first(IntList lis) {
        if(lis == null) throw new IllegalArgumentException();
        return lis.element;
      }
    
      public static IntList next(IntList lis) {
        if(lis == null) throw new IllegalArgumentException();
        return lis.next;
      }
    
    /*  costruisce e restituisce la lista corrispondente all'array,
        cioè costituita da tutti e soli gli elementi dell'array,
        nello stesso ordine; è comoda una versione iterativa
    */
      public static IntList fromArray(int[] a) {
        IntList lis = null;
        for(int i = a.length-1; i >= 0; i--)
          // ...
         return lis;
      }
    }
    Mentre qua, l'unica istruzione che ho scritto nel metodo fromArray da problemi ma ne sono consapevole perché a mio modo mancano dei costruttori e cmq non so come mettere in pratica.
    So che devo leggere l'elemento dell'array e inserirlo all'inizio finché non finisce. Dei 4 metodi che ci sono non me ne faccio nulla, devo creare qlcs io giusto?

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Lista

    Originariamente inviato da Rudie
    codice:
    IntList myList = new IntList();
    Stando al codice riportato da te più sotto, la classe IntList ha 2 costruttori che però hanno dei parametri. Qui tu stai cercando di usare il costruttore no-arg (senza parametri) che ... non c'è in IntList.

    Originariamente inviato da Rudie
    codice:
    mylist = fromArray(a);
    Questa invocazione, che non è qualificata espressamente da un reference o classe, sarebbe riferita ad un metodo fromArray che dovrebbe essere presente in TestList. Chiaramente non è così, quel metodo è di IntList ed è statico.
    Quindi il modo corretto sarebbe:

    mylist = IntList.fromArray(a);

    E questo tra l'altro porterebbe al fatto che la istanziazione precedente sarebbe del tutto inutile.

    Originariamente inviato da Rudie
    codice:
    package recursion;
    
    public class IntList {
      private int element;
      private IntList next;
    
      public IntList(int el, IntList lis) {
        element = el;
        next = lis;
      }
    
      public IntList(int el) {
        this(el, null);
      }
    
      public static int first(IntList lis) {
        if(lis == null) throw new IllegalArgumentException();
        return lis.element;
      }
    
      public static IntList next(IntList lis) {
        if(lis == null) throw new IllegalArgumentException();
        return lis.next;
      }
    
    /*  costruisce e restituisce la lista corrispondente all'array,
        cioè costituita da tutti e soli gli elementi dell'array,
        nello stesso ordine; è comoda una versione iterativa
    */
      public static IntList fromArray(int[] a) {
        IntList lis = null;
        for(int i = a.length-1; i >= 0; i--)
          // ...
         return lis;
      }
    }
    Premessa: in questa classe IntList di "sensato" c'è davvero ben poco.

    Innanzitutto si dedurrebbe che vuoi realizzare una lista "linkata", vedendo quel next. Il problema concettuale è che IntList dovrebbe rappresentare "la lista", non "un nodo". Cioè dovresti trattare le due cose in modo separato. Una classe per la lista e un'altra per i nodi, con la lista che contiene il riferimento al primo nodo (eventualmente null, chiaramente).

    first e next hanno ben poco senso come "static". Così non stai lavorando "ad oggetti".

    fromArray comunque è incompleto e in ogni caso dovrebbe istanziare un oggetto IntList da restituire.

    Consiglio: rivedi bene il tutto.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Dec 2006
    Messaggi
    95
    Anche a me lo scheletro sembra essere fatto molto male! Perché in un corso precedente ho fatto sempre una lista ma fatta meglio e soprattutto chiara concettualmente e di seguito posto lo scheletro.

    codice:
    public class MiaLista {
    	private ListElem first;
    	//Metodi della classe MiaLista
    	public void printList () { ...}
    	public void insertFirst (int val) {...}
    	public boolean deleteFirst () {...}
    	public boolean inLista (int val) {...}
    	public boolean modifElem (int oldVal, int newVal) {...}
    	public boolean insertAfter (int precElem, int newVal) {...}
    	public boolean deleteElem (int val) {...}
    	public void eliminaDuplicati() {...}
    	public void insertLast(int val) {...}
            public boolean deleteLast() {...}
    //	ListElem
    	private class ListElem {
    		public int dato;
    		public ListElem next;
    	        public int getDato() {...}
    	        public void setDato(int dato) {...}
    	        public ListElem getNext() {...}
    	        public void setNext(ListElem next) {...}
    		//Metodi della classe ListElem
    		private boolean inListaIntern (int val) {...}
    		private boolean modifElemIntern (int oldVal, int newVal) {...}
    		private boolean insertAfterIntern (int precElem, int newVal) {...}
    		private boolean deleteElemIntern (int val) {...}
    		private void eliminaDuplicatiIntern() {...}
    		public void eliminaSingElem (int valore) {...}
    	}
    }

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.