TOPIC

Runtime error (java)

Rafael Bellini asked 2 months ago

Não estou conseguindo encontrar o motivo deste erro, se aguém puder ajudar agradeço.

import java.util.Locale; import java.util.Scanner;

public class Main { public static void main(String[] args) {

    Locale.setDefault(Locale.US);
    Scanner sc = new Scanner(System.in);

    while (sc.hasNext()) {

        int n = Integer.parseInt(sc.nextLine());

        for (int i = 0; i < n; i++) {

            char[] s = sc.nextLine().toCharArray();

            for (int j = 0; j < s.length; j++)
                if (Character.isLetter(s[j]))
                    s[j] += 3;

            s = new StringBuilder(new String(s)).reverse().toString().toCharArray();

            for (int j = s.length / 2; j < s.length; j++) 
                s[j] -= 1;

            System.out.println(s);
        }

    }

    sc.close();
}

}

This topic was solved and cannot recieve new replies.

  • Tarcísio Mazur Junior replied 1 month ago

    O problema possui apenas um caso teste, portanto não há a necessidade do while. Retirando o mesmo e deixando apenas o for, seu código recebe AC!

    Por algum motivo sc.hasNext() continua retornando true após a última leitura.

  • Michelle Oliveira replied 1 month ago

    import java.util.Scanner;

    public class Main {

    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
    
    while (sc.hasNext()) {
    
        int n = Integer.parseInt(sc.nextLine());
    
        for (int i = 0; i < n; i++) {
    
            char[] s = sc.nextLine().toCharArray();
    
            for (int j = 0; j < s.length; j++)
                if (Character.isLetter(s[j]))
                    s[j] += 3;
    
            s = new StringBuilder(new String(s)).reverse().toString().toCharArray();
    
            for (int j = s.length / 2; j < s.length; j++) 
                s[j] -= 1;
    
            System.out.println(s);
        }
    
    }
    
    sc.close();
    }

    }

    eu fiz o teste do código ak tá rolando okay vc só tem que lemvrar que a primeira leitura do teclado tem que ser um número se ela não for gerará NumberFormatException, você pode prevenir da seguinte forma:

    import java.util.Scanner;

    public class Main {

    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
    
    while (sc.hasNext()) {
    int n = 0;
    while(n == 0) {

    try { n = Integer.parseInt(sc.nextLine()); } catch (NumberFormatException ex) {

    }
    }
    
        for (int i = 0; i < n; i++) {
    
            char[] s = sc.nextLine().toCharArray();
    
            for (int j = 0; j < s.length; j++)
                if (Character.isLetter(s[j]))
                    s[j] += 3;
    
            s = new StringBuilder(new String(s)).reverse().toString().toCharArray();
    
            for (int j = s.length / 2; j < s.length; j++) 
                s[j] -= 1;
    
            System.out.println(s);
        }
    
    }
    
    sc.close();
    }

    }