Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre
L'abbonamento Ultimate di GeForce NOW ora comprende la nuova architettura Blackwell RTX con GPU RTX 5080 che garantisce prestazioni tre volte superiori alla precedente generazione. Non si tratta solo di velocità, ma di un'esperienza di gioco migliorata con nuove tecnologie di streaming e un catalogo giochi raddoppiato grazie alla funzione Install-to-Play
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco
Deebot X11 Omnicyclone implementa tutte le ultime tecnologie Ecovacs per l'aspirazione dei pavimenti di casa e il loro lavaggio, con una novità: nella base di ricarica non c'è più il sacchetto di raccolta dello sporco, sostituito da un aspirapolvere ciclonico che accumula tutto in un contenitore rigido
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio
Grazie ad un mocio rotante che viene costantemente bagnato e pulito, Narwal Flow assicura un completo e capillare lavaggio dei pavimenti di casa. La logica di intellignza artificiale integrata guida nella pulizia tra i diversi locali, sfruttando un motore di aspirazione molto potente e un sistema basculante per la spazzola molto efficace sui tappeti di casa
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 17-01-2010, 18:41   #1
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
[Java] Aiuto problema classi

Non riesco a capire un esercizio di java, speravo potevate aiutarmi. Il testo prevede le seguenti classi:
Codice:
public class A {
static int a;
int b;
public A() {
this(++a);
}
public A(int x) {
b = x+2;
}
public String toString() {
return "a = " + a
+ " b = " + b;
}
}
Codice:
class B extends A {
int b;
public B() {
b = a;
}
public String toString() {
return super.toString() + "\n"
+ "a = " + a + " b = " + b;
}
}
Codice:
public class Prova {
public static void main(String[] args) {
B b = new B();
System.out.println(b.toString());
}
}
Ora l'esercizio consiste nello scrivere l'output della classe prova. L'output è:
Codice:
a = 1 b = 3
a = 1 b = 1
Solo che non riesco a capire perchè!Ho capito che il primo toString() eseguito è quello della superclasse A solo che non capisco da dove prende i valori di a e b visto che non sono inizializzati a niente e vengono inizializzati solo nel caso vengano costruiti oggetti di tipo A. Potete aiutarmi?
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 20:13   #2
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Codice:
public class A 
{
    static int a;
    int b;

    public A() {
        this(++a);
    }

    public A(int x) {
        b = x+2;
    }

    public String toString() {
        return "a = " + a
        + " b = " + b;
    }
}
Codice:
class B extends A 
{
    int b;

    public B() {
        b = a;
    }

    public String toString() {
        return super.toString() + "\n"
        + "a = " + a + " b = " + b;
    }
}
Codice:
public class Prova 
{
    public static void main(String[] args) {
        B b = new B();
        System.out.println(b.toString());
    }
}
Per capire l'output prodotto dovresti seguire passo passo tutte le chiamate nel codice.
Codice:
B b = new B();
- istanzia un nuovo oggetto B.
- B estende A, quindi viene chiamato implicitamente il costruttore senza parametri di A.
Codice:
public A() {
     this(++a);
}
- 'a' è un campo di classe statico, essendo di tipo 'int' il suo valore di default è inzializzato a 0 dalla virtual machine;
- nel costruttore di default di A il suo valore viene incrementato a 1 dall'operatore ++;
- quindi 'a' viene passato come parametro al costruttore di A che prende un parametro 'int' con la chiamata this(++a);
Codice:
public A(int x) {
    b = x+2;
}
- al campo 'b' della classe A viene assegnato il valore del parametro 'x' (che era 'a', valorizzata a 1) incrementato di 2;
- Ora abbiamo che 'a' vale 1 e il campo 'b' della classe A vale 3;
- Si torna al contesto del costruttore della classe B;
Codice:
public B() {
    b = a;
}
- al campo 'b' della classe B (b oltre che in A è dichiarato anche in B, non viene ereditato, mentre il campo 'a' è visibile a B che lo eredita da A) viene assegnato il valore del campo 'a' (vale 1);
- Ora abbiamo che 'a' vale 1, il campo 'b' della classe A vale 3 e il campo 'b' della classe B vale 1;
- Si torna al contesto del metodo main;
Codice:
System.out.println(b.toString());
- viene invocato toString() della classe B;
Codice:
return super.toString() + "\n"
        + "a = " + a + " b = " + b;
- nel toString() di B per prima cosa viene invocato il toString() della classe che viene estesa da B, cioè A.
- nel toString() di A:
Codice:
return "a = " + a
        + " b = " + b;
- viene stampata la stringa "a = " a cui viene concatenato il valore di 'a', che come sappiamo, in questo momento vale 1;
- quindi alla precedente stringa viene concatenata la stringa " b = " a cui viene concatenato il valore del campo 'b' di A che come sappiamo vale 3;
- si torna al contesto del toString() di B;
Codice:
return super.toString() + "\n"
        + "a = " + a + " b = " + b;
- qui, per farla breve, viene ristampato 'a' che vale sempre 1, e il campo 'b' della classe B, che come abbiamo visto vale 1.

In pratica in questo esercizio era neccessario stare attenti alle regole di visibilità dei campi e all'ordine di inizializzazione delle varie parti di un'istanza di una classe che ne estende un'altra.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 19-01-2010 alle 11:33.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 20:29   #3
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Ti ringrazio mille per la descrizione molto dettagliata, vorrei chiederti ancora una o due delucidazioni.
Siccome il costruttore di B è privo di argomenti viene chiamato il costruttore della superclasse giusto?
Ora non ho capito una cosa, perchè il costruttore senza argomenti di A poi passa i parametri all'altro costruttore?
E this(++a) cosa comporta?
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 20:40   #4
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
Siccome il costruttore di B è privo di argomenti viene chiamato il costruttore della superclasse giusto?

Non per questo. In ogni classe, che estende un'altra classe, nel costruttore come prima istruzione dev'essere chiamato il costruttore della superclasse. Se non metti il costruttore viene messo di default quello no-args, se non metti la chiamata al costruttore della superclasse viene chiamato di default quello no-args della superclasse. Va da sè che se non esiste un costruttore no-args nella superclasse riceverai un errore.

Ora non ho capito una cosa, perchè il costruttore senza argomenti di A poi passa i parametri all'altro costruttore?

E' così. Ogni classe che ne estende un'altra deve farsi aiutare, nella creazione di un oggetto, da quest'ultima. Se ci pensi è anche logico.

E this(++a) cosa comporta?

In questo tipo di utilizzo this chiama un costruttore della classe corrente con quella segnatura. In questo caso c'è un preincremento. Il valore di a viene incrementato e DOPO passato come parametro al costruttore.
Risposte in grassetto.

Ultima modifica di ndakota : 17-01-2010 alle 20:46.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 20:44   #5
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Risposte in grassetto.
Grazie. Quindi this(++a) è come scrivere A(1) giusto?
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 20:45   #6
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
Grazie. Quindi this(++a) è come scrivere A(1) giusto?
Se a vale 0, sì.
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 21:00   #7
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Se a vale 0, sì.
Perfetto grazie! Ne approfitto per chiedere conferma di un altro esercizio che magari non ho capito XDD

