Métodos estáticos problema I

17 respostas
Shponja

O problema diz:

Escreva um método com assinatura

public static String paraString(int[] a, int j)

que resulte numa representação em string da sequência de elementos a[0]; a[1]; ... a[j-1].
A representação deverá ficar delimitada pelos carácteres "[" e "]".
Os elementos deverão ficar por ordem dos índices e separados por vírgulas.
Por exemplo, quando a sequência dos elementos do array a for 3; 14; 1; 9 e j for 3 o resultado será [3,14,1].

eu fiz um código que dá o mesmo resultado, no entanto não me aprece estar muito correcto nem ser exactamente aquilo que é pedido.
alguém consegue perceber se é assim ou é para fazer de outra maneira?

Agradeço desde já a quem ajudar.

Código solução:

import java.util.*;

public class parteII1 {
	
	static String s;
	static int k;
	
	public static String paraString(int[]a, int j, int k){		   
		s=""+a[k]+",";
			return s;		
	}
	public static void main(String[] args){
		 
		 Scanner keyboard= new Scanner(System.in);
		 System.out.println("introduza um numero inteiro");
		 int j = keyboard.nextInt();
		 int[]a;
		 a = new int[j];
		 int i =0;
		 int k=0;
		
		 while (i<=j-1){
			 System.out.println("introduza um numero inteiro");
			 a[i] = keyboard.nextInt();
			 i++;
		 }
		 System.out.print("[");
		 while (k<=j-2){
			 paraString(a,j,k);
			 System.out.print(s);
			 k++;
		 }
		 System.out.print(a[k]+"]");				 
	}		 
 }

17 Respostas

rmendes08

Você tem que fazer todo o processamento dentro do método paraString(). Ou seja, você não deveria chamar esse método dentro de um while.

ViniGodoy

Ele vai te dar um array de ints, como esse:

int[] x = {1,5,30,45,15,6}

E pede que você gere uma strings como essa:
[1,5,30,45,15,6]

Porém, com apenas N números, onde n é o valor do segundo parâmetro. Por exemplo, com o array acima e o número 3 deve gerar:
[1,5,30]

Só para ficar elegante não esqueça de validar no início do método o fato de que N deve ser menor que a quantidade de elementos do array.

J

E ai Jou! Tenta fazer assim ó:

public static String paraString(int[]a, int j){           
         if(j <= a.length){    
             String array = "[";
             for(int i = 0; i < j; i++)
                  array+=a[i]+",";
             array += "]";
             return array;
         }else return "Impossível gerar array";
     }
Shponja

é isso mesmo jamacedo obrigado =)
estava a fazer parte dentro do main mas o objectivo é fazelo no método parastring eu é que não conseguia, obrigado, vou estudar esse exemplo e ver se consigo fazer os outros 5 aseguir que sao aprecidos. abraço e obrigado

Marky.Vasconcelos

Só não envie uma String como aquela com “Impossivel gerar array” por que já que voce espera uma representação do array como string talvez voce queira trata-lo mais pra frente.

Se der erro envie um RuntimeException.

ViniGodoy

Só seguindo o que o mark falou:

public static String paraString(int[]a, int j){ if(j > a.length) throw new IllegalArgumentException("Forneça um número menor que o array!"); StringBuilder array = new StringBuilder("["); for(int i = 0; i < j; i++) array.append(a[i]).append(","); array.append("]"); return array.toString(); }

Não concatene Strings diretamente. A performance é péssima. Use para isso um StringBuilder, como feito no exemplo acima.

Também procure organizar o código para não haver identação desnecessária. Por exemplo, não é necessário usar else se o código dentro do if dá return ou lança exceção.

Shponja

ViniGodoy eu ainda não posso usar isso =P não cheguei nessa parte da matéria.
mas obrigado

J

Shponja, não sei se você pode usar os métodos da classe String, mas se puder adicione uma linha para remover a ultima virgula:

public static String paraString(int[]a, int j){             
         if(j <= a.length){      
             String array = "[";  
             for(int i = 0; i < j; i++)  
                  array+=a[i]+",";  
             //com essa linha nos retiramos a ultima virgula do string
             array = array.substring(0, array.length()-1);
             array += "]";  
             return array;  
         }
         throw new IllegalArgumentException("Variável inválida");
     }
Shponja

nao sei o que é essa instruçao throw new
o primeiro codigo nao estava errado era só necessário modificar uma coisa mas com essas instruções eu já não posso fazer. De qualquer forma o problema está resolvido, estou a tentar fazer o próximo a ver se consigo.

ViniGodoy

Então faz assim:

public static String paraString(int[]a, int j){             
   if (j <= 0 || a.length == 0)
      return "[]";

   if (j > a.length) 
      j = a.length;

   String retorno = "[" + a[0];
   for (int i = 1; i < j; i++)
      retorno += ", " + a[i];
   retorno += "]";

   return retorno;
}

Assim, se J for > que o array, o array todo é retornado. Se J for <= 0, nada é retornado. Um comportamento bastante válido. E esse código já corrige também o problema da vírgula, sem usar o substring.

Shponja

agora estou a tentar com esse ultimo codigo (partido do principio que a dimensao do array a = j ) fazer um print como pede o exercicio mas nao consigo.

Shponja

tenho sempre [0,0,0]

Shponja

if (j <= 0 || a.length == 0) return "[]";

era por causa disto, não sei porquê.

peczenyj
public class Laos {

	public static String paraString(int[] a, int j){
		int [] x = new int[j];	
		System.arraycopy(a, 0, x, 0, j);
		return java.util.Arrays.toString(x);
	}
	
	public static void main(String [] xxx){
		int [] x = {
				1,2,3,4,5,6,7,8,9,10
		};
		System.out.println("Laos.paraString(x,5)=>" + Laos.paraString(x,4));
	}
}

:shock:

Shponja

nao posso usar isso, é só para usar coisas simples.

Isto:  <blockquote>System.arraycopy(a, 0, x, 0, j);

return java.util.Arrays.toString(x);   </blockquote>

para mim é chines
B

O código do ViniGodoy funciona.

Se imprime [0, 0, 0], então você passou pelo menos um {0, 0, 0} para ele.

Shponja

o codigo tinha uma linha a mais, não era necessário ter daquela forma, mas já resolvi isso podem parar de responder. Obrigado a todos

Criado 14 de dezembro de 2008
Ultima resposta 15 de dez. de 2008
Respostas 17
Participantes 7