Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8

    creare una matrice di point e importare le dimensioni da un file di testo

    Ciao a tutti
    Vorrei creare una funzione statica che crei, riempia e restituisca una matrice di point a partire dai dati di un file di testo
    in cui la prima riga dà le dimensioni della matrice
    e le altre righe le tre coordinate di ogni punto
    io ho pensato la classe Point in questo modo:

    class Point{
    public Point(int i,int j,int k) {// costruttore per inizializzarel’oggetto
    xCoord= i;
    yCoord= j;
    zCoord= k;
    }

    public void main (String[] args){
    System.out.println( "X = " + xCoord);
    System.out.println("Y = "+ yCoord);
    System.out.println("Z= "+ zCoord);
    }
    private int xCoord; // dati della classe:coordinata x
    private int yCoord;//e coordinata y
    private int zCoord;//e la coordinata z
    }

    PER LEGGERE
    i dati dal file di testo vorrei usare questa classe
    oppure un altra se mi consigliate voi

    public class CopyRead {
    public static int main(String [] args) throws IOException{
    String inputFileName = "test.txt";
    String line = null;

    FileReader filein = new FileReader("test.txt");
    // apre il file
    BufferedReader in = new BufferedReader(new FileReader(inputFileName));

    int next;
    char nextc;
    do{
    line = in.readLine();

    int numero = Integer.parseInt(line);

    line = in.readLine();
    next = filein.read(); // legge il prossimo carattere
    if (next != -1) // se non e' finito il file
    nextc = (char) next;
    System.out.print(nextc); // stampa il carattere

    } while (next != -1);
    filein.close();
    //chiude il file
    in.close();
    System.out.println();

    }
    }

    per la matrice vorrei creare una classe tipo questa:
    public class Matrice{

    public static void main(String[] args){
    CopyRead a=new CopyRead();
    System.out.println( "Inserisci righe: ");//che deve prendere dal file testo
    int n,m;
    System.out.println( "Inserisci colonne: ");/che deve prendere dal file testo
    n=......
    m=.......
    int[][] Mat;
    Mat=new int[n][m];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)

    }
    il problema è che non riesco a creare la funzione statica e a passare i dati dal file testo
    Per favore qualcuno mi puo aiutare
    Grazie Mensky

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

    Re: creare una matrice di point e importare le dimensioni da un file di testo

    Originariamente inviato da mensky
    Vorrei creare una funzione statica
    In Java si chiamano "metodi", non funzioni.

    Originariamente inviato da mensky
    che crei, riempia e restituisca una matrice di point a partire dai dati di un file di testo
    in cui la prima riga dà le dimensioni della matrice
    e le altre righe le tre coordinate di ogni punto
    Ok ma il formato esatto del file?? Stando al codice sotto, il point è tridimensionale, quindi una tripletta di valori numerici in che formato sono? Separati da spazi? da virgole? Poi sotto hai usato degli int ... e non double??

    Una cosa del tipo, ad esempio:

    codice:
    2 2
    1,4,5
    2,3,6
    4,4,6
    2,1,7
    Che rappresenta, nel file di testo, una matrice di 2x2 punti tridimensionali. Vuoi così? O no?

    Originariamente inviato da mensky
    io ho pensato la classe Point in questo modo:

    class Point{
    public Point(int i,int j,int k) {// costruttore per inizializzarel’oggetto
    xCoord= i;
    yCoord= j;
    zCoord= k;
    }

    public void main (String[] args){
    System.out.println( "X = " + xCoord);
    System.out.println("Y = "+ yCoord);
    System.out.println("Z= "+ zCoord);
    }
    private int xCoord; // dati della classe:coordinata x
    private int yCoord;//e coordinata y
    private int zCoord;//e la coordinata z
    }
    E che ci fa un metodo main(String[] args) in una classe che dovrebbe essere solamente un semplice "bean"???

    Originariamente inviato da mensky
    PER LEGGERE
    i dati dal file di testo vorrei usare questa classe
    oppure un altra se mi consigliate voi

    public class CopyRead {
    public static int main(String [] args) throws IOException{
    String inputFileName = "test.txt";
    String line = null;

    FileReader filein = new FileReader("test.txt");
    // apre il file
    BufferedReader in = new BufferedReader(new FileReader(inputFileName));

    int next;
    char nextc;
    do{
    line = in.readLine();

    int numero = Integer.parseInt(line);

    line = in.readLine();
    next = filein.read(); // legge il prossimo carattere
    if (next != -1) // se non e' finito il file
    nextc = (char) next;
    System.out.print(nextc); // stampa il carattere

    } while (next != -1);
    filein.close();
    //chiude il file
    in.close();
    System.out.println();

    }
    }

    per la matrice vorrei creare una classe tipo questa:
    public class Matrice{

    public static void main(String[] args){
    CopyRead a=new CopyRead();
    System.out.println( "Inserisci righe: ");//che deve prendere dal file testo
    int n,m;
    System.out.println( "Inserisci colonne: ");/che deve prendere dal file testo
    n=......
    m=.......
    int[][] Mat;
    Mat=new int[n][m];
    for(int i=0;i<n;i++)
    for(int j=0;j<n;j++)

    }
    Pessima idea ... poco chiaro ... troppi main(String[] args) (che non capisco a cosa ti servano) ... poco "ad oggetti".

    Hai diverse entità in gioco. Innanzitutto una entità "punto", quindi inizia a creare una semplice classe che "modella" il punto: costruttore con i 3 parametri per inizializzare l'oggetto poi i soliti metodi getter/setter per le 3 proprietà.

    Hai una entità "matrice", quindi crea una classe es. Matrice con un costruttore che riceve la dimensione della matrice (altezza/larghezza) e poi i metodi get/set per leggere/impostare un punto nella matrice.

    Devi poi anche leggere tale matrice, quindi puoi fare una classe es. LettoreMatrice con un costruttore che riceve un File (o String con il nome del file, a tua scelta) e con un metodo es. leggi() che ritorna direttamente un oggetto Matrice (il metodo aprirà il file, leggerà ecc....).

    Poi una classe con il main() per gestire il tutto.

    Insomma ... pensa "ad oggetti", non in termini di metodi statici, metodi main(String[] args) messi un po' a caso o cose del genere ....
    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 2005
    Messaggi
    8
    Grazie per aver risposto
    i dati provengono da un file Test.txt
    la prima riga è per la dimensione
    le altre righe sono per le coordinate dei punti
    intervallate da spazi
    tipo
    3 3
    2 3 4
    5 6 7
    1 2 4
    7 7 8

    Mi aiuti a a pensare in termini di oggetti?
    ora costruisco la classe che mi hai consigliato
    Grazie Mensky

  4. #4
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Ciao ho rifatto la classe Point mi puoi dare un occhiata e consigliare qualche tutorial
    su questi argomenti
    class Point{
    public Point(int i,int j,int k) {// costruttore per inizializzarel’oggetto
    xCoord= i;
    yCoord= j;
    zCoord= k;
    }

    public void printIt()
    {
    System.out.println( "X = " + xCoord);
    System.out.println("Y = "+ yCoord);
    System.out.println("Z= "+ zCoord);
    }

    }
    private int xCoord; // dati della classe:coordinata x
    private int yCoord;//e coordinata y
    private int zCoord;
    }

    public int getX() {
    return xCoord;
    }

    public int getY() {
    return yCoord;
    }

    public int getZ() {
    return zCoord;
    }

    public void setX(int x) {
    this.x = xCoord;
    }

    public void setY(int y) {
    this.y = yCoord;
    }

    public void setZ(int z) {
    this.z = zCoord;
    }

    Grazie Mensky

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Ciao
    come faccio a far ritornare direttamente una matrice da un metodo??
    Grazie
    Mensky

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da mensky
    Ciao ho rifatto la classe Point

    class Point{
    public Point(int i,int j,int k) {// costruttore per inizializzarel’oggetto
    xCoord= i;
    yCoord= j;
    zCoord= k;
    }

    public void printIt()
    {
    System.out.println( "X = " + xCoord);
    System.out.println("Y = "+ yCoord);
    System.out.println("Z= "+ zCoord);
    }

    }
    private int xCoord; // dati della classe:coordinata x
    private int yCoord;//e coordinata y
    private int zCoord;
    }

    public int getX() {
    return xCoord;
    }

    public int getY() {
    return yCoord;
    }

    public int getZ() {
    return zCoord;
    }

    public void setX(int x) {
    this.x = xCoord;
    }

    public void setY(int y) {
    this.y = yCoord;
    }

    public void setZ(int z) {
    this.z = zCoord;
    }
    Alcune parentesi graffe non quadrano, inoltre nei "setter" non quadrano i nomi. Abituati fin da ora a mettere i nomi in modo che parametri e variabili di istanza siano uguali, quindi ad esempio per il costruttore.

    codice:
    public Point(int xCoord, int yCoord, int zCoord) {
        this.xCoord = xCoord;
        this.yCoord = yCoord; 
        this.zCoord = zCoord;
    }
    È più semplice ed evita di doverti "inventare" altri nomi per i parametri. Questo vale per costruttori e metodi.

    In genere le variabili di istanza, per convenzione, si mettono prima di tutto il resto (c'è chi le mette al fondo della classe ma a me non piace).

    Infine, metodi come printIt() lasciano sempre alquanto a desiderare. La classe Point non dovrebbe "sapere" nulla dell'I/O. Se vuoi puoi fare l'override di toString() e fornire una descrizione testuale del Point. E lasciare che il chiamante invochi il toString() e ne faccia quello che vuole (es. print su System.out).

    Originariamente inviato da mensky
    come faccio a far ritornare direttamente una matrice da un metodo??
    Io avevo suggerito di definire una classe es. Matrice per "astrarre" i dettagli interni della matrice ma in effetti puoi anche semplicemente gestire un array di tipo Point[][]. Dipende tutto da cosa ci devi poi fare ....

    Esempio (che completerai tu ):

    codice:
    public class LettoreMatrice {
        private File file;
        
        public LettoreMatrice(File file) {
            this.file = file;
        }
        
        public Point[][] leggi() throws IOException {
            // ... apri il file ...
            // ... leggi le dimensioni ...
            
            Point[][] matrice = new Point[rig][col];
            
            // ... leggi il resto e riempi la matrice ...
            // ... chiudi il file, in ogni caso!!! ...
    
            return matrice;
        }
    }
    E occhio ad una corretta gestione delle eccezioni. Ho dichiarato il metodo con throws IOException non a caso!! Se qualcosa va storto, la cosa corretta è far lanciare fuori la eccezione dal metodo ma assicurarsi comunque di chiudere il file in ogni caso. E sarà il chiamante a stabilire cosa fare della eccezione ....
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Grazie per il tuo aiuto
    mi metto al lavoro
    per leggere il file di testo posso usare la classe che ho postato?
    quella CopyRead che ho messo??
    Grazie
    Mensky

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2005
    Messaggi
    8
    Ciao ho rifatto la classe punto
    ho aggiunto la lettura del file alla classe Matrice che mi hai consigliato tu
    ma non riesco ad andare avanti

    class Punto {
    private double x;
    private double y;
    private double z;
    public Punto()
    {
    this(0,0,0);
    }
    public Punto(double x, double y, double z) {
    this.x = x;
    this.y = y;
    this.z = z;
    }
    public void set(double x, double y,double z) {
    this.x = x;
    this.y = y;
    this.z = z;
    }
    public void setX(double x)
    {
    this.x = x;
    }

    public void setY(double y)
    {
    this.y = y;
    }


    public void setZ(double y)
    {
    this.z = z;
    }

    public double getX()
    { return x; }
    public double getY()
    { return y; }
    public double getZ()
    { return z; }
    public String toString() {
    return "(" + x + ", " + y + ","+ z + ")";
    }
    System.out.println( "X = " + x);
    System.out.println("Y = "+ y);
    System.out.println("Z = "+ z);
    }
    }

    public class LettoreMatrice {
    private File file;

    public LettoreMatrice(File file) {
    this.file = file;
    }

    public Point[][] leggi() throws IOException {
    try {
    // apre il file in lettura
    FileReader filein = new FileReader("Test.txt");

    int next;
    do {
    next = filein.read(); // legge il prossimo carattere

    if (next != -1) { // se non e' finito il file
    char nextc = (char) next;

    }

    } while (next != -1);

    filein.close(); // chiude il file

    } catch (IOException e) {
    System.out.println(e);
    }

    Point[][] matrice = new Point[rig][col];

    try {
    // apre il file in lettura
    FileReader filein = new FileReader("Test.txt");

    int next;
    do {
    next = filein.read(); // legge il prossimo carattere

    if (next != -1) { // se non e' finito il file
    char nextc = (char) next;

    }

    } while (next != -1);

    filein.close(); // chiude il file

    } catch (IOException e) {
    System.out.println(e);
    }
    return matrice;
    }
    }
    ti ringrazio per il tuo aiuto

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 © 2026 vBulletin Solutions, Inc. All rights reserved.