Il testo è :
Si considerino le tre classi concrete Alfa, Beta, Gamma.
La classe Alfa implementa i metodi di segnatura m(long x) e m(int x).
La classe Beta estende Alfa e implementa i metodi di segnatura m(long x) e m(double x).
La classe Gamma estende Beta e implementa i metodi di segnatura m(double x) e m(int x).
Per ciascuna delle seguenti coppie di istruzioni si determini se la coppia viene compilata correttamente e, in
caso positivo, si determini la segnatura selezionata dal compilatore e la classe in cui il metodo effettivamente
eseguito al runtime `e stato implementato.
Nota: Si rammenti che 2 denota un letterale int, 2L denota un letterale long e 2.0 denota un letterale
double.

Ora, alla voce

Codice:
Alfa p = new Beta();
p.m(2.0);
non compila
dice appunto che non compila. Perchè?
Io ho pensato che anche se Beta possiede il metodo m(doublex) la variabile p è di tipo Alfa e di conseguenza siccome Alfa non possiede metodi per i double non può essere compilato. E' corretto?
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 21:08   #8
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Penso sia come dici tu. Il compilatore risolve l'overloading aspettandosi una delle due segnature di Alfa e ciò non avviene. Anche perchè il parametro non può essere promosso implicitamente. L'esercizio mi è familiare e sei di Milano. Hai il professor Pighizzini?
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 21:10   #9
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Penso sia come dici tu. Il compilatore risolve l'overloading aspettandosi una delle due segnature di Alfa e ciò non avviene. Anche perchè il parametro non può essere promosso implicitamente. L'esercizio mi è familiare e sei di Milano. Hai il professor Pighizzini?
LOL no, io ho cesa bianchi XDD
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 21:15   #10
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
LOL no, io ho cesa bianchi XDD
Sei dell'altra edizione allora
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 21:16   #11
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Quote:
Originariamente inviato da ndakota Guarda i messaggi
Sei dell'altra edizione allora
Si, domani ho l'esame e quindi mi stavo preparando un po' sugli esercizi di esempio, solo che alcune cose devo ancora capirle bene XD
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 17-01-2010, 21:18   #12
ndakota
Senior Member
 
L'Avatar di ndakota
 
Iscritto dal: Oct 2006
Città: milano
Messaggi: 1439
Io ho passato i due compitini con quasi il massimo. Quindi attendo la prova di laboratorio il 25. Buona fortuna
ndakota è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2010, 10:49   #13
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Avrei bisogno di un ultimo consiglio per capire una cosa.
Si considerino le seguenti classi:
Codice:
class A {
int a=0;
public A() {
a = 1 + getCampo();
}
public int getCampo() {
return a;
}
}
Codice:
class B extends A {
int b=1;
public B() {
b = 1 + getCampo();
}
public int getCampo() {
return a+b;
}
}
Si riporti l’output prodotto dalla chiamata
Codice:
B obj1 = new B();
System.out.println("a = " + obj1.a + " b = " + obj1.b);
Ora, la soluzione è a = 1 e b =3, l'ho calcolata facendo prima eseguire il costruttore della superclasse A e poi il costruttore di B. Questo basandomi sul fatto che come prima cosa una classe estesa deve avere un costruttore della superclasse (super) o della classe stessa (this) [Tutto questo se non vado errato, in caso correggetemi per favore]. L'unica cosa che non ho capito è cosa significa obj1.a e obj1.b. Di solito il . non viene utilizzato per invocare i metodi? Non esistono metodi a o b, quindi non capisco a cosa si riferisca!

EDIT: sono stupido, definiscono le variabili a e b delle due classi XDDDD

Ultima modifica di Snakethesniper : 18-01-2010 alle 11:20.
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 18-01-2010, 11:24   #14
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
Ora, la soluzione è a = 1 e b =3
E' corretta.

Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
L'unica cosa che non ho capito è cosa significa obj1.a e obj1.b. Di solito il . non viene utilizzato per invocare i metodi? Non esistono metodi a o b, quindi non capisco a cosa si riferisca!
Il dot operator applicato a un'istanza (come obj1 che nel tuo caso è un'istanza della classe B) serve per accedere ai campi e ai metodi dell'istanza stessa

Ci sono poi 4 livelli di accesso possibili assegnabili ai campi e metodi di una classe/istanza che si controllano mediante l'uso di quattro modificatori di accesso (per tre di questi esistono delle specifiche parole chiave da usare: private, protected, public; il quarto è quello di default, per il quale non occorre alcuna specificazione).
Qui trovi una breve spiegazione
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 18-01-2010 alle 11:44.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2010, 12:20   #15
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Sto provando a fare un altro esercizio, ma mi è sorto un problema e non capisco perchè. Sostanzialmente ho creato una classe Matrice
Codice:
public class Matrice{
	private int r,c;
	private int[][] m;
Che ha come costruttore
Codice:
public Matrice(int x, int y){
		
		r = x;
		c = y;
		m = new int[r][c];
		}
Il metodo trasponi
Codice:
public Matrice trasponi(){
		Matrice m2 = new Matrice(this.c,this.r);
		for(int a=0;a<this.r;a++){
			for(int b=0;b<this.c;b++){
				m2.m[b][a]=this.m[a][b];
				}
			}
		return m2;
		}
E quello getMatrice
Codice:
public int[][] getMatrice(){
		return this.m;
		}
Ora, il problema è nel trasponi.Ovvero se in un programma faccio creare e stampare una matrice in formato
Codice:
123
123
La trasposta mi viene
Codice:
12
12
12
invece di venire
Codice:
11
22
33
La classe che ho creato per la soluzione è
Codice:
import java.lang.*;
public class Soluzione{
	public static void main(String[] args){
		Matrice m = new Matrice(2,3);
		int[][] m2 = m.getMatrice();
		int s=0,i,j;
		for(i=0;i<2;i++){
			for(j=0;j<3;j++){
				m2[i][j]=1+j+s;
				System.out.print(m2[i][j]);
				}
			System.out.println("");
			
		}
		Matrice m1 = m.trasponi();
		int[][] m3 = m1.getMatrice();
		for(i=0;i<3;i++){
			for(j=0;j<2;j++){
				m3[i][j]=1+j+s;
				System.out.print(m3[i][j]);
				}
			System.out.println("");
			
		}
		
	}
}
Qualcuno sa spiegarmi perchè non viene corretta?
p.s:la variabile s servirebbe in teoria a memorizzare il valore dell'ultima colonna della riga in modo da sommarlo a quella sotto ed ottenere continuità, solo che java mi segnala un errore e non capisco perchè.
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2010, 13:30   #16
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
Qualcuno sa spiegarmi perchè non viene corretta?
Ovviamente e' errato il metodo trasponi.
Guarda il metodo getTrasposta che ho scritto qui sotto e prova a capire che errore hai commesso:
Codice:
public class Matrice
{
    private final int ROWS, COLUMNS;
    private boolean initialized;
    private final int[][]DATA;

    public Matrice(int r, int c)
    {
        if (r<1 || c<1) {
            throw new IllegalArgumentException("Il valore di righe e colunne deve essere maggiore di zero.");
        }
        ROWS = r;
        COLUMNS = c;
        DATA = new int[ROWS][COLUMNS];
    }

    // torna una copia dei dati nella matrice
    public int[][] getData() {
        int[][] copyData = new int[ROWS][COLUMNS];
        for(int r=0; r<ROWS; r++) {
            for(int c=0; c<COLUMNS; c++) {
                copyData[r][c] = DATA[r][c];
            }
        }
        return copyData;
    }
    // inizializza la matrice
    public void initData(int newdata[][])
    {
        if (initialized) {
            throw new RuntimeException("Impossibile modificare la matrice");
        }

        initialized = true;
        for(int r=0; r<ROWS; r++) {
            for(int c=0; c<COLUMNS; c++) {
                DATA[r][c] = newdata[r][c];
            }
        }
    }

    public int getValueAt(int row, int column)
    {
        if (!isRowValid(row) || !isColumnValid(column)) {
            throw new IllegalArgumentException("Valore di riga o di colonna fuori dal range valido");
        }
        return DATA[row][column];
    }
    private boolean isRowValid(int row)
    {
        return  row>=0 && row<ROWS;
    }
    private boolean isColumnValid(int column)
    {
        return  column>=0 && column<COLUMNS;
    }

    // torna la matrice trasposta di questa matrice
    public Matrice getTrasposta()
    {
        Matrice tras = new Matrice(COLUMNS, ROWS);
        for(int c=0; c<COLUMNS; c++) {
            for(int r=0; r<ROWS; r++) {
                tras.DATA[c][r] = DATA[r][c];
            }
        }
        return tras;
    }

    @Override
    public String toString()
    {
        StringBuilder sb = new StringBuilder();

        for(int r=0; r<ROWS; r++) {
            for(int c=0; c<COLUMNS; c++) {
                sb.append(DATA[r][c]).append("\t");
            }
            sb.append("\n");
        }

        return sb.toString();
    }


    // ESEMPIO:
    public static void main(String... argv)
    {
        // crea la matrice
        int[][]data = { {1,2,3},
                        {1,2,3} };
        Matrice m = new Matrice(2,3);
        m.initData(data);
        System.out.println("m"+"\n"+m.toString());

        // ottieni la sua trasposta
        Matrice m2 = m.getTrasposta();
        System.out.println("m2"+"\n"+m2.toString());

        // dovrebbe stampare sullo standard outpt:
        // m
        // 1        2        3        
        // 1        2        3        
        // 
        // m2
        // 1        1        
        // 2        2        
        // 3        3        
    }
}

Quote:
Originariamente inviato da Snakethesniper Guarda i messaggi
p.s:la variabile s servirebbe in teoria a memorizzare il valore dell'ultima colonna della riga in modo da sommarlo a quella sotto ed ottenere continuità, solo che java mi segnala un errore e non capisco perchè.
Ho importato il tuo codice in NetBeans (e' un IDE per Java) perchè a prima vista non capivo quale potesse essere l'errore, relativamente a 's', e infatti non ce n'è nessuno ne a compile time ne a run time.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)

Ultima modifica di banryu79 : 20-01-2010 alle 13:37.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2010, 13:48   #17
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Ho invertito i contatori nei due cicli??
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2010, 14:00   #18
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Sì, direi che hai fatto confusione con gli indici di riga e colonna nei due cicli annidati.
__________________

As long as you are basically literate in programming, you should be able to express any logical relationship you understand.
If you don’t understand a logical relationship, you can use the attempt to program it as a means to learn about it.
(Chris Crawford)
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2010, 16:31   #19
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Rompo di nuovo le balle perchè ho incontrato un'altra difficoltà XD
Devo scrivere un programma che legge da standard input delle righe con dei valori e assegnare questi valori ad un array. Ovvero, ho la classe astratta:
Codice:
public abstract class Persona{
	String nome,cognome;
	int matricola;
	//costruttore
	public Persona(){
		nome="";;
		cognome="";;
		matricola=0;
		}
	
	//metodi
	public void ordina(Persona[] p){
		int i;
		for(i=0;i<p.length;i++){
			if(p[i].matricola<p[i+1].matricola){
				Persona d=p[i];
				p[i]=p[i+1];
				p[i+1]=d;
				}
			}
		}
	public String toString(){
		return nome + " " + cognome + " " + matricola;
		}
	}
E ci sono due classi, Dirigente e Impiegato che la estendono
Codice:
public class Dirigente extends Persona{
	
	public Dirigente(){
		super();
		double perc=0.0;
		}
	}
Codice:
public class Impiegato extends Persona{
	
	public Impiegato(){
		super();
		int tasso=0;
		}
	}
Ora, devo scrivere un programma che leggendo una sequenza del tipo
Codice:
D,Mario,Rossi,1234,0.23
Leggendo D, selezioni la classe Dirigente e al suo interno inserisca nome, cognome, matricola e percentuale nelle rispettive variabili.
Non ho idea di come farlo!
Per lo standard input nel programma di prova ho messo
Codice:
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));	
	String input;
	while((input=in.readLine()) != null){
solo che non so come continuarlo per fargli effettuare il controllo su ogni campo
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
Old 20-01-2010, 23:27   #20
Snakethesniper
Member
 
L'Avatar di Snakethesniper
 
Iscritto dal: Jun 2008
Città: Milano
Messaggi: 90
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Sì, direi che hai fatto confusione con gli indici di riga e colonna nei due cicli annidati.
Ho modificato il codice del trasponi come mi hai indicato te, ora è
Codice:
public Matrice trasponi(){
		Matrice m2 = new Matrice(this.c,this.r);
		for(int a=0;a<this.c;a++){
			for(int b=0;b<this.r;b++){
				m2.m[a][b]=this.m[b][a];
				}
			}
		return m2;
		}
Solo che il risultato mi viene identico a prima o_O
Inoltre se aggiungo
Codice:
Matrice m1 = m.trasponi();
		int[][] m3 = m1.getMatrice();
		for(i=0;i<3;i++){
			for(j=0;j<2;j++){
				m3[i][j]=1+j+s;
				System.out.print(m3[i][j]);
				}
			s=m3[i][j];
			System.out.println("");
			
		}
Mi segnala l'errore ArrayIndexOutOfBoundException:2

Ultima modifica di Snakethesniper : 20-01-2010 alle 23:31.
Snakethesniper è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Prova GeForce NOW upgrade Blackwell: il cloud gaming cambia per sempre Prova GeForce NOW upgrade Blackwell: il cloud ga...
Ecovacs Deebot X11 Omnicyclone: niente più sacchetto per lo sporco Ecovacs Deebot X11 Omnicyclone: niente più...
Narwal Flow: con il mocio orizzontale lava i pavimenti al meglio Narwal Flow: con il mocio orizzontale lava i pav...
Panasonic 55Z95BEG cala gli assi: pannello Tandem e audio senza compromessi Panasonic 55Z95BEG cala gli assi: pannello Tande...
HONOR Magic V5: il pieghevole ultra sottile e completo! La recensione HONOR Magic V5: il pieghevole ultra sottile e co...
Bioshock: il film di Netflix si far&agra...
Samsung 'trolla' Apple su X con la campa...
Apple Watch Series 11, Ultra 3 e SE 3 gi...
Landspace: il fallimento del lancio di u...
Windows 11 25H2: Microsoft rilascia le I...
Milano, dal 15 settembre via alle multe ...
IFA 2025: BLUETTI continua a innovare co...
Un 55 pollici 4K con Fire TV a un prezzo...
TSMC avvia la produzione interna di pell...
Come cambia la gamma iPhone con l'arrivo...
Anker lancia nuovi caricabatterie e powe...
IFA 2025: FRITZ! tra rebranding, Wi-Fi 7...
Sono prezzi super: MacBook Pro con chip ...
Huawei non si ferma: è leader del...
AirPods Pro 3 già disponibili su Amazon:...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 09:18.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Served by www3v