Bom Dia Galera, meu professor passou um desafio para resolver, estou tentando desde ontem, mas algo dá errado e eu não sei oque é, alguém poderia me ajudar?
Obs. Lembrando que eu sou novato, me ajude com instruções para iniciante para eu não ficar perdido. Valeu =D
O Desafio é o seguinte:
1 - Crie um Projeto chamado FraseDeTrasParaFrente
2 - Crie uma classe chamada Frase em um pacote qualquer
3 - Crie um método chamado palavraDeTrasParaFrente que receberá como parâmetro uma frase e retorne esta frase de trás para frente
Ex: Ao informar Maria ama Manoel ele me retorna leonaM ama airaM
Dica: Crie a lógica usando o for iterator, e use também o frase.toCharArray() para quebrar em pedaços de char a String.
char[] charArray = frase.toCharArray();
4 - Crie uma classe de Teste com método main
public class Frase {
/**
* @param args
*/
public static void palavraDeTrasParaFrente(String frase) {
frase = "Maria ama Manoel";
char[] charArray = frase.toCharArray();
for(frase i = (aux.length() -1); i>=0; i--){
i += aux.charAt(i);
}
}
public class Teste {
public void main(String[] args) {
// TODO Auto-generated method stub
}
}
}
-
Evite sempre usar métodos estáticos. Se você está aprendendo programação orientada a objetos, não há porque você usar métodos estáticos.
(Em particular, no seu caso pode-se usar um método estático, mas isso é mais uma exceção que uma regra).
-
Em Java não é possível modificar uma string, portanto você deve retornar uma string nova . Em vez de “void” seu método deve retornar “String”:
public String palavraDeTrasParaFrente(String frase) {
-
Um contador (que é o índice do “for”) deve ser um int ou um long, não um nome de outra variável. “frase i” está errado.
-
Onde está declarada a variável “aux” ?
Certo, Ficaria assim então:
[code]
public class Frase {
public String palavraDeTrasParaFrente(String frase1) {
frase1 = "Maria ama Manoel";
char[] charArray = frase1.toCharArray();
return frase1;
}
}[/code]
Agora não consigo pensar em uma logica usando o for para inverter a frase… =/
No começo seu loop for estava quase correto - só que todo mundo tem a mania de usar “+=”, e ele no seu caso não resolve seu problema.
No seu caso, provavelmente você usaria algo como:
String aux = "";
...
aux = charArray [i] + aux;
(não estou escrevendo o for de propósito, porque isso é sua lição de casa - a linha 3 acima é uma sugestão do deve ir dentro do for)
sim Sim Sim, por isso eu gosto de onde eu faço o curso de Java, eles passam a matéria e depois uma lição de casa com algo que eles não passaram para nós corrermos atrás… =D
Que tal fazer um “teste de mesa”?
Consegui algumas coisas!!!
[code] public class Frase {
public static void palavraDeTrasParaFrente(String fraseinvertida){
String frase = "Maria ama João";
int len = frase.length();
char[] tempCharArray = frase.toCharArray();
char[] charArray = frase.toCharArray();
for (int frase1 = 0; frase1 < len; frase1++ ) {
tempCharArray[frase1] = frase.charAt(frase1);
}
for (int frase2 = 0; frase2 < len; frase2++ ) {
charArray[frase2] = tempCharArray[len -1 - frase2];
}
}
}
class Teste {
public static void main(String args[]){
Frase f = new Frase();
String frase = "Maria ama João";
String palavraDeTrasParaFrente = f.palavraDeTrasParaFrente(frase); // Tem algo errado com essa linha.
System.out.println(palavraDeTrasParaFrente);
}
}[/code]
Alguém saberia me ajudar??
Rapaz, por que é que você insiste em usar “void” para o retorno do seu método? Não está dando um erro de compilação na linha 29?
Dica: dado um array de char, para convertê-lo para uma String, basta usar um dos construtores de String que recebe um array de char:
char[] teste = {'T', 'e', 's', 't'};
String test = new String (teste);
System.out.println (test); // deve imprimir Test
Concordo!! Ontem quando cheguei do trabalho eu sentei e repensei no código junto com as dicas que vc deu, mudei muuuita coisa, mas ainda tem algo que não está rolando…
[code] class Teste {
public static void main(String args[]){
Frase f = new Frase();
String frase = "Maria ama João";
String palavraTeste = f.palavraDeTrasParaFrente(frase);
System.out.println(palavraTeste);
}
}
public class Frase {
public String palavraDeTrasParaFrente(String frase){ // Existe um erro aqui : Erro: O método principal não foi encontrado na classe Frase; defina o método principal como: public static void main(String[] args) OBS. Pelo que eu entendo o método principal já está na classe "Teste" o.o'
int len = frase.length();
char[] tempCharArray = frase.toCharArray();
char[] charArray = frase.toCharArray();
for (int frase1 = 0; frase1 < len; frase1++ ) {
tempCharArray[frase1] = frase.charAt(frase1);
}
for (int frase2 = 0; frase2 < len; frase2++ ) {
charArray[frase2] = tempCharArray[len -1 - frase2];
}
}
}
[/code]
Cara, eu simplificaria um pouco seu código, mas se quiser manter da forma como está, segue o q o entanglement disse, coloca o retorno como String e não como void, e é óbvio q vc deve passar um retorno do tipo String no final do seu método tbm, segue um exemplo das alterações p/ vc entender melhor:
public static String palavraDeTrasParaFrente(String fraseinvertida) { // aki vc coloca o retorno como String
String frase = "Maria ama João"; // Pra q passar a frase aki d novo? Ela não vem no parâmetro do método?
int len = frase.length();
char[] tempCharArray = frase.toCharArray();
char[] charArray = frase.toCharArray();
for (int frase1 = 0; frase1 < len; frase1++ ) {
tempCharArray[frase1] = frase.charAt(frase1);
}
for (int frase2 = 0; frase2 < len; frase2++ ) {
charArray[frase2] = tempCharArray[len -1 - frase2];
}
return new String(charArray); // aki vc retorna a String com a frase invertida
}
Porém, eu simplificaria um pouco seu código, sei q está começando agora então vou postar um exemplo do q eu acredito q ficaria melhor, mas não acostuma não
!
public static String palavraDeTrasParaFrente(String frase) { // Duas modificações, o retorno de void para String e o nome do parâmetro de "fraseinvertida" para "frase"
// String frase = "Maria ama João"; // Se vc passa a frase no parâmetro, p/ q setar aki d novo?
// int len = frase.length();
// char[] tempCharArray = frase.toCharArray();
// char[] charArray = frase.toCharArray();
// Nenhuma das variáveis acima são necessárias nesse novo método
char[] fraseInvertida = new char[frase.length()]; // Array para receber a frase invertida com o tamanho da frase original
int indice = frase.length() -1; // Indice para percorrer a String de trás para frente
// Desnecessário para esse caso
// for (int frase1 = 0; frase1 < len; frase1++ ) {
// tempCharArray[frase1] = frase.charAt(frase1);
// }
// Desnecessário para esse caso
// for (int frase2 = 0; frase2 < len; frase2++ ) {
// charArray[frase2] = tempCharArray[len -1 - frase2];
// }
// Faço um laço percorrendo cada letra da frase
for (int i = 0; i < frase.length(); i++) {
fraseInvertida[i] = frase.charAt(indice); // Insere os caracteres do último para o primeiro na posição "i" do array fraseInvertida[]
indice--; // Diminui o índice em 1
}
return new String(fraseInvertida); // Retorna a frase invertida
}
[code]
public class Frase {
public static void main(String args[]){
Inversor f = new Inversor();
String frase = "Maria ama João";
String palavraTeste = f.palavraDeTrasParaFrente(frase);
System.out.println(palavraTeste);
}
}
class Inversor {
public String palavraDeTrasParaFrente(String frase){
//String frase = "Maria ama João";
int len = frase.length();
char[] tempCharArray = frase.toCharArray();
char[] charArray = frase.toCharArray();
for (int frase1 = 0; frase1 < len; frase1++ ) {
tempCharArray[frase1] = frase.charAt(frase1);
}
for (int frase2 = 0; frase2 < len; frase2++ ) {
charArray[frase2] = tempCharArray[len -1 - frase2];
}
return frase;
}
}
[/code]
Fiz o código novamente e cheguei a esse fim, porém, a frase sai normal e não invertida, alguém sabe o motivo??
[quote=WesleyGiovedi][code]
public class Frase {
public static void main(String args[]){
Inversor f = new Inversor();
String frase = "Maria ama João";
String palavraTeste = f.palavraDeTrasParaFrente(frase);
System.out.println(palavraTeste);
}
}
class Inversor {
public String palavraDeTrasParaFrente(String frase){
//String frase = "Maria ama João";
int len = frase.length();
char[] tempCharArray = frase.toCharArray();
char[] charArray = frase.toCharArray();
for (int frase1 = 0; frase1 < len; frase1++ ) {
tempCharArray[frase1] = frase.charAt(frase1);
}
for (int frase2 = 0; frase2 < len; frase2++ ) {
charArray[frase2] = tempCharArray[len -1 - frase2];
}
return frase;
}
}
[/code]
Fiz o código novamente e cheguei a esse fim, porém, a frase sai normal e não invertida, alguém sabe o motivo??[/quote]
Cara, com todo o respeito, fique mais atento ao q vc está fazendo!
Vc está retornando a variável “frase”, ela chega com a frase original e não é alterada em nenhum momento do código. Vc tem q retornar “charArray[]” porém, como seu método retorna uma String vc pode fazer o retorno chamando o construtor da String da seguinte forma:
return new String(charArray);
[quote=WesleyGiovedi][code]
public class Frase {
public static void main(String args[]){
Inversor f = new Inversor();
String frase = "Maria ama João";
String palavraTeste = f.palavraDeTrasParaFrente(frase);
System.out.println(palavraTeste);
}
}
class Inversor {
public String palavraDeTrasParaFrente(String frase){
//String frase = "Maria ama João";
int len = frase.length();
char[] tempCharArray = frase.toCharArray();
char[] charArray = frase.toCharArray();
for (int frase1 = 0; frase1 < len; frase1++ ) {
tempCharArray[frase1] = frase.charAt(frase1);
}
for (int frase2 = 0; frase2 < len; frase2++ ) {
charArray[frase2] = tempCharArray[len -1 - frase2];
}
return frase;
}
}
[/code]
Fiz o código novamente e cheguei a esse fim, porém, a frase sai normal e não invertida, alguém sabe o motivo??[/quote]
amigo retorne no seu metodo a sua string invertida que no seu caso é sua charArray. lembrando que deve retornar uma string, ou seja converter o array de char para string. existem metodos da classe string que fará isso pra vc.