PDA

View Full Version : [JAVA] chiarimenti su linguaggio!


Lo ScArSe
19-10-2010, 21:26
ciao a tutti, quest anno frequento il IV anno del corso commerciale programmatori, l'anno scorso abbiamo fatto il C mentre quest anno stiamo facendo il JAVA... mi servirebbero alcun chiarimenti su un programma che abbiamo fatto in classe, che so rifare ma meccanicamente :mc:
il programma si compono di due classi: DVD e DVDTest


package dvd;

/**
*
* @author andrea
*/
public class Dvd {
/*****************************VARIABILI****************************/

private String Titolo;
private String Casa;
private String Autore;
private String Genere;
private short Durata;

/*****************************COSTRUTTORE*******************************/

public Dvd (String Titolo, String Casa, String Autore, String Genere, short Durata) {
this.Titolo = Titolo;
this.Casa = Casa;
this.Autore = Autore;
this.Genere = Genere;
this.Durata = Durata;
}

/******************************GETTER***************************/

public String getTitolo(){
return Titolo;
}
public String getCasa(){
return Casa;
}
public String getAutore(){
return Autore;
}
public String getGenere(){
return Genere;
}
public short getDurata(){
return Durata;
}

/********************************SETTER****************************/

public void setTitolo (String Titolo) {
this.Titolo = Titolo;
}
public void setCasa (String Casa) {
this.Casa = Casa;
}
public void setAutore (String Autore) {
this.Autore = Autore;
}
public void setGenere (String Genere) {
this.Genere = Genere;
}
public void setDurata (short Durata) {
this.Durata = Durata;
}

/******************************UTILITY***************************/

public String toString () {
String s = "Titolo: " + Titolo + "\n"
+ "Casa: " + Casa + "\n"
+ "Autore: " + Autore + "\n"
+ "Genere: " + Genere + "\n"
+ "Durata: " + Durata;
return s;
}
}







package dvd;
import javax.swing.JOptionPane;
/**
*
* @author andrea
*/
public class DvdTest {

/**
* @param args the command line arguments
*/
public static void main(String[] args) {
// TODO code application logic here
Dvd d1;
d1 = new Dvd ("2012", "Centropolis Entertainmen", "Roland Emmerich",
"Catastrofico, Azione", (short)158);
JOptionPane.showMessageDialog(null, d1.toString());
}
}

ok... non mi è molto chiaro cosa siano i metodi getter e i metodi setter... ho capito qualcosa del tipo "i metodi getter servono per leggere i dati, i metodi setter servono per modificare i dati" ho scritto qualcosa di sensato? se si, chi può modificare/leggere tali dati? il programmatore/programma o l'utente che usa il programma?
a cosa servono tutti quei + che ci sono nel toString?
scusate per la confusione che ho in testa e grazie anticipatamente a tutti quelli che vorranno aiutare un totale niubbo xD =)

ndakota
19-10-2010, 22:00
Se tu dichiarassi le variabili membro della tua classe public anzichè private, potresti accedervi dall'esterno e non avresti bisogno dei metodi setter e getter. Ma questo è sconsigliato: l'incapsulamento è uno dei pilastri su cui si basa la programmazione ad oggetti.

Il + in java, se usato tra una stringa e un qualsiasi altro tipo assume ruolo di 'operatore di concatenazione'. Non stai facendo altro che comporre una stringa in quel metodo, usando le variabili membro della tua classe.

Lo ScArSe
19-10-2010, 22:22
Se tu dichiarassi le variabili membro della tua classe public anzichè private, potresti accedervi dall'esterno e non avresti bisogno dei metodi setter e getter. Ma questo è sconsigliato: l'incapsulamento è uno dei pilastri su cui si basa la programmazione ad oggetti.

Il + in java, se usato tra una stringa e un qualsiasi altro tipo assume ruolo di 'operatore di concatenazione'. Non stai facendo altro che comporre una stringa in quel metodo, usando le variabili membro della tua classe.

