Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 14
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16

    Aiuto semplice problema in Java

    Salve a tutti.
    Ho un tema d'esame da risolvere ma non riesco ad andare avanti. Spero che qualcuno con più esperienza mi sappia aiutare e a capire dove sbaglio.

    Il tema d'esame è questo:

    https://www.dropbox.com/s/gzna26b6w7...23725.jpg?dl=0

    https://www.dropbox.com/s/pnfcoxmgxg...23737.jpg?dl=0


    Mentre questo è il mio codice:




    codice:
    package esercizi;
    
    
    public class MazzoCarte {
        private int[] mazzo;
    
    
        
        public MazzoCarte() {
            mazzo = new int[9];
            }
        
        public void sistema(int i, int j) {
            for (i = 0; i <= 9; i++) {
                for (j = 1; j <= 10; j++) {
                    mazzo[i] = j;
                }
            }
        }
    
    
        public boolean scambia(int i, int j) {
            if (i>= 0 & i <10 & j >= 0 & j < 10) {
                int temp = mazzo[i];
                mazzo[i] = mazzo[j];
                mazzo[j] = temp;
                return true;
            }
            else {
                return false;
            }
        }
        
        public void spezzaMazzo() {
            mazzo[0] = mazzo[5];
            mazzo[1] = mazzo[6];
            mazzo[2] = mazzo[7];
            mazzo[3] = mazzo[8];
            mazzo[4] = mazzo[9];
            mazzo[5] = mazzo[0];
            mazzo[6] = mazzo[1];
            mazzo[7] = mazzo[2];
            mazzo[8] = mazzo[3];
            mazzo[9] = mazzo[4];
            
        }
    
        public int getCell(int i) {        
        return mazzo[i];
        }
    
    
        public static void main(String[] args) {    
        MazzoCarte m = new MazzoCarte();
        m.getCell(4);
        }
    
    
    }

    Credo che il codice sia sbagliato dato che poi ho problemi con JUnit, ma non riesco a capire dove.
    Ultima modifica di scretch; 27-06-2015 a 13:13

  2. #2
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    La prima cosa che noto è che hai scritto:
    codice:
    public MazzoCarte(){
            mazzo =new int[9];
            }
    


    Attento che quando crei un array specifichi il numero di elementi non la posizione dell' ultimo elemento, devi creare un array di dimensione 10

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    Quote Originariamente inviata da Ansharja Visualizza il messaggio
    La prima cosa che noto è che hai scritto:
    codice:
    public MazzoCarte(){
            mazzo =new int[9];
            }
    


    Attento che quando crei un array specifichi il numero di elementi non la posizione dell' ultimo elemento, devi creare un array di dimensione 10
    Giustissimo, grazie per la correzione!
    Mi sono impantanato nel ritornare il valore di un cella, come posso correggere getCell ?

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da scretch Visualizza il messaggio
    Mi sono impantanato nel ritornare il valore di un cella, come posso correggere getCell ?
    Di per sè il metodo è giusto,magari dovresti controllare come fai nel metodo scambia di avere un intero in ingresso compreso tra 0 e 9 , altrimenti il programma si bloccherà in esecuzione.

    Se il problema è che il tuo main quando fai m.getCell(4); restituisce 0, questo accade perchè quando crei alla riga precedente il mazzo, istanzi solo l'array, con tutti gli elementi a 0.

    Poi il tuo metodo sistema (int i,int j) non ha senso come è stato scritto: hai messo un ciclo annidato in cui mazzo[i] viene sovrascritto 10 volte con i valori di j nel ciclo interno quindi il metodo metterà in ogni cella il valore 10 (l'ultimo di j)

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    Il metodo scambia mi è nella traccia del compito e quindi non posso modificarlo.
    Con il ciclo annidato speravo di assegnare al mazzo[0] il valore 1, al mazzo[1] il valore 2 ecc ecc...

    Il problema è che devo scrivere un caso di test in JUnit che dimostri che se si prova a scambiare due carte, lo spostamento viene eseguito correttamente, quindi:

    m.sistema(0, 5);
    m.sistema(1, 6);
    m.scambia(0, 1);
    m.getCell(0) // dovrebbe essere 6

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da scretch Visualizza il messaggio
    Il metodo scambia mi è nella traccia del compito e quindi non posso modificarlo.
    Aspetta non ho mai detto di modificare il metodo scambia!
    Tu chiedevi se il metodo getCell è giusto: ti ho detto che sarebbe opportuno aggiungere lo stesso controllo che è presente nel metodo scambia (quello scritto nella traccia), in questo caso non controlli che anche j sia compreso tra 0 e 9 ma solo i.

    Quote Originariamente inviata da scretch Visualizza il messaggio
    Con il ciclo annidato speravo di assegnare al mazzo[0] il valore 1, al mazzo[1] il valore 2 ecc ecc...
    Per fare questo è sufficiente un solo ciclo con l'istruzione mazzo[i]=i+1 a cosa serve un ciclo annidato?
    Come ho già detto il risultato di quel ciclo è inserire 10 in ogni cella perchè per ogni elemento dell'array esegui un ciclo interno di 10 operazioni in cui sostituisci ogni volta l'elemento con un intero successivo fino a 10 (e lo fai per tutti gli elementi).

    Quindi cambia il metodo sistema(int i,int j) per ora

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    Ok, metodo sistema cambiato:
    mazzo[0] = 1;mazzo[1] = 2;
    mazzo[2] = 3;
    mazzo[3] = 4;
    mazzo[4] = 5;
    mazzo[5] = 6;
    mazzo[6] = 7;
    mazzo[7] = 8;
    mazzo[8] = 9;
    mazzo[9] = 10;

    Così sono sicuro di non sbagliare

    Altrimenti sarebbe stato

    for (i = 0; i<=9; i++) {
    mazzo[i]=i+1;
    }

    giusto?

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Si certo, che bisogno c'è di scrivere 10 istruzioni quando basta una riga di ciclo?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2011
    Messaggi
    16
    Hai perfettamente ragione.
    Come mai però, se esegui il codice, nella console non mi appare nessun risultato?
    Posso chiederti di JUnit?

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2014
    residenza
    Padova
    Messaggi
    361
    Quote Originariamente inviata da scretch Visualizza il messaggio
    Posso chiederti di JUnit?
    Io non ho mai usato JUnit , lancio i programmi java direttamente dalla shell ed ho creato qualche file .jar a volte.
    Quote Originariamente inviata da scretch Visualizza il messaggio
    Come mai però, se esegui il codice, nella console non mi appare nessun risultato?
    Nel metodo main hai ancora queste righe che avevi lasciato sopra?
    codice:
    m.sistema(0, 5);
    m.sistema(1, 6);
    m.scambia(0, 1);
    m.getCell(0) // dovrebbe essere 6
    


    Se sì non vedi nessun risultato semplicemente perchè non l'hai chiesto tu

    Per stampare a video un messaggio si usa l'istruzione System.out.print(qui metti quello che vuoi visualizzare).

    Se tu scrivi solo l'istruzione:
    m.getCell(0) non ottieni un messaggio a video, ma ottieni un int che poi non utilizzi, lo puoi assegnare a una variabile o solo stamparlo a video se non ti serve utilizzarlo altrove.



    Ultima modifica di Ansharja; 27-06-2015 a 15:43

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