Aiuto prime armi

di squizzi il
12 risposte
Salve,
ho da poco ripreso a programmare e vorrei avere dei consigli su come migliorare e rendere più efficiente il metodo che ho scritto. Sto facendo alcuni esercizi e uno consisteva nella stesura di un programma per la creazione di un calendario di calcio. Ho usato l'algoritmo di berger. Funziona, ma come detto vorrei avere dei pareri su come migliorarlo da voi che siete più esperti di me. grazie in anticipo.
Il metodo è all'interno della classe. Per il riuso dovrei migliorare un pochino tutto. squadre[] è un array di squadre e con .getNome restituisce il nome della squadra.

public void calendario() {
int numeroSquadre = squadre.length;
int numeroGiornate = numeroSquadre - 1;
int numeroIncontri = numeroSquadre / 2;
String[] casa = new String[numeroIncontri];
String[] trasferta = new String[numeroIncontri];
for (int i = 0; i < numeroSquadre/2; i++) {
casa = squadre.getNome();
trasferta = squadre[numeroSquadre - i-1].getNome();
}

for (int i = 0; i < numeroGiornate; i++) {
System.out.println("Giornata " + (i+1) + ":");
if (i % 2 != 0) {
for (int j = 0; j < casa.length; j++) {
System.out.println( casa[j] + " - " + trasferta[j]);
}
} else {
for (int j = 0; j < casa.length; j++) {
System.out.println( casa[j] + " - " + trasferta[j]);
}
}

String[] appCasa = new String[casa.length];
String[] appTras = new String[casa.length];
for(int n=0 ; n<casa.length ; n++){
appCasa[n] = casa[n];
appTras[n] = trasferta[n];
}
appCasa[0] = trasferta[0];
trasferta[casa.length-1] = casa[casa.length-1];
for(int k = 1 ; k < casa.length ; k++){
casa[k] = appCasa[k-1];
trasferta[casa.length-k-1] = appTras[casa.length-k];
}
}
}

12 Risposte

  • Scusa ma che aspetto del programma vorresti ottimizzare?
  • Efficienza e scriverlo in maniera più elegante. Penso che scritto così sia molto "scolastico"
  • In che senso più elegante?
    prova a spiegarti bene...
  • È che mi sembra tanto scolastico scritto così. Non penso che possa realizzare un progetto o un'app scrivendo codice cosi. Non saprei e vorrei dei consigli da voi più esperti
  • I problemi son tanti, per cominciare cosa succede se squadre.length è uguale a zero? (o magari anche meno di zero)
  • Per ora avevo intenzione di iniziare da zero. Quindi non mi interessavo di quello. Comunque avrei creato delle eccezioni e le avrei gestite con il try catch, o meglio avrei detto che possono esserci delle eccezioni e gestite dopo in modo da lanciare messaggi o fare altre cose
  • Hai chiesto come non scriverlo in modo "scolastico": uno dei primi aspetti è quello.
  • Grazie, è che proprio le cose che avevo intenzione di rivedere in questi giorni erano ereditarietà errori e roba del genere. Posso chiederti anche aiuto con le interfacce, classi astratte e ereditarietà? Mi hanno sempre detto che un buon programmatore sa usarle bene, però anche in università chiedevo ai professori e mi dicevano poi vedrai e non mi hanno mai dato risposte precise. A livello teorico so le differenze, ma a livello pratico? Perchè usarle?
  • Scusa ma è una domanda un po' troppo generica, a cui possono seguire solo consigli generici:
    In primo luogo l'unica cosa che puoi fare è ovviamente praticare, seguire qualche esercizio guidato un po' complesso da una buona idea di come dovresti organizzare oggetti e classi per avere un'implementazione e una gesione pulita.

    1) Dovresti provare a sviluppare un piccolo progettino, perchè ti da una visione delle cose diversa rispetto ai molti programmini che possono farti fare all'università ma che restano magari slegati e fine a se stessi. Ad esempio vedo che il frammento di codice che hai caricato non è modellato: hai assegnazioni, cicli, assegnazioni..perchè non hai creato un costruttore per inizializzare le variabili? E' buona norma inoltre che l'accesso alle variabili passi attraverso l'uso di metodi interni alla classe stessa pertanto

    2) Pensa ad oggetti.
    Potrebbe non essere immediato passare da un tipo di programmazione procedurale rispetto ad una modellazione ad oggetti ma è solo questione di abitudine.
    infine

    3) JavaDoc :"https://docs.oracle.com/javase/7/docs/api/allclasses-noframe.html" ed è tutto dire!
    I miei professori avranno si e no citato la documentazione un paio di volte, lasciando a noi l'obbligo morale di prenderne visione. Se vuoi sviluppare una certa dimestichezza con il linguaggio Java dovresti abituarti ad utilizzare le classi e i metodi già esistenti e a tua disposizione!
  • Lo so che ho dato informazioni generiche, ma più preciso di quello non riesco ad essere. Per quanto riguarda il pensare ad oggetti è abbastanza difficile e ci vuole pratica penso. Come l'utilizzo di interfacce e classi astratte che per me ora non ha molto senso. Inoltre sul punto uno hai detto di creare un costruttore che inizializzi le variabili, come? E per accedere alle variabili solitamente uso i getter e i setter, però se il metodo è interno alla stessa classe no. Non so se si può chiedere agli altri di postare codice per me, ma se si può come sarebbe il costruttore dove inizializzo le variabili?
  • Caspita, costruttore (e distruttore) sono "la base"
    
     calendario() {  che bello ho istanziato un calendario }
    
    Essenzialmente il costruttore è un metodo che ha il nome della classe, e non ritorna niente (di esplicito), dentro normalmente si usa this (che è definito).
    Se non c'è espressamente, Java ne mette uno "occulto" che non inizializza (ovviamente) variabili etc
  • Si questo lo so.. E this permette di fare ad esempio this.numero = numero passando come parametro una variabile con lo stesso nome ... Solamente non capisco nel mio pezzo di programma perché istanziare delle variabili e come.. Le utilizzo solamente all'interno del metodo
Devi accedere o registrarti per scrivere nel forum
12 risposte