Vectores||help [java]

Lourenco

New member
public static void main(String[] args) {
String [] dados=new String[10];
for(int i=0;i<10;i++){
System.out.println("introduza os dados");
dados=Keyboard.readString();
}
for (int i=0;i<10;i++){
System.out.print(dados+" ");

Como faço para imprimir esse vector por ordem inversa??

EDIT: ja consegui
 
Last edited:
public static void main(String[] args) {
String [] dados=new String[10];
for(int i=0;i<10;i++){
System.out.println("introduza os dados");
dados=Keyboard.readString();
}
for (int i=0;i<10;i++){
System.out.print(dados+" ");

Como faço para imprimir esse vector por ordem inversa??

EDIT: ja consegui


for (int i=10;i<0;i--)

or something like that.
 
entao mas tipo, se for para correr o ciclo normalmente vai de 0 até 10, pk é k ao contrario vai so de 9 até 0????
 
Boas
Se tens um array de 10 elementos, vais ter uma gama de indexação de 0-9, incluindo o 0, o que perfaz os 10 elementos.
Quando fazes o ciclo ao do ultimo para o primeiro elemento tens que ir ao ultimo index, o 9, e ir decrementando até à primeira posição do array, a posição 0 e não 1. Penso que a tua confusão esteja aqui.

@braços

EDIT: Tu no for(i = 0;i<10;++i) vais testar a gama de posições que falo 0-9, não testas a posição 10 porque para essa a condição i<10 já falha, o que seria idêntico a teres i<=9.
 
Last edited:
Só uma nota:

Isto é JAVA:

public static void main(String[] args) {
String [] dados=new String[10];
for(int i=0;i<10;i++){
System.out.println("introduza os dados");
dados=Keyboard.readString();
}
for (int i=0;i<10;i++){
System.out.print(dados+" ");
}



E isto é Groovy, ou seja, Java sem as tretas, fica bem mais simples assim:

main(args) {
def dados = new String[10]
dados.eachWithIndex{dado, i ->
println "Introduza os dados"
dados =
System.in.readLines()
}

dados.reverse().each{it -> println it+" "}



Groovy rula! E podia resumir o main só em 2, 3 linhas...
 
Ok, primeira parte: ciclo for

for (int i = 0; i < 10; i++)
{
dysplay i;
}

Aqui inicializas a variável. Neste caso vais atribuir ao inteiro "i" o valor 0.

Aqui fica a condição de saída. Neste exemplo, enquanto "i" for menor que 10 (não confundas com menor ou igual: i<= 10) o ciclo continua. Quando chegar a 10, termina e sai deste loop.

Aqui colocas o que é feito no final de cada iteração. Neste exemplo vais incrementar 1 unidade à variável "i". Isto é a mesma coisa que teres i = i + 1.

Se executares este ciclo vais ter o seguinte output:
0
1
2
3
4
5
6
7
8
9



Segunda parte: arrays

A primeira posição do array tem o índice 0 e não 1.

Por exemplo, se na tua aplicação o utilizador inserisse os chars "h i p m p m q ç l z" ias ficar com o array preenchido da seguinte maneira (os números em baixo correspondem ao índice do char acima deles):

arrayki1.jpg

Com o teu ciclo for inicial, vais começar preencher um array (de tamanho 10) desde o índice 0 até ao índice 9 (i < 10). E como é fácil de ver, se o quiseres ler em ordem inversa é no índice 9 que deves começar.
 
Não podes usar o java 1.5 e o foreach?

De qualquer forma, uma maneira mais profissional de fazeres o ciclo é:

for(i=dados.lenght(); i>=0; i--){
//Fazer cenas
}
 
Não podes usar o java 1.5 e o foreach?

De qualquer forma, uma maneira mais profissional de fazeres o ciclo é:

for(i=dados.lenght(); i>=0; i--){
//Fazer cenas
}

Mas mesmo que fosse terias o problema do comprimento (total), imagina no exemplo em cima terias de ter em atenção a terminação do ciclo e a posicao da leitura do mesmo.
Code:
for(i=dados.lenght(); i>0; i--){ //dados.length caso existisse iria dar 10 mas tu queres é a posição 9 e acabar na 0 portanto quando o i=1
System.out.print(dados[i-1]+" ");
}
else...
Code:
for(i=dados.lenght()-1; i>=0; i--){
 System.out.print(dados[i]+" ");
 }
 
Mas mesmo que fosse terias o problema do comprimento (total), imagina no exemplo em cima terias de ter em atenção a terminação do ciclo e a posicao da leitura do mesmo.
Code:
for(i=dados.lenght(); i>0; i--){ //dados.length caso existisse iria dar 10 mas tu queres é a posição 9 e acabar na 0 portanto quando o i=1
System.out.print(dados[i-1]+" ");
}
else...
Code:
for(i=dados.lenght()-1; i>=0; i--){
 System.out.print(dados[i]+" ");
 }

Gosto mais da abordagem:
for (int x = dados.length - 1; x >= 0; x--)
{
System.out.print(dados[x] + " ");
}

e assim funciona para qualquer vector independentemente do número de posições.
 
Gosto mais da abordagem:
for (int x = dados.length - 1; x >= 0; x--)
{
System.out.print(dados[x] + " ");
}

e assim funciona para qualquer vector independentemente do número de posições.

É o que dá escrever com pressa :D

Exactamente, para mim essa é a melhor abordagem.
 
obrigado pessoal [:p]
outra dúvida,estou a fazer um método para somar as duas primeiras linhas de uma matriz, mas o que me está a dar e tipo,imaginem a matriz:
2 2
2 2

o que me dá é :
4 4
4 4

static void multiplicarMatriz(int [][]matriz,int a, int b){
for(int j=0;j<b;j++){
System.out.print(matriz [0]+matriz[1]);
}
}
 
Não sei se percebi.

tu tens um método que recebe 3 parâmetros, a matriz, o a e o b. Para que é que queres o a e o b? é para somar da linha a, até a linha b?

Para somar só as duas primeiras linhas é qualquer coisa deste género:
public static void multiplicarMatriz(int [][]matriz){

//for para correr as colunas e somar linhas diferentes com a mesma coluna
for(int i=0; i<matriz[0].length; i++){
matriz[0] = matriz[0] + matriz[1];
matriz[1] = matriz[0];
}
}

mas parece-me que queres algo mais complicado ali com os parâmetros a e b...
 
aquilo é um método que recebe a matriz , e dpois o número de linhas e colunas, daí o A e o B
eu prendo obter:
"Caso o utilizador seleccione a opção C, deve devolver a soma dos
elementos das duas primeiras linhas da matriz;"
 
Last edited:
aquilo é um método que recebe a matriz , e dpois o número de linhas e colunas, daí o A e o B
eu prendo obter:
"Caso o utilizador seleccione a opção C, deve devolver a soma dos
elementos das duas primeiras linhas da matriz;"

Se queres somar x linhas y linhas é fácil.
Podes fazer com três for's, um para percorrer as linhas, outro para as colunas e outro para fazer o somatório. Ou então numa método recursivo.. mas não me parece que seja isso que queiras....

Pensa um bocado, se precisares de ajuda diz [;)].

Se é só as duas primeiras linhas o código que pus em cima faz isso :)
 
Last edited:
Back
Top