De minúscula a mayúscula

Soy nuevo en este sitio y espero puedan ayudarme.

La cuestión es que tengo que realizar un ejercicio que dice:

Hacer una cadena mediante teclado después convertir todo el texto en minúscula con
(es = es.toLowerCase()) extraiga un array de caràcters (char[] v = es.toCharArray()).

Y luego ha de modificar el contenido de l'array v de la siguente manera: "Hasta aquí ningún problema" Pero luego dice;
Pasar les vocales a mayúsculas si se dan dos condiciones:
a)
Si tiene una consonante en la izquierda y en la derecha a,
<br class="scayt-misspell" data-scayt_word="consonants" data-scaytid="356" />b)
ocupa una posición par, 2, 4, 6...
Por ultimo, ha de pasar l'array a String (es = new String(v)) i ha
De mostrar-lo por pantalla.

Llevo un par de días intentando hacer este ejercicio pero no lo consigo.

El problema es que no se ni siquiera cambia un solo carácter.

Quiero decir, como ejemplo tengo:

"Esto es uNa cadena a convertir" que he pasado a minúscula,

"esto es una cadena a convertir"

Pues después de este punto soy incapaz de poner una sola letra en mayúscula, por ejemplo:

"esto es uNa cadena a convertir"

Puedo convertir un solo carácter, pero no dentro de una cadena,

Puede alguien ayudarme de alguna forma.

Respuesta
2

Por lo que entiendo lo tienes ya todo hecho, ¿lo único que te falta es poder poner a mayúscula un colo carácter de la cadena?

En tal caso, como hemos visto, ya tienes un array de caracteres con todos los caracteres, y deduzco que ya sabes que carácter hay que pasar a mayúscula, pero no sabes como.

Lo que tienes que hacer es, ir recorriendo el array e ir mirando si la letra cumple las condiciones. Una vez tengas una candidata, por ejemplo, la letra que ocupa la posición 5 en el array, es tan simple como:

v[4] = Character.toUpperCase(v[4]);

Espero que sea esto lo que necesitas, si requieres de mas información coméntamelo y te completo la respuesta.

primero de todo muchas gracias por contestar.

He utilizado lo que me comentaste y funciona a la perfección. Pero si no es mucho abusar, quiero preguntarte otra cosa del mismo programa.

El programa pide que pase a mayúscula si es una vocal con consonantes antes y después y que ocupe una posición par.

El programa pide que pase a mayúscula si es una consonante con vocales antes y después y con posición impar.

He realizado el programa, pero solo consigo que funcione una o la otra posición, sabrías el porque?

pongo el código:

public class Main {
/
public static void main(String[] args) {
String sPalabra ="En un lugar de la Manacha";
sPalabra = (sPalabra.toLowerCase());
char[] carácter = sPalabra.toCharArray();
for(int i=1;i<sPalabra.length()-1;i++) {
boolean a=false;
boolean b=false;
boolean c=false;
boolean d=false;
boolean A=false;
boolean B=false;
boolean C=false;
boolean D=false;
if ((carácter!='a') && (carácter!='e') && (carácter!='i') && (carácter!='o') && (carácter!='u')){
a=true;
}
if ((carácter[i-1]=='a') || (carácter[i-1]=='e') || (carácter[i-1]=='i') || (carácter[i-1]=='o') || (carácter[i-1]=='u')){
b=true;
}
if ((carácter[i+1]=='a') || (carácter[i+1]=='e') || (carácter[i+1]=='i') || (carácter[i+1]=='o') || (carácter[i+1]=='u')){
c=true;
}
if (i%2==0){
d=true;
}
if ((carácter=='a') || (carácter=='e') || (carácter=='i') || (carácter=='o') || (carácter=='u')){
A=true;
}
if ((carácter[i-1]!='a') && (carácter[i-1]!='e') && (carácter[i-1]!='i') && (carácter[i-1]!='o') && (carácter[i-1]!='u')&&(carácter[i-1]!=' ') ){
B=true;
}
if ((carácter[i+1]!='a') && (carácter[i+1]!='e') && (carácter[i+1]!='i') && (carácter[i+1]!='o') && (carácter[i+1]!='u')&&(carácter[i+1]!=' ') ){
C=true;
}
if (i%2!=0){
D=true;
}
if ((a==true && b==true && c==true && d==true)||(A==true && B==true && C==true && D==true)){
carácter= Character.toUpperCase(carácter);
}
}
System.out.println(carácter);
}
}

Pues como he dicho no consigo que funcionen las dos condiciones, alguna idea?

Gracias

He simplificado un poco el programa, para que sea un poco mas claro;

public class Main {
public static void main(String[] args) {
String sPalabra ="En un lugar de la Manacha";
sPalabra = (sPalabra.toLowerCase());
char[] carácter = sPalabra.toCharArray();
for(int i=1;i<sPalabra.length()-1;i++) {
boolean a=false;
boolean b=false;
if ((carácter!='a') && (carácter!='e') && (carácter!='i') && (carácter!='o') && (carácter!='u')){
if ((carácter[i-1]=='a') || (carácter[i-1]=='e') || (carácter[i-1]=='i') || (carácter[i-1]=='o') || (carácter[i-1]=='u'))
if ((carácter[i+1]=='a') || (carácter[i+1]=='e') || (carácter[i+1]=='i') || (carácter[i+1]=='o') || (carácter[i+1]=='u'))
if (i%2==0)
a=true;
}
if ((carácter=='a') || (carácter=='e') || (carácter=='i') || (carácter=='o') || (carácter=='u')){
if ((carácter[i-1]!='a') && (carácter[i-1]!='e') && (carácter[i-1]!='i') && (carácter[i-1]!='o') && (carácter[i-1]!='u')&&(carácter[i-1]!=' ') )
if ((carácter[i+1]!='a') && (carácter[i+1]!='e') && (carácter[i+1]!='i') && (carácter[i+1]!='o') && (carácter[i+1]!='u')&&(carácter[i+1]!=' ') )
if (i%2!=0)
b=true;
}
if ((a==true)||(b==true)){
carácter= Character.toUpperCase(carácter);
}}
System.out.println(carácter);
}}

