|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Junior Member
Iscritto dal: Sep 2007
Messaggi: 19
|
[Java]Problema metodo
Ciao a tutti, volevo chiedere un aiuto su un metodo in java, purtroppo il codice che ho scritto io mi funziona solo in parte...vi posto prima le classi che servono per il metodo:
Codice:
import java.util.Scanner; public class ArrayUtil{ /* completare il corpo del metodo statico read per la lettura di array di interi che: 1- chieda all'utente la lunghezza dell'array da creare e forzi l'utente a inserire un intero; 2- crei un array della lunghezza giusta; 3- chieda all'utente i singoli elementi dell'array e li inserisca nell'array; 4- restituisca l'indirizzo dell'array creato. QUESTO METODO E' STATO VISTO A LEZIONE. POTRA' ESSERE USATO IN FUTURO OGNI VOLTA CHE SI VOGLIANO LEGGERE ARRAY DI INTERI*/ static Scanner input = new Scanner(System.in); public static int [] read(){ int [] nuovoarray; System.out.println("Di che lunghezza vuoi l'array? "); while(!input.hasNextInt()){ input.next(); System.out.println("Immetti un intero."); } int n = input.nextInt(); nuovoarray = new int[n]; for(int i = 0; i < n; i++){ System.out.print("Immetti l'elemento n "+i+":"); nuovoarray[i] = input.nextInt(); } return nuovoarray; } /* Scrivere il corpo del metodo statico println per stampare i valori di un array di interi a. IL METODO E' STATO VISTO A LEZIONE. POTRA' ESSERE USATO IN FUTURO OGNI VOLTA CHE SI VOGLIANO STAMPARE ARRAY DI INTERI. */ public static void println(int [] a){ System.out.println("l' array e' : "); int n = a.length; for(int i = 0; i < n; i++){ System.out.print(a[i] + ""); } System.out.println(); } /* Analogamente a quanto appena fatto, si definiscano i metodi: public static double[] readDoubleArray() public static void println(double[] a) per leggere e scrivere array di doubles; Inoltre si definiscano: public static String[] readStringArray() public static void println(String[] a) per leggere e scrivere array di stringhe; ANCHE QUESTI METODI POTRANNO ESSERE USATI NEGLI ESERCIZI FUTURI */ public static double[] readDoubleArray(){ double [] nuovoarray1; System.out.println("Di che lunghezza vuoi l'array? "); while(!input.hasNextInt()){ input.next(); System.out.println("Immetti un intero."); } int a = input.nextInt(); nuovoarray1 = new double[a]; for(int i = 0; i < a; i++){ System.out.print("Immetti l'elemento n "+i+":"); nuovoarray1[i] = input.nextInt(); } return nuovoarray1; } public static void println(double[] a){ System.out.println("l'array e' : "); double n = a.length; for(int i = 0; i < n; i++){ System.out.println(a[i] + ""); } System.out.println(); } public static String[] readStringArray(){ String [] nuovoarray2; System.out.println("Di che lunghezza vuoi l'array? "); while(!input.hasNextInt()){ input.next(); System.out.println("Immetti un intero."); } int a = input.nextInt(); nuovoarray2 = new String[a]; for(int i = 0; i < a; i++){ System.out.println("Immetti l'elemento n" + i + " : "); nuovoarray2[i] = input.next(); } return nuovoarray2; } public static void println(String[] a){ System.out.println("l'array e' : "); int n = a.length; for(int i = 0; i < n; i++){ System.out.println(a[i] + ""); } System.out.println(); } } Codice:
/** Gli oggetti di questa classe sono coppie, composte di un intero e una stringa. */ public class Coppia { private int i; private String s; // NON INTRODURRE NESSUN COSTRUTTORE! // Si usa il costuttore di default. public int getI() { return i; } public String getS() { return s; } public void setI(int i) { this.i = i; } public void setS(String s) { this.s = s; } /**Da completare il metodo toString che metta sotto forma di stringa i valori dell'oggetto.*/ public String toString(){ return "Colore : " + s + " Numero volte : " + i; } } Codice:
/** Questa classe usa i metodi readStringArray() e println(String[] a) di ArrayUtil. Controllare la corrispondenza dei nomi di questi metodi coi nomi dei metodi della VOSTRA classe ArrayUtil. Usa inoltre la classe Coppia. */ import java.util.*; import static java.lang.System.*; public class EseDic1{ public static void main(String [] args) { Scanner tastiera = new Scanner(in); // (1) Dichiarare un array di stringhe,chiamato arraystringhe, e riempirlo // con parole a piacere // usando il metodo readStringArray() di ArrayUtil. String[] arraystringhe = ArrayUtil.readStringArray(); // (2) Richiamare opportunamente il metodo che avrete completato qui sotto // e stamparne il risultato, stampando ANCHE l'array con l' opportuna // println. Coppia a = parolaPiuFrequente(arraystringhe); System.out.println(a); ArrayUtil.println(arraystringhe); } // fine main /** (3) Definire il metodo statico indicato qui sotto. */ /** Il metodo parolaPiuFrequente() prende come argomento un array di stringhe, conta le occorrenze delle stringhe contenute nell'array (cioe` conta il numero di volte in cui una stringa compare nell'array) e restituisce una coppia formata dalla stringa che ha il maggior numero di occorrenze *contigue* e dal numero di occorrenze della stringa stessa. Se tutte le stringhe hanno lo stesso numero di occorrenze il metodo restituisce la coppia <"", 0>. Ad esempio, dato l'array <"bianco", "blu", "blu", "rosso", "rosso", "rosso", "verde">, il metodo restituira' la coppia <"rosso", 3>. -Suggerimento- Dovete utilizzare quattro variabili, la prime due servono rispettivamente per memorizzare la stringa correntemente esaminata e per contare via via le sue occorrenze, le seconde due servono rispettivamente per memorizzare la stringa che occorre di piu` fino a quel momento e il numero di volte in cui occorre. Alla fine, nelle seconde due avremo il risultato che va messo dentro la Coppia risultato. */ public static Coppia parolaPiuFrequente(String [] r) { String a = ""; String b = ""; int c = 0; int d = 0; for(int i = 0; i < r.length - 1; i++){ a = r[i]; if(a.equals(r[i]) && a.equals(r[i+1])){ c++; b = a; d = c; } } Coppia miaCoppia = new Coppia(); miaCoppia.setS(b); miaCoppia.setI(d); return miaCoppia; } } e poi quando inserisco(rosso, rosso, rosso) mi stampa sempre il colore rosso e numero di volte 2, al posto di "" e 0;cosa posso fare, è giusto il codice da me inserito?grazie mille a tutti |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jul 2006
Città: Bergamo
Messaggi: 401
|
Da quanto ho capito ti serve un metodo che preso in input un array di stringhe ti ritorna la stringa ripetuta più volte in quell'array.
Dai un occhiata a questi metodi che fanno quello che ti serve in modi differenti. Codice:
public static String maxOccurrency(String[] s) { String parola = ""; int maxOccurrency = 0; int count = 0; List<String> list = Arrays.asList(s); for(String item : list) { count = Collections.frequency(list, item); parola = count > maxOccurrency ? item : parola; maxOccurrency = count > maxOccurrency ? count : maxOccurrency; } return parola; } public static String maxOccurrencyRegEx(String[] s) { String parola = ""; String trasformedArray = ""; for(String item : s) trasformedArray += item; Pattern pattern; Matcher matcher; int count = 0; int maxOccurrency = 0; for(String item : s) { pattern = Pattern.compile(item); matcher = pattern.matcher(trasformedArray); while(matcher.find()) count++; parola = count > maxOccurrency ? item : parola; maxOccurrency = count > maxOccurrency ? count : maxOccurrency; count = 0; } return parola; }
__________________
iMac 27" 5K |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:40.