Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1

    Copiare elementi specifici di un vettore

    Salve a tutti raga, ho un urgente bisogno di aiuto in quanto fra un po' dovrò sostenere l'esame di Informatica VVoVe: .
    Vado su bito al sodo postando la traccia del problema:

    Si scriva un metodo componiVettore che riceve in ingresso un intero x e un vettore di interi V, e restituisce un vettore di interi Z contenente tutti gli elementi di V di valore negativo e strettamente minori di x che si trovano in posizione pari. Ad esempio, se V = [ -3, 6, -7, 8, -15, -6 ] e x= -5, allora Z = [ -7, -15 ].

    Posto la mia soluzione :

    [I]import corejava.*;
    public class esercizio{
    public static int[]componiVettore(int [] V,int x){
    int a=0;
    int []Z=new int[V.length];
    for (int i=0;i<V.length-1;i++){
    if (i%2==0 && V[i]<x)
    a++;
    Z[a]=V;
    }
    return Z;
    }

    public static void main (String []args){
    int A[]={-3,6,-7,8,-15,-6};
    System.out.println(componiVettore(A,-5));
    }
    }


    Eseguendo la mia soluzione con la funzione di Textpad "Esegui applicazioni JAVA" mi esce un errore stranissimo di pochi caratteri perlopiù incomprensibili . Temo di sbagliare nella copiatura del nuovo vettore, in particolare nella sua dimensione e dunque nel suo successivo riempimento.
    Per favore, aiuto .

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    non ti esce un errore... è solo che non puoi stampare un vettore così come vorresti fare tu... quel che ti esce è l'object reference che la VM ha dato al tuo vettore Z.

    Cambia il main in modo che:

    int[] uscita = componiVettore(A, -5);
    for (int i = 0; i < uscita.length; i++) {
    System.out.println(uscita[i]);
    }

    poi ci sarebbe da dire una cosa sul vettore che si va a costruire in componiVettore... che non è esattamente quello richiesto dalla specifica, visto che la lenght è pari a quella del vettore originale... e che il ciclo for come l'hai scritto dopo ti costringe ad usare un if con la condizione i%2, mentre potevi uscirtente con

    codice:
     for (int i=0;i<V.length-1;i +=2){
    ...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Grazie 1000 per la risposta.
    Allora, tu come avresti fatto per effettuare un opportuno dimensionamento (visto ciò che chiede l'esercizio) del vettore Z?
    Hai perfettamente ragione per quanto riguarda un utilizzo migliore del for (i+=2), lo terrò bene a mente.
    Purtroppo facendo la modifica che dici di fare al main mi stampa di nuovo il vettore V, ma io voglio solo quegli elementi che soddisfino la condizione if e non tutti.
    Per il resto, ti sembra fatto bene l'esercizio? Mi riferisco in particolare all'uso del contatore "a" come indice del nuovo vettore e al successivo riempimento di questo. Non contare il main, che all'esame (in questo particolare esercizio) non dovrò svolgere.

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    se non hai a disposizione altre cose (tipo Vector) non ti resta che fare due cicli for per ritornare il giusto array. Vorrei farti notare che non è la mia modifica al main che fa stampare tutto l'array, ma come hai definito tu Z nel metodo (è un vettore di lunghezza pari al vettore che passi in ingresso...)

    codice:
    public int[] componiVettore(int[] V, int x) {
            int a = 0;
            for (int i = 0; i < V.length; i += 2) {
                a += (V[i] < 0 && V[i] < x ? 1 : 0);
            }
            
            int[] Z = new int[a];
            a = 0;
            
            for (int i=0; i < V.length; i += 2) {
                if (V[i] < 0 && V[i] < x) {
                    Z[a] = V[i];
                    a++;
                }
            }        
            return Z;
        }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    A cosa serve, di preciso, questa parte del programma?

    [I]public int[] componiVettore(int[] V, int x) {
    int a = 0;
    for (int i = 0; i < V.length; i += 2) {
    a += (V[i] < 0 && V < x ? 1 : 0);
    }


    Mi riferisco in particolare alla stringa [I]a += (V[i] < 0 && V < x ? 1 : 0);, nella quale non so proprio cosa significhi il punto interrogativo e "1:0".
    Grazie della pazienza .

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    è l'operatore ternario di java (e di molti altri linguaggi di programmazione).
    codice:
    (boolean ? true : false)
    Ossia verifica la condizione "boolean", se è vera fa quel che c'è in true, se è falsa l'altra.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Capisco, temo che però all'esame non potrò usarlo.
    Non conosci qualcosa di più semplice?

  8. #8
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    LMFAO cioè non puoi usare un if-else? apposto.
    Prima di andare all'esame ti consiglio di accendere il cervello e leggere bene. Traduco di nuovo, di più non so che fare.

    codice:
    <espressione booleana ? condizione verificata : condizione non verificata>
    
    =
    
    if (condizione boolena) {
      codizione verificata
    }
    else {
      condizione non verificata
    }
    solo che è scritto tutto su una riga. Non è in nessun package, non si deve aggiungere niente, fa parte del core degli operatori... e dirmi che non puoi utilizzare l'operatore ternario equivale a dirmi che non puoi utilizzare, chessò, l'AND o l'OR.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  9. #9
    A lezione non abbiamo mai trattato un simile modo di esprimere il booleano con una condizione if else, tutto qui.

  10. #10
    Temo comunque che il mio problema riguardi perlopiù il non sapere copiare e ritornare adeguatamente elementi specifici di un array o di una matrice. Inserendo il codice del tuo secondo post, Andrea, purtroppo mi compare il solito "errore" di visualizzazione. A me serve solo sapere come copiare opportunamente un array. Dov'è che sbaglio in questo? Nel contatore? E' solo un problema di dimensionamento? Cos'è esattamente che dovrei fare e che non faccio? Non credo che sia un problema di condizioni if o tipi, e comunque a questo punto diventano problemi secondari..

    Posto il programma modificato:

    [I]import corejava.*;
    public class settembre2006secondoesD{
    public static int[]componiVettore(int [] V,int x){
    int a=0;
    int []Z=new int[V.length];
    for (int i=0;i<V.length-1;i++){
    if (i%2==0 && V[i]<x)
    a++;
    Z[a]=V;
    }
    return Z;
    }

    public static void main (String []args){
    int A[]={-3,6,-7,8,-15,-6};
    for (int i=0; i <A.length; i++) {
    System.out.println(componiVettore(A,-5));
    }
    }
    }

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.