Programma in java
ciao a tutti, devo risolvere un esercizio in java e cioè: data una sequenza terminata da due numeri uguali, diversi da 0, scrivere un programma che conti gli zeri.
Io ho provato ha risolverlo così, ma c'è qualche piccolo errore perchè non mi aggiorna le x in y.
import java.util.*;
public class potenza {
public static void main(String[] args) {
Scanner k = new Scanner(System.in);
System.out.println("inserire una sequenza");
int x = k.nextInt();
int y = k.nextInt();
int cont=0;
if (x==0){
cont++;
}
while (x!=y || x==0) {
if (y==0) {
cont++;
x=y;
y = k.nextInt();
} else {
x=y;
}
System.out.println("vi sono" + cont + "zeri");
}
}
}
Sapete dirmi in cosa sbaglio?
Io ho provato ha risolverlo così, ma c'è qualche piccolo errore perchè non mi aggiorna le x in y.
import java.util.*;
public class potenza {
public static void main(String[] args) {
Scanner k = new Scanner(System.in);
System.out.println("inserire una sequenza");
int x = k.nextInt();
int y = k.nextInt();
int cont=0;
if (x==0){
cont++;
}
while (x!=y || x==0) {
if (y==0) {
cont++;
x=y;
y = k.nextInt();
} else {
x=y;
}
System.out.println("vi sono" + cont + "zeri");
}
}
}
Sapete dirmi in cosa sbaglio?
Risposte
Ci sono diverse cose che non mi convincono, intanto perchè quella istruzione int y=....? In quel modo fai inserire due volte all' utente una sequenza, mi pare di avere capito che serve fare questo lavoro solo la prima volta. Io lo farei così, vedi se è corretto:
Se hai dubbi chiedi pure.
import java.util.*; public class Potenza{ public static void main(String[] args) { Scanner k = new Scanner(System.in); System.out.println("inserire una sequenza"); String x=k.next(); int cont=0; for(int i=0; i<x.length(); i++) { if(x.charAt(i)=='0') cont++; } System.out.println("vi sono " + cont + " zeri"); } }
Se hai dubbi chiedi pure.
però così non dico al programma di fermarsi appena incontra due numeri uguali...Mi conta solo gli zeri...
I numeri uguali sono sempre due numeri alla fine della sequenza che ne indicano la conclusione?
se ho una sequenza del tipo 1 0 2 0 3 4 4 6, la sequenza si ferma a 3 perchè 4 e 4 sono due numeri uguali e non fanno leggere il 6 che c'è dopo. quindi il mio contatore deve aggiornarsi a 2
Mh.....così come ti sembra?
import java.util.*; public class Potenza{ public static void main(String[] args) { Scanner k = new Scanner(System.in); System.out.println("inserire una sequenza"); String x=k.next(); int zero=0; for(int i=0; i<x.length(); i++) { if(x.charAt(i)==x.charAt(i+1)&& i!=x.length()-1) break; if(x.charAt(i)=='0') zero++; } System.out.println("vi sono " + zero + " zeri"); } }
ma perchè usare le stringhe se si tratta di numeri? Oltretutto con la soluzione di sopra, si possono solo inserire numeri ad una cifra... e se uno volesse inserire numeri più grandi? E come distinguere un numero dall'altro se sono tutti attaccati? E poi l'istruzione break non è consigliata in genere.
Io propongo:
Io propongo:
public static void main(String args[]) { Scanner s = new Scanner(System.in); int zeri=0; System.out.println("Inserisci la sequenza di numeri"); int a=s.nextInt(); if(a==0) { zeri++; } int b=a; a=s.nextInt(); if(a==0) { zeri++; } while(!(a==b && a!=0)) { a=s.nextInt(); if(a==0) { zeri++; } b=a; } System.out.println(zeri); }