Составьте список букв в строке в Java - PullRequest
0 голосов
/ 11 сентября 2018

Я новичок в Java, и я учусь играть с опцией замены. Я пытаюсь сделать программу, которая начинается с меню, которое дает 3 варианта.

  1. Написать строку
  2. Составляет список символов в строке в порядок (Пример: Буква 1: H Буква 2: E Буква 3: L Буква 4: L Буква 5: O) и на и он скажет количество символов и пробелов в Строка имеет.
  3. Выход

Я сделал этот код:

public class LEtras {
static String frase="" , letra="",salida="";
static int Espacios=0, noletras=0;
public static void Frase() {

    frase = JOptionPane.showInputDialog("Ingrese una frase");
    int x = frase.length();
     for(int i=0;i<x;i++){
        letra = frase.substring(x);
                if(" ".equals(letra)){
                     Espacios++;
                } else {
                   noletras++;
        }             
    }
     Menu();
}
public static void imprimir() {
    int f = frase.length();
             for(int i=0;i<f;i++){
                 letra = frase.substring(f);
                 salida+="Letra " + (i+1) + ": "+letra;
             }
             JOptionPane.showMessageDialog(null,salida,"Salida",2);
}
public static void Menu(){
          int op = 0;
    do{
        op = Integer.parseInt(JOptionPane.showInputDialog("Menu principal" + "\n 1)Frase 2)Datos 3)Salir"));
        switch(op){
            case 1 : Frase();break;
            case 2 : imprimir();break;
            default : JOptionPane.showMessageDialog(null,"SALIENDO","SALIR",2); break;
        }
    }while(op<=2);
}
public static void main(String[] args) {
    Menu();
}

У меня есть несколько проблем с этим кодом, во-первых, во время составления списка, который он просто печатает (Letra 1: Letra2: Letra3 :), он не печатает символ в строке. Также я не знаю как в конце строки во втором варианте я собираюсь указать количество пробелов и количество символов. И я также с этой ошибкой:

Exception in thread "main" java.lang.NumberFormatException: null
at java.lang.Integer.parseInt(Integer.java:542)
at java.lang.Integer.parseInt(Integer.java:615)
at Metodos.LEtras.Menu(LEtras.java:43)
at Metodos.LEtras.main(LEtras.java:52)

И я не знаю, что это значит, так как я новичок в программировании. Извините за плохой английский. И спасибо за вашу помощь

1 Ответ

0 голосов
/ 11 сентября 2018

Вы должны быть очень осторожны при работе с индексами в Strings. Вы должны помнить, что индекс символа начинается с 0, а последний символ строки падает до индекса, который меньше длины строки на 1.

Поскольку вы пишете int f = frase.length();, это означает, что f - это длина вашей строки. После этого попытайтесь найти подстроку в следующем выражении:

letra = frase.substring(f);

Итак, здесь значение в letra будет нулевым, потому что при индексе f в вашей строке ничего не будет (так как ваша строка заканчивается на f-1). Вот почему вы получаете Letra 1: Letra2: Letra3 в качестве вывода.

Аналогичная проблема возникает при вызове imprimir() в варианте 2. Вы делаете:

letra = frase.substring(f);
salida+="Letra " + (i+1) + ": "+letra;

Опять тебе летра будет null. Поскольку i+1 будет целым числом, и вы пытаетесь объединить с ним ноль, поэтому вы сталкиваетесь с NumberFormatException

...