vaya cabeza dura que fui en tener que crear otra variable. Pero creo que ahora si lo necesitare para los de la "Letra 1, Letra 2..."
prueba esto: (eliminamos la variable j)
public void SeparaCaracteres(){
for(int i = 0; i < num; i++){
System.out.println("Letra " + (i+1) + ": " + Main.data.substring(i, i+1));
}
}
Asi que en el main puedo escribir un menu... es que anteriormente (y leido) en el main debía tener la menor cantidad de código posible...
Si es cierto que el método main debería de contener la menor cantidad de código posible, pero no por eso vamos a delegar tareas propias del método main (método principal que dirige el programa) a otros métodos que deben de realizar solo lo que dicen que son o que hacen. Por ejemplo, un método para recibir una entrada de datos por teclado no debe de saludar al usuario,pedirle que escriba una frase y dar detalles al usuario sobre lo escrito, lo correcto es que el mensaje de saludo y de pedir que se escriba algo lo muestre el main y que el método entradaPorTeclado solo habilite el espacio de escritura. Todo debe de ser un equilibrio que iras puliendo conforme crescas como programador.
En la clase
SeparaCadena (ambas) encontramos la siguiente linea de código:
System.out.println("Letra " + (i+1) + ": " +
Main.data.substring(i, i+1));
Esto es un mal diseño de clase, la cabeza dirige al cuerpo pero el cuerpo no a la cabeza, la clase con main puede usar cualquier otra clase a su disposición, pero otras clases no deben de usar la clase con main.
Edito y comento tus 2 clases que usan un bucle for:
Clase SeparaCadena:import java.util.Scanner;
public class SeparaCadena {
//static int num; esta variable no es necesaria declararla ni estatica ni como variable de clase, mas bien sera una variable local al metodo SeparaCaracteres(String data);
public SeparaCadena(){}
public String lectura(){
Scanner lee = new Scanner(System.in);
return lee.nextLine();
}
public void separaCaracteres(String data){//Agregamos el parámetro String data, que sera lo escrito por el usuario
int num = data.length();
for(int i = 0; i < num; i++){
System.out.println("Letra " + (i+1) + ": " + data.substring(i, i+1)); //Eliminamos la variable j, y aprovechamos al máximo la variable i
}
}
}
Clase Main:public class Main {
//static String data; esta variable no es necesaria declararla estatica ni como campo de clase, mas bien sera una variable local al método main
public static void main (String[]args){
String data;
SeparaCadena operacion = new SeparaCadena();
System.out.println("Ingresa una frase:\n");
data = operacion.lectura();
System.out.println("");
operacion.separaCaracteres(data);
}
}
Saludos!!