quindi ad esempio se io nella classe DVDTest ho bisogno del valore di "Autore" contenuto nella classe DVD ho bisogno di mettere un metodo getter?

(non ci sarebbe bisogno di tutto questo impostando le variabili friendly o public)

ndakota
19-10-2010, 22:28
quindi ad esempio se io nella classe DVDTest ho bisogno del valore di "Autore" contenuto nella classe DVD ho bisogno di mettere un metodo getter?

(non ci sarebbe bisogno di tutto questo impostando le variabili friendly o public)

Esatto, se pensi che le tue variabili membro ti servano anche all'esterno ci farai un metodo getter. Altrimenti, potrebbe benissimo darsi che ti servano solo per elaborazioni interne alla tua classe e quindi non ci farai metodi getter.

Lo ScArSe
19-10-2010, 22:35
Esatto, se pensi che le tue variabili membro ti servano anche all'esterno ci farai un metodo getter. Altrimenti, potrebbe benissimo darsi che ti servano solo per elaborazioni interne alla tua classe e quindi non ci farai metodi getter.

invece il setter serve nel caso in cui debba modificare il valore delle variabili in altre classi?

ndakota
19-10-2010, 22:54
Esatto ;)

Lo ScArSe
19-10-2010, 23:12
Esatto ;)

perfetto =) grazie mille =)

Lo ScArSe
20-10-2010, 20:35
rieccomi ragazzi... stiamo facendo un programma sul fantacalcio, ci vorrà tutto l anno e 10000 righe di codice ha detto il prof... bene xD... questo è lo scheletro delle prime 2 classi che sto costruendo: Giocatore e Portiere (dove vedete /*****/ manca il codice che ancora non studiamo.
Comunque il problema è che nella classe Portiere all ultima riga "return Voto;" mi da il seguente errore: Voto has private access in FantaCalcio.Giocatore... e tutto il discorso dei metodi setter di ieri... come risolvo?

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package fantacalcio;

/**
*
* @author andrea
*/
public class Giocatore {

/*Dichiarazione delle variabili */

private String Nome;
private String Cognome;
private String Ruolo;
private String Squadra;
private float Quotazione;
private float MediaVoto;
private byte GoalFatti;
private byte Presenze;
private byte Ammonizioni;
private byte Espulsioni;
private byte RigoriSbagliati;
private byte Autogoal;
private byte Assist;
private byte Pagella;
private float Voto;

/*Dichiarazione dei Metodi Getter*/

public String getNome () {
return Nome;
}

public String getCognome () {
return Cognome;
}

public String getRuolo () {
return Ruolo;
}

public String getSquadra () {
return Squadra;
}

public float getQuotazione () {
return Quotazione;
}

public float getMediaVoto () {
return MediaVoto;
}

public byte getGoalFatti () {
return GoalFatti;
}

public byte getPresenze () {
return Presenze;
}

public byte getAmmonizioni () {
return Ammonizioni;
}

public byte getEspulsioni () {
return Espulsioni;
}

public byte getRigoriSbagliati () {
return RigoriSbagliati;
}

public byte getAutogoal () {
return Autogoal;
}

public byte getAssist () {
return Assist;
}

public byte getPagella () {
return Pagella;
}

public float getVoto () {
return Voto;
}

/*Dichiarazione dei Metodi Setter*/

public void setNome (String Nome) {
this.Nome = Nome;
}

public void setCognome (String Cognome) {
this.Cognome = Cognome;
}

public void setRuolo (String Ruolo) {
this.Ruolo = Ruolo;
}

public void setSquadra (String Squadra) {
this.Squadra = Squadra;
}

public void setQuotazione (float Quotazione) {
this.Quotazione = Quotazione;
}

public void setMediaVoto (float MediaVoto) {
this.MediaVoto = MediaVoto;
}

public void setGoalFatti (byte GoalFatti) {
this.GoalFatti = GoalFatti;
}

public void setPresenze (byte Presenze) {
this.Presenze = Presenze;
}

public void setAmmonizioni (byte Ammonizioni) {
this.Ammonizioni = Ammonizioni;
}

public void setEspulsioni (byte Espulsioni) {
this.Espulsioni = Espulsioni;
}

public void setRigoriSbagliati (byte RigoriSbagliati) {
this. RigoriSbagliati = RigoriSbagliati;
}

public void setAutogoal (byte Autogoal) {
this.Autogoal = Autogoal;
}

public void setAssist (byte Assist) {
this.Assist = Assist;
}

public void setPagella (byte Pagella) {
this.Pagella = Pagella;
}

public void setVoto (float Voto) {
this.Voto = Voto;
}

/* Dichiarazione metodo CalcolaVoto*/

public float CalcolaVoto (byte GoalFatti, byte Ammonizioni, byte Espulsioni,
byte RigoriSbagliati, byte AutoGoal, byte Assist,
byte Pagella) {
/****************************************************
*
*/
return Voto;
}

/*Dichiarazione metodo CalcolaMediaVoto*/

public float CalcolaMediaVoto (float Voto) {
/********************************************************
*
*/
return MediaVoto;
}

/*Dichiarazione Costruttore*/

public Giocatore() {
/***********************************************
*
*/
}

}









/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package fantacalcio;

/**
*
* @author andrea
*/
public class Portiere extends Giocatore {

/*Dichiarazione Variabili*/

private byte RigoriParati;
private byte GoalSubiti;

/*Dichiarazione Metodi Getter*/

public byte getRigoriParati () {
return RigoriParati;
}

public byte getGoalSubiti () {
return GoalSubiti;
}

/*Dichiarazione Metodi Setter*/

public void setRigoriParati (byte RigoriParati) {
this.RigoriParati = RigoriParati;
}

public void setGoalSubiti (byte GoalSubiti) {
this.GoalSubiti = GoalSubiti;
}

/*Dichiarazione metodo CalcolaVoto (portieri) */

public float CalcolaVoto (byte GoalFatti, byte Ammonizioni, byte Espulsioni,
byte RigoriSbagliati, byte AutoGoal, byte Assist,
byte Pagella, byte RigoriParati, byte GoalSubiti) {
/****************************************************
*
*/
return Voto;
}
}

grazie anticipatamente a tutti =)

