amstel Posted March 13, 2015 at 09:46 PM Report Share #579355 Posted March 13, 2015 at 09:46 PM Boa noite, o meu problema é o seguinte, estou a tentar criar um programa que receba uma String do utilizador e que posteriormente a inverta e a mostre no ecrã. Assim se por exemplo o utilizador inserir a string "Ola", o programa deverá mostrar "alO". O código que escrevi foi o seguinte: Esta primeira parte está numa classe "main" import java.util.Scanner; public class main { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("Insira uma String"); String name = input.nextLine(); reverse e = new reverse(name); e.reverse1(); e.show(); } } E esta parte numa outra classe chamada "reverse" public class reverse { private String Namer; public reverse (String name){ // construtor Namer = name; } public void reverse1(){ // função para inverter a String String array [] = new String[Namer.length()]; for (int i=0; i<= Namer.length(); i++){ array[i]=array[(Namer.length()-i)]; } } public void show (){ //função mostra nova String System.out.printf("The new String is: %s", "array"); } } Ao compilar este código dá-me o seguinte erro: Insira uma String asdfasdas Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 9 at reverse.reverse1(reverse.java:17) at main.main(main.java:11) Se me puderem ajudar... estou mesmo à nora com isto :-/ Link to comment Share on other sites More sharing options...
Rui Carlos Posted March 13, 2015 at 10:19 PM Report Share #579360 Posted March 13, 2015 at 10:19 PM Tens um array de N posições. Se acederes às posições de 0 até N (inclusive), a quantos posições diferentes estás a aceder? Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
amstel Posted March 13, 2015 at 11:23 PM Author Report Share #579365 Posted March 13, 2015 at 11:23 PM Obrigado pelo esclarecimento, certo, estava a começar o ciclo em 0 e como a função length() devolve o valor 3 no exemplo da String "Ola" estava a repetir o ciclo 4 vezes, esta parte já percebi 🙂 agora outra dúvida, no método "show" não estou a conseguir imprimir a minha "nova" String, porquê? Link to comment Share on other sites More sharing options...
HappyHippyHippo Posted March 14, 2015 at 12:10 AM Report Share #579369 Posted March 14, 2015 at 12:10 AM (edited) Obrigado pelo esclarecimento, certo, estava a começar o ciclo em 0 e como a função length() devolve o valor 3 no exemplo da String "Ola" estava a repetir o ciclo 4 vezes, esta parte já percebi 🙂 agora outra dúvida, no método "show" não estou a conseguir imprimir a minha "nova" String, porquê? primeiro estás a fazer o segunite output: System.out.printf("The new String is: %s", "array"); a string "array" não é claramente a palavra invertida segundo, e supondo que estás a tentar fazer o output da variável "array", essa variável só vive dentro da função reverse1. no momento em que a função termina, assim essa variável termina de existir, e será por isso que o compilador te dá erro Edited March 14, 2015 at 12:10 AM by HappyHippyHippo IRC : sim, é algo que ainda existe >> #p@p Portugol Plus Link to comment Share on other sites More sharing options...
alexandre1985 Posted March 14, 2015 at 10:33 PM Report Share #579445 Posted March 14, 2015 at 10:33 PM (edited) Altera o método show() para: public void show (){ System.out.printf("The new String is: " + array); } e põe a variavel array como variavel de instância, em cima junto com o private String Namer; Mas em vez de estares a criar um objecto que te faça a inversão da string considera fazeres apenas um metodo que te inverta a string, como por exemplo: private String inverte(String string) { return new StringBuilder(string).reverse().toString(); } será mais fácil assim Edited March 14, 2015 at 10:48 PM by alexandre1985 http://alexandre1985.github.io Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now