|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Sep 2007
Messaggi: 19
|
[Risolto][Java]Problema risoluzione metodo
Ciao a tutti sto svolgendo un esercizio e non riesco a fare un metodo, vi posto le due classi che servono per l'esercizio!
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 triple, composte da tre interi.
*/
public class Tripla {
private int i;
private int j;
private int k;
// NON INTRODURRE NESSUN COSTRUTTORE!
// Si usa il costuttore di default.
public int getI() {
return i;
}
public int getJ() {
return j;
}
public int getK() {
return k;
}
public void setI(int i) {
this.i = i;
}
public void setJ(int j) {
this.j = j;
}
public void setK(int k) {
this.k = k;
}
/**Da completare il metodo toString che metta sotto forma di stringa i valori dell'oggetto.*/
public String toString(){
return (" " + i + " " + j + " " + k);
}
}
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 Tripla.
*/
import java.util.*;
import static java.lang.System.*;
public class Esame{
static Scanner tastiera = new Scanner(in);
public static void main(String [] args) {
// (1) Dichiarare un array di stringhe,chiamato mioarray, e riempirlo
// con stringhe a piacere
// usando il metodo readStringArray() di ArrayUtil.
String[] mioarray = ArrayUtil.readStringArray();
// (2) Richiamare opportunamente il metodo che avrete completato qui sotto
// e stamparne il risultato, stampando ANCHE l'array con l' opportuna
// println.
Tripla a = treMin(mioarray);
System.out.println("La lunghezza delle stringhe e' : " + a);
ArrayUtil.println(mioarray);
} // fine main
/** (3) Definire il metodo statico indicato qui sotto.
*/
/** Il metodo treMin prende come argomento un array di stringhe,
e restituisce un oggetto Tripla che contiene le tre lunghezze delle stringhe più corte.
Ad es. con: {a,abcd,bc,ss,sssss,irtsd,uuuu}
si ottiene: <1,2,2>.
Se ci sono meno di tre elementi nell'array si mettano degli 0
nei posti opportuni,
ad es. con: {aa,s}
si ottiene: <2,1,0>.
Per svolgere l'esercizio,si usino tre variabili min1, min2, min3 per memorizzare rispettivamente
la lunghezza della stringa più corta, quella della seconda stringa più corta ecc. tra le stringhe esaminate fino a quel momento.
*/
public static Tripla treMin(String [] a) {
int min1 = 0;
int min2 = 0;
int min3 = 0;
int l;
for(int i = 0; i < a.length; i++){
l = a[i].length();
if(l < min1){
min3 = min2;
min2 = min1;
min1 = l;
}
else if(l < min2){
min3 = min2;
min2 = l;
}
else if(l < min3){
min3 = l;
}
}
Tripla miaTripla = new Tripla();
miaTripla.setI(min1);
miaTripla.setJ(min2);
miaTripla.setK(min3);
String tmp = miaTripla.toString();
System.out.println(tmp);
return miaTripla;
}
}
Ultima modifica di maghico : 06-05-2008 alle 17:48. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Modifica il titolo come da regolamento.
Il problema è dovuto al fatto che hai inizializzato i 3 min a zero, quindi nel ciclo non capiterà mai che la lunghezza di una stringa sia minore di uno di questi 3 valori. |
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Sep 2007
Messaggi: 19
|
per il titolo devo mettere [Java]?
l'errore l'ho capito però l'esercizio mi chiede che se vengono messe due stringhe mi darà solo la lunghezza di quelle due e al posto della terza io avrò il valore 0! |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Il titolo adesso va bene.
Provo a proporti una soluzione: Inizializza le variabili min a Integer.MAX_VALUE Alla fine del metodo, quando copi i valori dei min nella Tripla fai una cosa del genere: Codice:
miaTripla.setI(a.length>=1?min1:0); miaTripla.setJ(a.length>=2?min2:0); miaTripla.setK(a.length>=3?min3:0); |
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Sep 2007
Messaggi: 19
|
ok,il problema è risolto...mi puoi spiegare gentilmente cosa significa questo passaggio:
Codice:
miaTripla.setI(a.length>=1?min1:0); miaTripla.setJ(a.length>=2?min2:0); miaTripla.setK(a.length>=3?min3:0); |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2780
|
Sì, quello che ho usato è l'operatore ternario e si utilizza in questo modo:
variabile=(espr-booleana)?espr1:espr2; Se espr-booleana è true viene assegnato a variabile il valore espr1, altrimenti il valore espr2. |
|
|
|
|
|
#7 |
|
Junior Member
Iscritto dal: Sep 2007
Messaggi: 19
|
scusa se rispondo adesso, mi hai chiarito tutti i dubbi!grazie mille...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:06.



















