|
|||||||
|
|
|
![]() |
|
|
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: 00:11.



















