Métodos estáticos problema I

O problema diz:

[quote]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]. [/quote]

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:

[code]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]+"]");				 
}		 

}[/code]

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.

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.

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

é 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

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.

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.

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

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

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.

Então faz assim:

[code]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;
}[/code]

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.

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.

tenho sempre [0,0,0]

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

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

[code]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));
}

}[/code]

:shock:

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

Isto: [quote]System.arraycopy(a, 0, x, 0, j);
return java.util.Arrays.toString(x); [/quote]

para mim é chines

O código do ViniGodoy funciona.

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

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