Aiuto prime armi

di il
12 risposte

Aiuto prime armi

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

  • Re: Aiuto prime armi

    Scusa ma che aspetto del programma vorresti ottimizzare?
  • Re: Aiuto prime armi

    Efficienza e scriverlo in maniera più elegante. Penso che scritto così sia molto "scolastico"
  • Re: Aiuto prime armi

    In che senso più elegante?
    prova a spiegarti bene...
  • Re: Aiuto prime armi

    È 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
  • Re: Aiuto prime armi

    I problemi son tanti, per cominciare cosa succede se squadre.length è uguale a zero? (o magari anche meno di zero)
  • Re: Aiuto prime armi

    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
  • Re: Aiuto prime armi

    Hai chiesto come non scriverlo in modo "scolastico": uno dei primi aspetti è quello.
  • Re: Aiuto prime armi

    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?
  • Re: Aiuto prime armi

    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!
  • Re: Aiuto prime armi

    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?
  • Re: Aiuto prime armi

    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
  • Re: Aiuto prime armi

    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