tuccio`
20-10-2010, 21:47
Voto è un campo di Giocatore, ma non di Portiere

estendendo Giocatore, Portiere eredita metodi e campi protected e public

dunque puoi sostituire

return Voto;

con

return getVoto();


o in alternativa rendere gli attributi protected

Lo ScArSe
20-10-2010, 22:20
Voto è un campo di Giocatore, ma non di Portiere

estendendo Giocatore, Portiere eredita metodi e campi protected e public

dunque puoi sostituire

return Voto;

con

return getVoto();


o in alternativa rendere gli attributi protected

grazie mille cosi l'errore è scomparso... ma scusa... a cosa servono i setter se poi bisogna comunque usare un metodo getter?

Lo ScArSe
21-10-2010, 21:17
:mc: upppp

Lo ScArSe
29-10-2010, 21:24
ragazzi scusate un altro carico di domande :S... spiegazione sugli array e problemi nella compilazione con vari errori...

import javax.swing.JOptionPane;
public class Array {
private float voto[];
voto = new float [5];


public void inserisciValore (int I) {
String s = JOptionPane.showInputDialog(null, "inserisci il"+I+" numero ");
float x = float.parsefloat (s);
voto[I] = x;
}

public void inserisciValori(){
for(int I=0;I<voto.length;I++) {
inserisciValore (I);
}
}

public void visualizzaValore (int I) {
JOptionPane.showMessageDialog(null, "il " +I+"° Voto è" +voto[I]);
}

public void visualizzaValori () {
for(int I=0;I<voto.length;I++) {
visualizzaValore(I);
}
}

public int ricercaValori (float x) {
int posizione = -1;
for (int I=0;I<voto.length;I++) {
if (voto[I] == x) {
posizione = I;
I = voto.length;
}
}
return posizione;
}
}

"voto = new float[5];" cannot find symbol - symbol: class voto - location: class array - <identifier expected>

"float x = float.parsefloat (s);" float cannot be dereferenced - class expected - ';' exprected - not a statement - ';' expected -

Gimli[2BV!2B]
29-10-2010, 21:40
Primo errore: dichiarazione dell'array. (http://download.oracle.com/javase/tutorial/java/nutsandbolts/arrays.html) Anche il private è fuori luogo.

Secondo errore: occhio alla differenza tra il tipo float a la classe Float (http://www.docjar.com/docs/api/java/lang/Float.html).

Lo ScArSe
10-11-2010, 16:26
public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {
if (nominativo[I].compareTo(nominativo[J]) = 1) {
scambia(nominativo[I], nominativo[J]);
}
}

}
}
}

ragazzi e qui? unexpected type.. required: variable... found: value (tutto questo nell'if) :eek:

banryu79
10-11-2010, 16:47
public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {
if (nominativo[I].compareTo(nominativo[J]) = 1) {
scambia(nominativo[I], nominativo[J]);
}
}

}
}
}

ragazzi e qui? unexpected type.. required: variable... found: value (tutto questo nell'if) :eek:
1) Nel for hai dichiarato una variabile con nome "I" (i maiuscola) e nell'if tenti di usare una variabile "i" (i minuscola) che non hai mai dichiarato e dunque non esiste...
2) nell'if esegui una assegnazione perchè stai usando l'operatore di assegnamento '=' invece devi usare '=='...

Lo ScArSe
10-11-2010, 19:14
1) Nel for hai dichiarato una variabile con nome "I" (i maiuscola) e nell'if tenti di usare una variabile "i" (i minuscola) che non hai mai dichiarato e dunque non esiste...
2) nell'if esegui una assegnazione perchè stai usando l'operatore di assegnamento '=' invece devi usare '=='...

le i nel programma sono maiuscole xD comunque grazie, è bruttissimo quando stai mezz'ora a sclerare e vedi che era uno stupido errore di distrazione che non avevi visto :eek: grazie mille ;)

Lo ScArSe
10-11-2010, 19:30
rieccoci :eek:


public void scambia (String nominativo[I], nominativo[J]){
String a= nominativo[J];
String b= nominativo[I];
nominativo [I] = a;
nominativo[J] =b;

}
}

c'è qualche problema alla prima riga... ']' expected
e poi mi fa storie che J e I non sono dichiarate... questa è la prima volta che invio un array in altri metodi quindi se ho fatto qualcosa di assurdo scusatemi xD

Lo ScArSe
10-11-2010, 21:21
alla fine l ho risolta cosi


public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {
if (nominativo[I].compareTo(nominativo[J]) == 1)
scambia(nominativo, I, J);
}
}
}

/********************Scambiare************************/

public void scambia (String nominativo[], int I, int J){
String a= nominativo[J];
String b= nominativo[I];
nominativo [I] = a;
nominativo[J] =b;

}

;)

edit... compila ma non ordina :S

provato anche cosi... niente (anche mettendo void senza return)


public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {
if (nominativo[I].compareTo(nominativo[J]) == 1)
scambia(I, J);
}
}
}

/********************Scambiare************************/

public String scambia (int I, int J){
String a= nominativo[J];
String b= nominativo[I];
nominativo [I] = a;
nominativo[J] =b;
return nominativo[I];
}

Lo ScArSe
11-11-2010, 11:12
up :mc:

Lo ScArSe
11-11-2010, 20:18
niente?? scusate l insistenza ma mi serve per domani :S

tuccio`
11-11-2010, 20:53
scusa ma devi ordinare un array di stringhe? usa il metodo sort della classe Arrays

