Ajuda com for;

12 respostas
W

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

}

12 Respostas

E
  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” ?

W

Certo, Ficaria assim então:

public class Frase {
	
	public String palavraDeTrasParaFrente(String frase1) { 
		 frase1 = "Maria ama Manoel";
		 char[] charArray = frase1.toCharArray();
		return frase1;
		  
		  
	}
}
Agora não consigo pensar em uma logica usando o for para inverter a frase... =/
E

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)

W

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

E

Que tal fazer um “teste de mesa”?

W

Consegui algumas coisas!!!!

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

Alguém saberia me ajudar??

E

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
W

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

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];
		}	
		}
		}
fabiocortolan

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 &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 "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 &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 "i" do array fraseInvertida[]
			indice--; // Diminui o índice em 1
		}  

		return new String(fraseInvertida); // Retorna a frase invertida
	}
W
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;	
		}
		}

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

fabiocortolan
WesleyGiovedi:
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;	
		}
		}

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

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);
Diguinho.Max
WesleyGiovedi:
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;	
		}
		}

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

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.

Criado 29 de abril de 2013
Ultima resposta 30 de abr. de 2013
Respostas 12
Participantes 4