Codice con metodi ausiliari e array

di il
8 risposte

Codice con metodi ausiliari e array

import java. util. Scanner;
public class Memo {
	
   
	public static void main(String[] args) {
		Scanner input= new Scanner(System.in);
		String [] parole= {"gioco", "bottega", "salamandra", "cane", "gatto", "criceto", "cugino", "pioggia", "vento", "marito"};
		System.out.println("Scegli opzione");
        System.out.println(
        		"[S] Stampa stringhe dalla posizione ... alla ..."+
        		"[M] Modifica stringa in posizione ..."+
        		"[T] Trova posizione della stringa ..."+
        		"[E] Esci");
        
        String s=input.nextLine();
        switch (s) {
        case "S": 
        	String ris=stampastringhe(parole);	 
           
        	System.out. println(ris); 
                  
        }     
        
            
	}
	
	private static String  stampastringhe (String [] parole) {
		int m=3;
		int n=5;
		for (int i=m; i<=n; i++) {
			return parole [i]; // so che l'array non è visibile, ma non so come "sostituirlo"
		}
     
		{
  
		}
   
     
   
}
}
Salve a tutti, avrei da svolgere la seguente esercitazione:
"Scrivere un programma modulare Memo che, utilizzando un array, legge
10 stringhe e poi mette a disposizione un menu con le seguente opzioni:
[S] Stampa stringhe dalla posizione ... alla ...
[M] Modifica stringa in posizione ...
[T] Trova posizione della stringa ...
[E] Esci
Il menu viene proposto ripetutamente all’utente, fino a quando viene selezionata l’uscita dal programma
(opzione E). Il significato delle operazioni `e il seguente:
• se l’utente sceglie S, il programma legge due posizioni n e m e stampa tutti gli elementi dell’array
il cui indice `e compreso tra n e m;
• se l’utente sceglie M, il programma legge una posizione n e una stringa s che assegna alla cella n
dell’array;
• se l’utente sceglie T, il programma legga una stringa s e stampa la prima posizione dell’array che
la contiene, o un messaggio di errore se nessuna cella la contiene;
• se l’utente sceglie E, il programma stampa il contenuto dell’array e termina.
Ognuna delle operazioni (tranne [E]) deve essere realizzata da un metodo diverso che realizza quanto
indicato".
Mi servirebbe un aiuto molto gentilmente, ma prima devo fare delle premesse:
Non mi serve e non pretendo che risolviate l'esercizio per me, c'è però un nodo cruciale, fondamentale per la risoluzione dell'esercizio, che non riesco a comprendere: l'esercizio chiede di lavorare ad uno stesso array, inizializzato nel main, con più metodi ausiliari anche se questi ultimi devono essere "private"...come posso ovviare a questo problema? Non so proprio che pesci pigliare, avrei perciò bisogno di qualche dritta.
Il codice scritto così è approssimativo e non del tutto corretto, me ne rendo conto: lo switch scritto in questo modo ha ben poco senso e il resto è da sistemare, ma sono cose che ragionandoci su, riesco ad aggiustare, la parte cruciale, invece, è quella di cui ho parlato sopra e non so proprio da che parte iniziare. Chiedo dei vostri consigli. Grazie.