Lo ScArSe
11-11-2010, 21:04
scusa ma devi ordinare un array di stringhe? usa il metodo sort della classe Arrays

ah? non l'abbiamo mai fatto il prof con la spiegazione s'è fermato a scambia(I,J).. come si fa?

tuccio`
11-11-2010, 22:06
se a è il tuo array

java.util.Arrays.sort(a);

Lo ScArSe
11-11-2010, 22:07
se a è il tuo array

java.util.Arrays.sort(a);

eh ma penso lui voglia farcelo fare manualmente...come si fanno a passare i parametri che sono array da un metodo a un altro?

Lo ScArSe
11-11-2010, 22:11
ma comunque l'ho scritto direttamente nell'if eliminando l altro metodo... è proprio come voglio fare "scambia" che non va...penso che userò il comando scritto su xD

edit... per pura prova ho provato a mettere dentro l'if uno showmessage... nient'altro... non funziona... il problema quindi è che non mi entra proprio nelle istruzioni dell if!

MEMon
11-11-2010, 22:34
ma comunque l'ho scritto direttamente nell'if eliminando l altro metodo... è proprio come voglio fare "scambia" che non va...penso che userò il comando scritto su xD

edit... per pura prova ho provato a mettere dentro l'if uno showmessage... nient'altro... non funziona... il problema quindi è che non mi entra proprio nelle istruzioni dell if!
Il metodo che hai scritto dovrebbe funzionare, quello che hai scritto in realtà non dovrebbe nemmeno compilare, vedo I e i insieme, probabilmente compila perchè hai variabili dichiarate fuori con lo stesso nome, comunque messo a posto, tipo così, funziona.

private void swap(String[] list, int i, int j){
String a=list[i];
String b=list[j];
list[i]=b;
list[j]=a;
}


Per provarlo

String[] list={"A", "B", "C", "D"};
swap(list, 0, 1);
swap(list, 1, 2);
swap(list, 0, 3);

// ora list vale {"D", "C", "A", "B"} come previsto


Hai sbagliato l'ordinamento, concentrati su quello, ti ci lascio ragionare su.

Lo ScArSe
11-11-2010, 22:58
ma non so perchè la i me la scrivi minuscola qui sul forum!! nel programma la I è maiuscola ovunque... ho controllato piu volte!, ho notato che il problema è nell'if...
public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {
if (nominativo[I].compareTo(nominativo[J]) == 1){
JOptionPane.showMessageDialog(null, "ciao");
}
}
}
}

ho scritto questo... neanche "ciao" mi compare..

MEMon
11-11-2010, 23:00
ma non so perchè la i me la scrivi minuscola qui sul forum!! nel programma la I è maiuscola ovunque... ho controllato piu volte!, ho notato che il problema è nell'if...
public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {
if (nominativo[I].compareTo(nominativo[J]) == 1){
JOptionPane.showMessageDialog(null, "ciao");
}
}
}
}

ho scritto questo... neanche "ciao" mi compare..

L'ordinamento è sbagliato, inoltre guardati meglio il metodo compareTo

Lo ScArSe
11-11-2010, 23:12
L'ordinamento è sbagliato, inoltre guardati meglio il metodo compareTo

in che senso è sbagliato? se ti riferisci a nominativo[I] nel programma la I è maiuscola

MEMon
11-11-2010, 23:15
in che senso è sbagliato? se ti riferisci a nominativo[I] nel programma la I è maiuscola

Non mi riferisco a quello, è sbagliato come logica, se ti interessa il lato didattico della cosa prova a pensarci un attimo da solo.
Ma prima di quello guardati la documentazione della funzione compareTo.

Lo ScArSe
11-11-2010, 23:21
Non mi riferisco a quello, è sbagliato come logica, se ti interessa il lato didattico della cosa prova a pensarci un attimo da solo.
Ma prima di quello guardati la documentazione della funzione compareTo.

ok grazie adesso do un occhiata :)

WarDuck
12-11-2010, 00:39
Comunque si potrebbe fare uno sforzo nel cercare di capire i costrutti del linguaggio ed il loro significato... non è che ad ogni errore ci sarà sempre qualcuno pronto a risolvere.

Lo ScArSe
12-11-2010, 14:11
Comunque si potrebbe fare uno sforzo nel cercare di capire i costrutti del linguaggio ed il loro significato... non è che ad ogni errore ci sarà sempre qualcuno pronto a risolvere.

si ma io scrivo qui solo quando dopo 1 oretta non riesco a capire l'errore... sul libro ci sono cose diverse (ad esempio JOptionPane non c'è proprio...)

Lo ScArSe
12-11-2010, 14:26
comunque se in futuro dovesse servire a qualcuno l'errore era nell if:

if (nominativo[I].compareTo(nominativo[J]) == 1)

il codice corretto è:

if (nominativo[I].compareTo(nominativo[J]) > 0)

;)

MEMon
12-11-2010, 14:28
comunque se in futuro dovesse servire a qualcuno l'errore era nell if:

if (nominativo[I].compareTo(nominativo[J]) == 1)

il codice corretto è:

if (nominativo[I].compareTo(nominativo[J]) > 0)

;)

Perfetto primo problema trovato, hai guardato meglio la documentazione di compareTo.

Ora correggi l'ordinamento che è sbagliato.

ps. secondo me è meglio che non usi ;) , ti da un certo tono di superiorità che non penso ti possa permettere (almeno a me da questo effetto).

Lo ScArSe
12-11-2010, 14:32
Perfetto primo problema trovato, hai guardato meglio la documentazione di compareTo.

Ora correggi l'ordinamento che è sbagliato.

ps. secondo me è meglio che non usi ;) , ti da un certo tono di superiorità che non penso ti possa permettere (almeno a me da questo effetto).

nono non era assolutamente in torno di superiorità!! non penso neanche io di potermelo permettere.. era solo perchè dopo 2 giorni che ci sto vicino finalmente l ho capito e mi dava soddisfazione... niente di più... comunque ho risolto tutto, anche l 'ordinamento.. grazie a tutti :)

MEMon
12-11-2010, 14:33
nono non era assolutamente in torno di superiorità!! non penso neanche io di potermelo permettere.. era solo perchè dopo 2 giorni che ci sto vicino finalmente l ho capito e mi dava soddisfazione... niente di più... comunque ho risolto tutto, anche l 'ordinamento.. grazie a tutti :)

Se l'ordinamento l'hai lasciato come l'ultimo che hai postato, allora è sbagliato.
Se ti sembra che funzioni è solo un caso.

Lo ScArSe
12-11-2010, 14:36
Se l'ordinamento l'hai lasciato come l'ultimo che hai postato, allora è sbagliato.
Se ti sembra che funzioni è solo un caso.

scusa ma cosa intendi per ordinamento? :muro:

MEMon
12-11-2010, 14:38
scusa ma cosa intendi per ordinamento? :muro:


public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {

}
}
}



quello

Lo ScArSe
12-11-2010, 14:40
public void ordinaValori () {
for (int I=0;I<nominativo.length-1;I++) {
for (int J=1;J<nominativo.length;J++) {

}
}
}



quello
ah si ho fatto una modifica ieri sera mettendo J=I+1

MEMon
12-11-2010, 14:42
ah si ho fatto una modifica ieri sera mettendo J=I+1
ok

Lo ScArSe
12-11-2010, 14:59
grazie a tutti :)

Lo ScArSe
26-11-2010, 21:19
ciao a tutti ragazzi... mi servirebbe un chiarimento sull else if perchè sul mio libro è spiegato solo l'if e l'else... ho questo codice (non fate caso a quello che fa era solo un prova)

if (dvd[I].getAutore().equalsIgnoreCase(dvd[J].getAutore())) {
String k = "ciao";
else if (dvd[I].getTitolo().compareToIgnoreCase(dvd[J].getTitolo()) > 0) {
String r = "ciaoo";

mi dice: 'else' without 'if'.. cosa significa? grazie anticipatamente a tutti :)


doh! era un pò di rugine con l'else... risolto :)