Ajuda com for;

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
	 }
	 
	}

}
  1. 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).

  2. 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) {   
  1. 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.

  2. 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 = &quot;Maria ama João&quot;;  // 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 &lt; len; frase1++ ) {  
        tempCharArray[frase1] = frase.charAt(frase1);  
    }  
      
    for (int frase2 = 0; frase2 &lt; 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 :smiley: !

public static String palavraDeTrasParaFrente(String frase) { // Duas modificações, o retorno de void para String e o nome do parâmetro de &quot;fraseinvertida&quot; para &quot;frase&quot;
//		String frase = &quot;Maria ama João&quot;;  // 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 &lt; len; frase1++ ) {  
//			tempCharArray[frase1] = frase.charAt(frase1);  
//		}  
            
                // Desnecessário para esse caso
//		for (int frase2 = 0; frase2 &lt; len; frase2++ ) {  
//			charArray[frase2] = tempCharArray[len -1 - frase2];  
//		}  
		
                // Faço um laço percorrendo cada letra da frase
                for (int i = 0; i &lt; frase.length(); i++) {  
			fraseInvertida[i] = frase.charAt(indice); // Insere os caracteres do último para o primeiro na posição &quot;i&quot; 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.