|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 364
|
[Java] Aiuto con programma "banale"
Salve ragazzi. Ho iniziato da pochissimo a programmare in java e ho per le mani questo esercizietto che dovrebbe essere banalissimo ma che non riesco a risolvere. Qualcuno mi può dare una mano? Grazie.
Ecco il testo: Scrivere un programma java che scriva per 100 volte una frase. Ogni frase deve essere numerata e il programma deve commettere otto differenti errori di stampa apparentemente casuali. Ovviamente mi blocco agli errori di stampa. Non riesco proprio a capire come inserirli |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
a questo punto prendi un indice a caso tra 0 e la lunghezza dell'array, estrai l'elemento e modifichi il valore con un char a caso e, se ti serve ancora una stringa per altre elaborazioni, usi il metodo valuesOf(). Detta così è uno schifo, ma a farla ci impieghi 30 secondi.. Se hai bisogno di chiarimenti scrivi pure! |
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 364
|
credo di aver capito il tuo suggerimento. appena mi rimetto sul codice ci provo. intanto grazie per l'aiuto
|
|
|
|
|
|
#4 | ||
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Quote:
Codice:
import java.util.ArrayList;
import java.util.List;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String x="Ciao mamma come mi diverto!";
List<Integer> righe= new ArrayList<Integer>();
for (int i = 0; i < 8; i++) {
int rigAGenerataACaso=0;
if(!righe.contains((rigAGenerataACaso=randomNumber(0,99))))
righe.add(rigAGenerataACaso);
}
char[] charArray = x.toCharArray();
for(int i=0;i<100;i++){
char[] copia=charArray.clone();
if(righe.contains(i)){
int rand=randomNumber(0,charArray.length);
copia[rand]=(char)(charArray[rand]+1);
}
System.out.println(copia);
}
}
public static int randomNumber(int min, int max) {
return min + (int)(Math.random() * (max - min));
}
}
Quote:
Ciao! |
||
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Nov 2011
Messaggi: 13
|
ciao!
spero di riuscire a rispondere alla tua domanda. bene quello che farei io è creare un array di dimensione 8 e tipo Error contenente le sottoclassi che trovi qui: http://docs.oracle.com/javase/1.4.2/...ang/Error.html inoltre crei una variabile chiamata top di valore 0 che indica il primo elemento nell'array. dunque ogni volta che vuoi stampare una errore prendi l'elemento all'indice TOP e incrementi top. quando stampi una errore puoi usare: printstacktrace |
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 364
|
Allora dopo ore e ore di elaborazione credo di essere riuscito a concludere qualcosa, prendendo spunto dai vostri suggerimenti. Questo è quello che ho fatto, dalle prove sembra funzionare
Codice:
/* Questo programma visualizza 100 volte la frase "Non devo spammare i miei amici"
* e inserisce in 8 frasi un errore casuale
*/
import java.io.*;
public class Punizione
{
public static void main (String[] args)
{
// Inizializzo la frase da visualizzare
String frase = "Non devo spammare i miei amici";
// Inizializzo il contatore
int contatore = 0;
// Creo un array che contenga tutte le 100 frasi
String[] Lista = new String[100];
for (;contatore<Lista.length;contatore++)
{
Lista[contatore] = frase;
}
int j=0;
int caso=0;
String[] FrasiErrate = new String[8]; //In questo array andranno 8 frasi già errate
while (j<8)
{
char fraseErrata[] = frase.toCharArray();
int errore = (int)(Math.random() * fraseErrata.length);
fraseErrata[errore] = (char)(Math.random());
FrasiErrate[j] = new String (fraseErrata);
j++;
}
// Sostituisco in 8 posizioni a caso le frasi errate create
j=0;
int[] estratti = new int[8];
while (j<8)
{
caso = 1 + (int)(Math.random() * 100);
Lista[caso] = FrasiErrate[j];
estratti[j] = caso;
j++;
}
for (int i=0;i<Lista.length;i++)
{
System.out.println (i+1 + "." + Lista[i]);
}
}
}
|
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Sep 2003
Città: Tradate
Messaggi: 396
|
Secondo me (per una pura questione di stile) conviene che nel primo for l'inizializzazione della variabile vada nel ciclo, quindi: for (int contatore=0;contatore<Lista.length;contatore++), e nei 2 cicli seguenti secondo me è meglio utilizzare il for, in linea di massima la vedo così: se so quante volte deve essere eseguito il ciclo, metto il for, in modo che il numero di volte sia ben visibile, altrimenti se ci sono condizioni di uscita complesse utilizzo il while!
Per il resto, se funziona, va bene! Non hai scongiurato però il pericolo che escano 2 errori uguali, e quindi 2 frasi con lo stesso errore: il testo richiedeva che tutte le frasi con errore fossero diverse! |
|
|
|
|
|
#8 |
|
Senior Member
Iscritto dal: Aug 2007
Messaggi: 364
|
hai ragione.potrei inserire un controllo su ognuno degli 8 errori estratti, ma forse il programma diventerebbe illeggibile...
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:30.




















