Estoy intentando escribir un programa que cuando un usuario ingresa una palabra, luego un índice, lo que hace que el programa muestre el carácter en el índice dado, o da un error al decirle al usuario que el índice dado es demasiado grande. Cada vez que ejecuto el código y pongo un índice que es demasiado grande, recibo un mensaje de error de Java. Cualquier ayuda es apreciada!

import java.util.Scanner;
public class scratch {
    public static void main(String[] args) {

        Scanner reader = new Scanner(System.in);
        System.out.printf("Enter a word:");
        String word = reader.next();

        Scanner letter = new Scanner (System.in);
        System.out.printf("Enter an index:");
        int index = letter.nextInt();

        char inputIndex = word.charAt(index);
        int length = word.length();
        if (index < length - 1 ) {
            System.out.printf("In word \"%s\", the letter at index"
                + " \"%2d\" is \'%c\'.\n"
                ,word, index, inputIndex );

        } else {
            System.out.printf("too big");   
        }
        reader.close();
        letter.close();
    }
}

Mensaje de error: Excepción en el hilo "main" java.lang.StringIndexOutOfBoundsException: Índice de cadena fuera del rango: 3 en java.base / java.lang.StringLatin1.charAt (Fuente desconocida) en java.base / java.lang.String.charAt (Fuente desconocida) en scratch.main (scratch.java:15)

0
gloob 17 sep. 2018 a las 15:02

3 respuestas

La mejor respuesta

Debe llamar a charAt después de la verificación:

if (index < length ) {
    char inputIndex = word.charAt(index); // move this line here
    System.out.printf("In word \"%s\", the letter at index"
            + " \"%2d\" is \'%c\'.\n"
            ,word, index, inputIndex );

} else {
    System.out.printf("too big");   
}

La excepción es causada por tratar de obtener un carácter en un índice que es demasiado grande. Entonces deberías intentar obtener el personaje después de asegurarte de que el índice no sea demasiado grande, ¿verdad?

6
Sweeper 17 sep. 2018 a las 12:12

En primer lugar, use un objeto Scanner. También hay una corrección en la condición if. index debe ser menor o igual que length-1.

Ponga char inputIndex = word.charAt(index); dentro de la declaración if.

Pruebe esto :

import java.util.*;



 public class Scratch { 

 public static void main(String[] args) {

    Scanner reader = new Scanner(System.in);
    System.out.printf("Enter a word:");
    String word = reader.next();

    //Scanner letter = new Scanner(System.in);
    System.out.printf("Enter an index:");
    int index = reader.nextInt();
    int length = word.length();
    if (index < length - 1) {
        char inputIndex = word.charAt(index);
        System.out.printf("In word \"%s\", the letter at index" + " \"%2d\" is \'%c\'.\n", word,
            index, inputIndex);

    } else {
        System.out.printf("too big");
    }
    reader.close();
    }
}

PD: El nombre de la clase debe ser Scratch, no scratch (convención de Java).

1
patidarsnju 17 sep. 2018 a las 12:18

Este es un uso perfecto para un bloque try-catch. Intente acceder al índice, capture la excepción resultante si hay un error e imprima desde allí:

char inputIndex;
try {
    inputIndex = word.charAt(index);
} catch(IndexOutOfBoundsException e) {
    System.out.println("Out of bounds!");
}
1
Paul Benn 17 sep. 2018 a las 12:10