En primer lugar, un par de recomendaciones:

1) Usa variables mas descriptivas, no uses 'a' y 'b' como nombre de variables, porque en un programa mas complejo te perderás, usa, por ejemplo, condicion1, y condicion2.

2) Tampoco uses NUNCA acentos en el código, puede darte problemas a posterior y también problemas si ejecutas el código en una máquina linux, perdiendo así la gracia del multiplataforma de java.

3) Usa plurales para los arrays, en este caso, caracteres, te sera mas visual, sino, te puede pasar cosas como que el código que me has pasado, usas la variable carácter tanto como un char como un array.

4) Te he modificado toda la serie de condiciones por un método del String, para ello, necesitas un String con las vocales.

Después de comentar esto, espero haber entendido bien el programa, te pongo el código modificado, no acostumbro a resolver ejercicios enteros, pero esta claro que te lo has trabajado así que haré una excepción.

Lo único que no me ha quedado claro, es si se tienen que dar las dos condiciones o solo con una basta, yo he hecho el programa con que solo con una baste, sino la modificación es mínima.

public static void main(String[] args) {
 //Preparamos un string con las vocales
 String vocales = "aeiou";
 String sPalabra = "En un lugar de la Manacha";
 sPalabra = (sPalabra.toLowerCase());
 char[] caracteres = sPalabra.toCharArray();
 //El bucle subimos de 2 en 2 para estar siempre en posiciones pares
 for (int i = 1; i < sPalabra.length() - 1; i++) {
 char caracterActual = caracteres;
 boolean condicion1 = false;
 boolean condicion2 = false;
 //Una de las condiciones, (la 'b' que me pusistes) es simplemente que sea una vocal y que este en una posicion par
 if (i % 2 != 0 && vocales.indexOf(caracterActual) != -1) {//la funcion indexOf, nos devuelve la posicion en el string de vocales del caracter que le pasamos, o -1 si no lo encuentra
 condicion1 = true;
 }
//La otra condicion (la 'a' que me pusistes) es que sea una vocal, que este entre consonantes.
 char caracterAnterior = caracteres[i - 1];
 char caracterPosterior = caracteres[i + 1];
 if (vocales.indexOf(caracterActual) != -1 //miramos que el caracter sea vocal
&& ! Character. IsWhitespace(caracterAnterior) //comprobamos que el caracter anterior NO sea un espacio
 && !Character.isWhitespace(caracterPosterior) //comprobamos que el caracter posterior NO sea un espacio
 && vocales.indexOf(caracterAnterior) == -1 //comprovamos que el caracter anterior NO este en la lista de vocales
 && vocales.indexOf(caracterPosterior) == -1) { //Finalmente, comprovamos que el caracter posterior NO este en la lista de vocales
 condicion2 = true;
 }
 if (condicion1 || condicion2) {
 caracteres = Character.toUpperCase(caracterActual);
}
}
 System.out.println(caracteres);
}

Espero haber aclarado del todo tus dudas, un placer

Me he dado cuenta, de algo que es lo que te debería haber pasado a ti también en el código que me has dado y veía "incorrecto" y es que cuando hay un [ i ] no lo pone, vamos, en muchos sitios donde pone caracteres, tendría que ser caracteres[ i ] (sin espacios)

Muchas gracias por tu tiempo y consejos.

Estoy intentado compilar tu programa en Netbeans y me salen errores en la linea;

char caracterActual= caracteres;

y

caracteres = Character.toUpperCase(caracterActual);

Seguro es una tontería, pero no consigo compilarlo.

El programa tiene que hacer las 2 condiciones a la vez.

En el mio si pongo al final la condición a==true, funciona perfectamente

si pongo al final la condición b==true, funciona perfectamente

Pero si pongo (a==true)||(b==true) solo funciona una condición

Ejemplo funcionando las dos condiciones

Entrada :"En un lugar de la Mancha"
Salida: "en un lUGAr de la mAncha"

No se donde esta el fallo en mi programa, de todas forma seguiré mirando el tuyo, haber si veo donde esta el problema.

La verdad es que este programa me esta superando, es la primera vez que me he quedado, estancado de esta forma, pero supongo es parte de aprendizaje.

Gracias

Ya he conseguido que funcione tu programa, pero no es lo que pedía el programa. Me disculpo por no explicarme correctamente.

El programa pide dos condiciones:

1 pasar a mayúsculas todas las vocales que estén entre consonantes y que ocupen una posición par.

2 pasar a mayúsculas todas la consonantes que estén entre vocales y que ocupen una posición impar.

He estado haciendo algunas pruebas utilizando tu programa de base pero ni así lo he conseguido. Me pasa exactamente lo mismo que en el mio. Funciona solamente con una condición, pero con las dos nada.

No se que hacer.

Muchas gracias por tus repuesta y el tiempo dedicado.

Finalmente conseguí hacer el ejercicio. El problema era que no ponía las vocales también en mayúsculas. Lo que mas rabia me da es que lo había comprobado, pero mal por lo visto.

Tu respuesta inicial de mi primera pregunta a sido perfecta y el problema puesto por ti me ha sido de gran utilidad.

Muchas gracias.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas