
PROBLEMA CON UN MÉTODO DE ENTRADA PARA UN STRING
Publicado por Fco. Javier (3 intervenciones) el 06/05/2017 18:19:25
Hola a todos. Soy principiante en programación así que puede que este problema no sea muy grave.
Estoy haciendo un ejercicio que me pide crear una pequeña agenda electrónica en Java. El ejercicio está extraido del libro "Aprende a programar con Java" de Paraninfo.
El problema está en que al elegir la opción 1 en el menú (Nuevo contacto). Tengo el siguiente problema:

Os doy el código fuente:
Si os dais cuenta, he escrito el método de entrada nextLine para el String, pero Java le hace el mismo caso que
a una pared o incluso menos:
Alguna solución? Gracias!
Estoy haciendo un ejercicio que me pide crear una pequeña agenda electrónica en Java. El ejercicio está extraido del libro "Aprende a programar con Java" de Paraninfo.
El problema está en que al elegir la opción 1 en el menú (Nuevo contacto). Tengo el siguiente problema:

Os doy el código fuente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
import java.util.Scanner;
/*
* Diseñar una aplicación que se comporte como una pequeña agenda. Mediante un menú
* el usuario podrá elegir entre:
* 1) añadir un nuevo contacto (nombre y telefono), siempre y cuando la agenda no
* esté llena
* 2) buscar el teléfono de un contacto partiendo de su nombre
* 3) mostrar la información de todos los contactos ordenados alfabéticamente
* mediante el nombre
* En la agenda guardaremos el nombre y el teléfono de un máximo de 20 contactos.
*/
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner S = new Scanner(System.in);
boolean end = false;
boolean orderList=false;
int option;
String[] contactName = new String[20];
int[] contactNumber = new int[20];
int contactCounter=0;
do{
System.out.println("AGENDA 1.0: ");
System.out.println("1. Nuevo contacto");
System.out.println("2. Buscar telefono contacto");
System.out.println("3. Mostrar contactos alfabéticamente");
System.out.println("4. Salir");
System.out.print("Elige una opción: ");
boolean repeatWhile;
do{
repeatWhile=false;
option = S.nextInt();
if(option<1&&option>4){
System.out.print("Error, escribe de nuevo: ");
repeatWhile=true;
}
}while(repeatWhile);
switch(option){
case 1:
if(contactCounter<20){
System.out.println("Escribe el nombre del contacto:");
contactName[contactCounter] = S.nextLine();
do{
repeatWhile=false;
System.out.println("Escribe el número del contacto:");
contactNumber[contactCounter] = S.nextInt();
if(contactNumber[contactCounter]<0){
System.out.print("\nERROR: Valor no válido - ");
}
}while(repeatWhile);
System.out.println("Se ha guardado el número \""+contactNumber[contactCounter]+"\" para \""+contactName[contactCounter]+"\".");
contactCounter++;
orderList=true;
}else{
System.out.println("ERROR: Hay 20 contactos, no se pueden poner más.");
}
break;
case 2:
boolean nameFound=false;
char retry = 0;
do{
System.out.println("Escribe el nombre del contacto a buscar: ");
String nameToFind = S.nextLine();
int resultCount=1;
System.out.println("Resultados encontrados para \""+nameToFind+"\": ");
for(int i=0; i<20; i++){
if(contactName[i]==nameToFind){
nameFound=true;
System.out.println("\t"+resultCount+") "+contactNumber[i]);
resultCount++;
}
}
if(!nameFound){
do{
repeatWhile=false;
System.out.println("No se ha encontrado ninguna coincidencia. ¿Reintentar (s/n)?");
retry = S.nextLine().charAt(0);
if(retry != 's' && retry != 'n'){
repeatWhile=true;
System.out.print("ERROR: Responde correctamente -");
}
}while(repeatWhile);
}
}while(!nameFound && retry == 's');
break;
case 3:
if(orderList){
boolean isExchange=true;
String auxName; int auxNumber;
while(isExchange){
isExchange=false;
for(int i=0; i<20-1; i++){
if(contactName[i].compareTo(contactName[i+1])>0){
isExchange=true;
auxName=contactName[i];
contactName[i]=contactName[i+1];
contactName[i+1]=auxName;
auxNumber=contactNumber[i];
contactNumber[i]=contactNumber[i+1];
contactNumber[i+1]=auxNumber;
}
}
}
orderList=false;
}
System.out.println("LISTA DE CONTACTOS");
for(int i=0; i<contactCounter; i++){
System.out.println("\t"+i+") "+contactName[i]+": "+contactNumber[i]);
}
break;
case 4:
end = true;
break;
}
System.out.println();
}while(!end);
}
}
Si os dais cuenta, he escrito el método de entrada nextLine para el String, pero Java le hace el mismo caso que
a una pared o incluso menos:
1
2
3
4
5
6
7
8
9
10
11
System.out.println("Escribe el nombre del contacto:");
contactName[contactCounter] = S.nextLine();
do{
repeatWhile=false;
System.out.println("Escribe el número del contacto:");
contactNumber[contactCounter] = S.nextInt();
if(contactNumber[contactCounter]<0){
System.out.print("\nERROR: Valor no válido - ");
}
}while(repeatWhile);
Alguna solución? Gracias!
Valora esta pregunta


0