8 Risposte

  • Re: Codice con metodi ausiliari e array

    ytreka ha scritto:


    l'esercizio chiede di lavorare ad uno stesso array, inizializzato nel main, con più metodi ausiliari anche se questi ultimi devono essere "private"...come posso ovviare a questo problema?
    Certo che è "visibile" .... l'array parole nel main l'hai passato in argomento al metodo stampastringhe. Quindi stampastringhe HA il riferimento all'array e quindi può perfettamente leggere/modificare i suoi elementi.

    Invece il metodo stampastringhe NON può modificare il valore reference di parole del main, ovvero non può cambiare a COSA fa riferimento la variabile del main.
  • Re: Codice con metodi ausiliari e array

    Beh, ma è proprio quello che devo fare, allora... Ma il return di un metodo ausiliare può ritornare più valori? Perchè questo codice, alla dichiarazione del metodo ausiliare, mi dà l'errore: "Questo metodo richiede un corpo, invece che una semicolonna?"
  • Re: Codice con metodi ausiliari e array

    ytreka ha scritto:


    Beh, ma è proprio quello che devo fare, allora...
    Direi di no. Dalle opzioni indicate:

    [S] Stampa stringhe dalla posizione ... alla ...
    [M] Modifica stringa in posizione ...
    [T] Trova posizione della stringa ...

    Nessuna di queste implica che devi andare a cambiare A COSA fa riferimento la variabile del main dall'interno di un metodo diverso dal main.

    ytreka ha scritto:


    Ma il return di un metodo ausiliare può ritornare più valori?
    No, tecnicamente solo 1 valore/oggetto. Che poi può essere un array o un oggetto "complesso" con molti dati.

    ytreka ha scritto:


    Perchè questo codice, alla dichiarazione del metodo ausiliare, mi dà l'errore: "Questo metodo richiede un corpo, invece che una semicolonna?"
    Per come hai scritto (dal post iniziale) il stampastringhe, comunque è inappropriato/incompleto. Hai fatto un for con un return "fisso" dentro. Che così è praticamente insensato/inutile.
    E comunque il metodo dichiara di ritornare String ma il compilatore NON può sapere se il for verrà davvero eseguito almeno una volta. Quindi per il compilatore non c'è un return "certo".
  • Re: Codice con metodi ausiliari e array

    Mi riferivo proprio al poter leggere/ modificare gli elementi dell'array inizializzato nel main. Comunque, c'è un'alternativa al return? Oppure è proprio l'idea del for ad essere sbagliata?
  • Re: Codice con metodi ausiliari e array

    ytreka ha scritto:


    Mi riferivo proprio al poter leggere/ modificare gli elementi dell'array inizializzato nel main.
    E questo PUOI farlo (leggere e modificare gli elementi), basta passare dal main all'altro metodo il riferimento all'array.

    ytreka ha scritto:


    Comunque, c'è un'alternativa al return? Oppure è proprio l'idea del for ad essere sbagliata?
    Ma dovresti prima chiarire COSA intendi fare in quel metodo stampastringhe. Mettere dentro un for un return così schiantato ("incondizionato") praticamente non ha senso.

    Nel main hai stampato il menù, hai chiesto in input la linea e poi se "S" invochi stampastringhe. Ma quella opzione dice "dalla posizione ... alla ...". Quindi dove/come inserisci queste due posizioni? Sono fisse? Sono in input dall'utente? Valuta innanzitutto questo ...
  • Re: Codice con metodi ausiliari e array

    Beh la consegna non dice che debbano essere posizioni "definite" dall'utente, quindi pensavo di metterle fisse... Per questo ho messo il for che in un metodo main con qualche piccolo aggiustamento avrebbe funzionato, senza return. Sono consapevole ora più di prima che quel for non ha senso, il fatto è che se ho a disposizione solo un return per il metodo ausiliare che mi restituisce solo un valore, non so come agire diversamente considerando che mi richiede di stampare più elementi... Quel for è proprio solo un'idea buttata lì, in mancanza di altro. Per questo chiedevo se esista un altro comando in grado di restituirmi magari più elementi.
  • Re: Codice con metodi ausiliari e array

    ytreka ha scritto:


    quindi pensavo di metterle fisse...
    Va bene.

    ytreka ha scritto:


    Per questo ho messo il for che in un metodo main con qualche piccolo aggiustamento avrebbe funzionato, senza return. Sono consapevole ora più di prima che quel for non ha senso, il fatto è che se ho a disposizione solo un return per il metodo ausiliare che mi restituisce solo un valore, non so come agire diversamente considerando che mi richiede di stampare più elementi...
    No, il for HA senso. Era quel return fisso nel for che non ha senso.
    Ma perché dovresti fare un return? E di che valore? L'opzione S serve per stampare ... bene, il stampastringhe riceve l'array e stampa le parole dall'indice x a y. Non deve restituire nulla.


    P.S. ho letto meglio il testo iniziale:
    se l’utente sceglie S, il programma legge due posizioni n e m

    Questo farebbe pensare che dovresti chiedere in input le due posizioni!!
  • Re: Codice con metodi ausiliari e array

    Ok. Bene adesso mi pare di aver capito: tolgo il return è uso un semplice println. È che in tutte le esercitazioni con i metodi ausiliari, il prof ha sempre fatto usare il return, quindi per me era una sorta di conditio sine qua non. Per quanto riguarda le variabili che non sono fisse, va bene lì non è un problema, so come si fa. Grazie.
Devi accedere o registrarti per scrivere nel forum
8 risposte