Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    8

    Problema con funzione di controllo java!

    questo è il codice che ho realizzato, funziona fino quando j è diverso da zero, quando lo diventa, se inserisco un valore minore, devo tornare nella posizione precedente e lo confronta appunto con questo, solo che se faccio j-1 da outofbounds.
    ho provato anche a mettere la lunghezza delle righe ma nulla!!
    Qualcuno per favore può gentilmente aiutarmi??
    grazie in anticipo!!

    R=numero di righe
    C=numero di colonne
    m1=matrice
    i=contatore delle righe
    j=contatore delle colonne

    codice:
    static void inserimento2(int [][] m1, int R, int C){ 
       for(int i=0; i<R; i++){ 
          for(int j=0; j<C; j++){ 
             System.out.println("Inserisci l'elemento [" + (i + 1) +" , "+ (j+1) + "] della matrice-->"); 
             m1[i][j]=scan.nextInt(); 
             if(i==0){ 
                if(j==0){ 
                   System.out.print(); 
                } 
                else if(j!=0){ 
                   while(m1[i][j]<m1[i][j-1]){ 
                      System.out.println("Per favore inserisci un numero maggiore o uguale a " + m1[i][j-1]); 
                      m1[i][j]=scan.nextInt(); 
                   } 
                } 
             } 
             else if(i!=0){ 
                if(j==0){ 
                   while(m1[i][j]<m1[i-1][m1[C].length-1]){ 
                      System.out.println("Per favore inserisci un numero maggiore o uguale a " + m1[i][m1[0].length]); 
                      m1[i][j]=scan.nextInt(); 
                   } 
                } 
                else if(j!=0){ 
                   while(m1[i][j]<m1[i][j-1]){ 
                   System.out.println("Per favore inserisci un numero maggiore o uguale a " + m1[i][j-1]); 
                   m1[i][j]=scan.nextInt(); 
                } 
            } 
         } 
         System.out.println(""); 
      } 
    }


    Ultima modifica di PasC; 05-03-2014 a 11:33 Motivo: Aggiunti tag CODE e modificata formattazione

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Quote Originariamente inviata da PasC Visualizza il messaggio
    l'identazione verrà completamente sbagliata!! scusa ma la mette così!

    La mette così perchè tu non hai messo i tag CODE, che servono proprio a formattare correttamente il codice.
    In futuro usa una delle due possibilità:

    1) Scrivere in "Modalità avanzata" (pulsante in basso a destra) e usare l'apposito pulsante "#", che automaticamente inserisce i tag

    2) Scrivere direttamente i tag CODE nel corpo della discussione e incollarci dentro il codice:

    [CODE]
    incolli il codice
    [/CODE]


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    8
    grazie mille!! la prossima volta farò così! ciao!

  4. #4
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    Cosa dovrebbe fare quel codice?
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Non ho letto tutto il codice, ma una cosa la devi imparare e, di conseguenza, sistemare:

    L'istruzione "if" funziona in questo modo:


    codice:
    if ( condizione ) {
       // Questo ramo viene eseguito se la condizione è vera
    } else {
       // Questo ramo viene eseguito se la condizione è falsa
    }

    Quindi, se la condizione è (i == 0), non ha nessun senso controllare nel ramo "else" se i è diverso da 0. Perchè lo sappiamo già che nel ramo else è diverso da zero, altrimenti non ci sarebbe mai entrato.

    Tu hai scritto così:

    codice:
    if (i == 0) {
       ...
    } else {
       if (i != 0) {   // Questo if non serve a nulla: se siamo qui è perchè i è diverso da 0.
          ...          // Fa diventare ridondante il codice, rendendolo difficile da seguire e manutenere
       }
    }

    E la stessa cosa l'hai fatta per le condizioni su "j".

    Quindi, correggi quelle if, togliendo dai rami else il controllo della condizione inversa, che non servono a nulla e rendono inutilmente complicato e prolisso il codice.

    Poi, riposta il codice con le correzioni che ci ragioniamo su.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    8
    Grazie mille lo correggo subito!!

  7. #7
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    8
    praticamente fa inserire all'utente dei valori in ordine crescente!
    se inserisce uno minore lo confronta con quello prima e dice di inserirne uno maggiore!

  8. #8
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    8
    ecco il codice corretto! ho tolto gli if dagli else come controllo inverso!

    codice:
    static void inserimento2(int [][] m1, int R, int C){  //inserire valori in ordine crescente
          for(int i=0; i<R; i++){ 
             for(int j=0; j<C; j++){
                System.out.println("Inserisci l'elemento [" + (i + 1) +" , "+ (j+1) + "] della matrice-->");
                m1[i][j]=scan.nextInt();
                if(i==0){
                   if(j==0){
                      System.out.print("");        //se il valore si trova alla posizione 0,0 non deve essere confrontato
                   }
                   else{
                      while(m1[i][j]<m1[i][j-1]){    //controlla il valore inserito con quello precedente
                         System.out.println("Per favore inserisci un numero maggiore o uguale a " + m1[i][j-1]);
                         m1[i][j]=scan.nextInt();
                      }                
                   }
                }
                else{
                   if(j==0){
                      while(m1[i][j]<m1[i-1][j+C]){  //controlla il valore inserito con quello precedente 
                         System.out.println("Per favore inserisci un numero maggiore o uguale a " + m1[i-1][m1[0].length]);
                         m1[i][j]=scan.nextInt();  //se inserisce un valore minore, chiede di reinserire un valore però maggiore
                      }
                   }
                   else{
                      while(m1[i][j]<m1[i][j-1]){      //controlla il valore inserito con quello precedente
                         System.out.println("Per favore inserisci un numero maggiore o uguale a " + m1[i][j-1]);
                         m1[i][j]=scan.nextInt();
                      }   
                   }   
                }          
             }
             System.out.println("");         
          }          
       }
    Ultima modifica di PasC; 05-03-2014 a 14:41

  9. #9
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Un primo errore evidente che ho visto:

    codice:
    if(i==0){
       ...
    else{
       if(j==0){
          while(m1[i][j]<m1[i-1][j+C]){  //controlla il valore inserito con quello precedente
          ...
       }
    }

    j è uguale a 0, quindi scrivere "j + C" è inutile... tanto vale scrivere direttamente "C":


    codice:
    // Questo è equivalente: ho sostituito "j+C" con "C"
    while(m1[i][j]<m1[i-1][C]){

    Dato che gli array vanno da 0 a C-1, stai sforando i limiti.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  10. #10
    Utente di HTML.it
    Registrato dal
    Mar 2014
    Messaggi
    8
    Grazie mille per la disponibilità e per l'aiuto!! alla fine è andato!! Ancora grazie di cuore! Ciao

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.