[Resolvido]Por favor, onde estou errando?

Bom estou bem no começo de Java e nunca havia programado antes. Estou com muita dificuldade para entender como funciona as coisas e preciso entregar alguns programinhas mas não consigo resolvê-los. Alguém poderia me ajudar por favor?

Bom o primeiro seria:

Escreva um aplicativo em Java que receba entrada de uma série de N números:

  1.   determine o valor do maior número (maior).
    
  2.   imprima todos os N números deixando de fora o maior.
    

N é um número informado pelo usuário no início do aplicativo. Para resolver esse problema utilize vetor, for e if.

Meu código até agora é:

[code]import javax.swing.*;
public class Ex1 {

public static void main(String args[]){
	
	int i, maior, res=0,n,qtda=0;
	    	
	n=Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de números"));
	
	int vet[] = new int[n];
	
  	for(i=1;i&lt=n;i++){
    vet[i]=Integer.parseInt(JOptionPane.showInputDialog("Digite os números"));
	qtda=vet[i];
 	System.out.println(qtda);
	}	
	     	
}
}[/code]

E sempre aparece um erro dizendo :
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4
at Ex1.main(Ex1.java:21)

Obs: Coloco os valores 4 no primeiro input e 1,2,3,4 nos seguintes.

Com isso não consigo ir em frente…

E tem um outro probleminha besta que não tenho idéia de como fazer o algoritmo, alguém poderia ao menos me mostrar o processo (não quero nada feito, apenas uma indicação)?

Crie um programa que imprima o seguinte padrão no console:

Obs: utilize uma estrutura de repetição.

  • * # * # * # *

  • * # * # * # *

  • * # * # *

  • * # * # *

  • * # *


* # * # *

* # * # *

* # * # * # *

* # * # * # *

* # * # * # * # *

Agradeço desde já.

ArrayIndexOutOfBoundsException.

Para corrigir este erro, você deve usar o for assim:
for(i=1;i<=n - 1;i++){

Com n - 1. Pois um array vai da posição 0 até n-1 e não de 1 a n como os iniciantes imaginam. Isso aliás causa muita confusão, relaxe!

A idéia para este exercício proposto é através de um loop mesmo e System.out.print. Começa com 5 o contador e vai descrecendo em 1 cada vez que passa. Aí você faz um if interno nesse loop: ‘quando for 3 faça outro loop e agora tudo ao contrário’ Entende? A idéia creio que seja esta, ‘encadear loops’.

Outra dúvida, como faço para fazer com que imprima todos os valores, com excessão do maior? E para comparar esses valores entre si para determinar o maior?

Eu tentei fazer a comparação com IF, mas o máximo que cheguei foi eme somando todos os valores e deixando o que fosse maior de fora da soma, consequentemente imprimindo apenas a soma e não 1 por 1 como preciso.

Para comparar você deve declarar como o maior valor o primeiro inicialmente(posição [0]). Então você usa um “for” percorrendo de 1 a n-1 e dentro desse for terá uma condição if comparando se o valor que está lendo no momento(array[i]) é igual ao ‘maior valor provisório’.

Quando for igual, você iguala a variável que guardava o ‘maior valor provisório’ com o valor atual, e ele vai fazendo as iterações e analisando qual o maior sempre salvando nessa variável de valor provisório o maior! Fácil.

E caso você queira ainda imprimir os valores enquanto o loop for iterando você usa um ‘else’ neste if, ou seja, se o valor maior provisório for igual ao maior, ele gravará, mas caso não seja, ele apenas vai imprimir. Isso vai fazer com que todos os valores do array com excessão do maior sejam impressos.

Abraços.

EDIT:

Aliás, cara.
Eu vendo seu post fiz um artigo grande de como achar maior, menor elemento, buscar elementos e ordenar num array.
Veja meu Java Blog voltado para iniciantes:
http://giancarlobraga.joolo.com/

Várias coisas legais lá.

Abraço.

Ola, voce pode passar um array de numeros logo na chamada do seu programa, so tenha certeza de passar apenas numeros senao ira causar uma excecao.

Para voce testar faca o seguinte, digite a classe abaixo e depois compile.

A) Na linha de comando faca assim:

javac MaiorNumero.java (compila)

java MaiorNumero 1 2 3 4 5 (executa)

O seu programa ira gerar uma saida da seguinte forma:
1
2
3
4

B) No eclipse:

Para testar no eclipse faca o seguinte:

  1. Salve sua classe;
  2. Entre no menu Run;
  3. Selecione o item de menu Run…
  4. Selecione a aba Arguments;
  5. No painel Program Arguments digite os argumentos (os numeros de entrada).
  6. Clique no botao Run

Existem muitas maneiras para resolver este problema.
Sai um pouco do foco inicial da sua pergunta para demonstrar outras opcoes basicas.
Abraços…

[code]
[color=darkblue]

public class MaiorNumero {

/**
 * @param args
 */

public static void main(String[] args) {
	int maiorNumero=0;
	// cria um vetor de numeros de tamanho = qtde de numeros passados menos 1(maior numero)
	int [] listaNumeros = new int[args.length - 1];	
	
	// descobre o maior numero
	for (int i=0; i<args.length; i++ ) {
		int numero = Integer.parseInt(args[i]); // converte String para inteiro
		if( numero > maiorNumero ) {
			maiorNumero = numero ; 
		}			
	}
	
	// monta a lista sem o maior numero
	int j=0; // indice do vetor da lista de numeros
	for(int i=0; i<args.length; i++) {
		int numero = Integer.parseInt(args[i]);
		if(numero != maiorNumero ) {
			listaNumeros[j] = numero;
			j++;
		}			
	}
	
	// imprime a lista sem o maior numero
	for(int i=0; i><listaNumeros.length; i++) {
		System.out.println( listaNumeros[i] );
	}

}

}
[/code]>

Não consigo de jeito nenhum fazer essas coisas… não entendo como é posível não entrar esse procedimento na minha cabeça.

Meu código até agora está assim:

[code]import javax.swing.*;
public class Ex1 {

public static void main(String args[]){
	
	int i, maiorvalor=0, provisorio, n;
	    	
	n=Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de números"));
	
	int vet[] = new int[n];
	
  	for(i=0;i<=n-1;i++){
  		
    	vet[i]=Integer.parseInt(JOptionPane.showInputDialog("Digite os números"));
   	 	provisorio=vet[i];
	 		if(provisorio>maiorvalor){
	 		maiorvalor=provisorio;
	 		}
			else 
			maiorvalor=maiorvalor;
			
			System.out.println(maiorvalor);
   }
   
}

}[/code]

Ele está imprimindo todos os valores, até entendo o porque, pois se analisar vemos que em todos os casos o valor vai ser guardado. Não sei como colocar no IF para ele excluir o maior valor.

Tnetei ver aquele blog, mas não entendo essas coisas de Array length e tal…

E sobre o código que o mfjeng colocou, não entendi porque ele usa alguns comandos como:

int numero = Integer.parseInt(args[i]);

dambros.
Esse comando citado pelo mfjeng é meio além do basicão, ele vai converter uma String entrada como argumento via linha de comando e vai convertê-la no formato inteiro. Mas deixa isso.

Dê uma olhadinha no meu blog de novo. Com mais cuidado. Eu explico várias coisas que se você entender a lógica vai fazer o seu algoritmo.
O ‘array.length’ nada mais é do que o tamanho do array. É a mesma coisa que o “n” aí no seu código. Porém é uma forma mais versátil.

Olá dambros, recomendo uma lida nessa apostila:

Abraços.

É, realmente. Acho melhor ele ler um pouco a parte básica.
Eu acho que por ele nunca ter programado seria ainda melhor aprender Java consultando um bom livro de lógica de programação antes para aprender direito como as coisas funcionam.

Acredite ja li e estou tentando fazer isso faz algumas horas… não adianta que não consigo entender nada relacionado a essas coisas, principalmente o arry lá.

To vendo cada vez mais que to em curso errado, tenho que fazer matematica mesmo.

Meu problema é que tenho que entregar 3 exercícios e não consigo nem começar a resolve-los :confused:

Explica detalhadamente o que você quer novamente, por favor. Vou fazer o possível para te ajudar.

Agradeço realmente a prestatividade de ambos nas respostas tão rápidas, e peço desculpas pela minha incompetência no assunto, mas acreditem quero muito aprender programar.

Preciso de um programa que resolva o seguinte enunciado:

Escreva um aplicativo em Java que receba entrada de uma série de N números:

  1.   determine o valor do maior número (maior).
    
  2.   imprima todos os N números deixando de fora o maior.
    

N é um número informado pelo usuário no início do aplicativo. Para resolver esse problema utilize vetor, for e if.

E com alguma ajuda, cheguei no seguinte código:

[code]import javax.swing.*;
public class Ex1 {

public static void main(String args[]){
    
    int i, maiorvalor=0, provisorio, n;
            
    n=Integer.parseInt(JOptionPane.showInputDialog("Digite a quantidade de números"));
    
    int vet[] = new int[n];
    
      for(i=0;i<=n-1;i++){
          
        vet[i]=Integer.parseInt(JOptionPane.showInputDialog("Digite os números"));
            provisorio=vet[i];
             if(provisorio>maiorvalor){
             maiorvalor=provisorio;
             }
            else 
            maiorvalor=maiorvalor;
            
            System.out.println(maiorvalor);
   }
   
}

}[/code]

Bem como podem ver ao ler o código, dentro do IF, independente do valor que eu colocar ele sempre irá guardar na variável, pois ‘maiorvalor’ começa valendo 0. Estou testando com os valores4 na primeira caixa de pergunta, e 1,2,3,4 nas que seguem.
Como todos valores são sempre guardados, ao imprimir na tela ele acaba imprimindo todos os números digitado, o que não é o que preciso.

Sei que é meio “off-topic”, mas existe alguma maneira de começar nesse mundo? Não sei, é indicutível a dificuldade que apresento com algoritmo, java e derivados, o que não acontece com nada relacionado a coisas exatas, como cálculo, física, química.
Estou aberto a sugestões, inclusive peguei essa apostila postada para dar uma lida e ver se me leva a algum canto.

dambros.
Você precisa de motivação.
Em classes de estruturas de dados I na minha faculdade acompanhei de perto o desenvolvimento(e retrocesso) de uma turma de 30 alunos, meus amigos, que apanharam para aprender toda essa coisa de vetores, matrizes, loops e condições. Alguns nunca tinham programado antes e foi realmente um grande problema pois nossa base anterior de Java tinha sido horrível, e prejudicou pra caramba.

Mas enfim, os alunos que saíram melhor no final foram os alunos que começaram a treinar na prática constantemente, pensando e pensando até resolver os exercícios. E o final da história é que após um semestre conturbado, das cinzas nasceram algumas notas boas e algumas outras muito melhores e gratificantes.

Eu sou um desses alunos. E de uma nota MEIO, na prova 2 tirei 10. Tudo porque peguei e comecei a treinar e treinar me virando para fazer os exercícios. Chegava a ser desesperador, mas, no final você pega o jeito.

A minha dica é: não desmotive. Basta treino.

John Von Neumann gravava trechos inteiros de livro só de ler e recitava sem problemas anos depois, Neumann era um gênio. Nem sempre todos nós somos gênios ou bem-dotados mentalmente, mas tenha certeza: basta treinar e treinar, insistir e de cabeça erguida, seguir em frente.

Eu disse isso porque senti uma certa desmotivação com o Java em suas palavras.

Estou aqui bolando uma resolução para o seu algoritmo e logo logo vou postar. Ok?

Aguarde uns minutos.

Sim cara, realmente estou bem desmotivado com Java. Isso acontece devido ao fato de eu ter um tempo extremamente escasso para dedicar a alguma coisa, trampo+facul consome meu dia inteiro literalmente. Tive que abandonar alguns passatempo como minha guitarra por enquanto :confused:

Tenho que usar domingos para estar tentando resolver alguma coisa ou aprender outras, pois trabalho inclusive aos sábados. Mas não estou reclamando, se eu conseguisse entender como as cosias funcionam e parasse de bater tanto a cabeça chegando a algum lugar sem dúvida estaria mais motivado.

Isso que comentastes de nota sei como funciona, pois sou um desses que teve nota baixa na prova (na segunda, pois na primeira fui muito bem já que havia entendido a matéria), minha nota foi 0.6.

Por isso estou tentando achar algum meio de aprender. Pensei em pegar Head First - Java, pois já ouvi muito bem de tal livro.

Uma dúvida, qual programa você recomendam para que eu programe? Estu usando JCreator no momento…

Agradeço a ajuda, e não necessita de pressa, estarei aqui aguardando ^^

Olha. Lá vai!
Acho que faz o que você quer.
Faz mais uns testes aí! Mas à priori funcionou bem.

import javax.swing.JOptionPane;
/*
Importando a classe JOptionPane para abrir input ao usuário.
isso será usado tanto para perguntar QUANTOS elementos terá o vetor,
assim como será usado para pedir os elementos propriamente ditos do mesmo!
*/

public class AlgoritmoDambros {

	public static void main(String[] args) {
		
		//abaixo criamos as variáveis
		String entradaDoUsuario;
		int entradaDoUsuarioJaConvertidaParaInteiro;
		
		
		/*
		Aqui abaixo nós usamos o método parseInt da classe Integer para converter o dado entrado...
		pelo JOptionPane para o tipo de dado inteiro, pois o JOptionPane sempre retornará uma String.
		mas como precisamos do dado NUMÉRICO E INTEIRO temos de converter.
		*/
		entradaDoUsuario = JOptionPane.showInputDialog("Digite o número de elementos do vetor.");
		entradaDoUsuarioJaConvertidaParaInteiro = Integer.parseInt(entradaDoUsuario);

		
		/*
		Criando e inicializando um array com N elementos.
	    o array.length deste array será o valor de elementos entrado no JOptionPane!
		*/
		int arrayTeste[] = new int [entradaDoUsuarioJaConvertidaParaInteiro];
		
		
		//Agora o que falta? Falta 'popular' com vários dados o nosso caríssimo array.
		//E aí? Como faz para andar nele? Fácil! Loop.
		for(int i = 0 ; i < arrayTeste.length ; i++){
			
			//criamos variável String. Lembra-se que showInputDialog retorna String?
			String valor = JOptionPane.showInputDialog("Digite o valor para a posição " + i + " do array.");		
			arrayTeste[i] = Integer.parseInt(valor);
			//acima somente convertemos o valor em INTEIROS e gravamos na posição do vetor!
			//com isso andamos até o final e vamos a cada elemento mostrando um JOptionPane e gravando.
			
		}

		//AGORA QUE TEMOS O ARRAY POPULADO, vem a parte interessante!
		
		//coloque como maior, PROVISORIAMENTE o primeiro elementoo desse array
		int valorMaior = arrayTeste[0];
		
		//agora precisamos andar no array. Como andamos? Através do loop;
		//IMPORTANTE: andamos a partir do 1, pois como já definimos PROVISORIAMENTE
		//o 'valorMaior' como o elemento na posição 0, não precisamos começar dele próprio...
		//podemos começar de algo adiante, e nesse caso a próxima posição é o 1!
		for(int i = 1; i < arrayTeste.length; i++){
		
			if(arrayTeste[i] > valorMaior){
				
				//caso a posição em que estamos lendo agora seja MAIOR que a variável provisória...
				//então ele grava na variável provisória o valor correspondente à posição atual.
				valorMaior = arrayTeste[i];
				
			}//final do if
			
		}//final do for
	
		//Agora TERMINOU o segundo for. Já temos guardado na variável 'valorMaior' qual o maior valor do array.
		//Vamos agora fazer um NOVO FOR. 
		//CUIDADO: Este for abaixo iniciará do 0, diferente do segundo for.
		for(int i = 0; i < arrayTeste.length; i++){
			
			if(arrayTeste[i] != valorMaior){
				
				//CASO o conteúdo que você está lendo agora seja DIFERENTE do maior, mostre o valor!
				//ISSO AQUI FARÁ COM QUE O MAIOR NÃO SEJA MOSTRADO.
				System.out.println("O valor é na posição " + i + " é " + arrayTeste[i]);
				
			}//final do if
			
		}//final do for	
	

	}//final do main

}//final da classe

Para você começar programando, eu acho que linha de código é o melhor. Mas se você já está um tanto familiarizado, acho que é perda de tempo ficar na unha e basta partir para um IDE de gente. Recomenda-se nesse caso o Eclipse ou NetBeans. Eu acho o Eclipse mais favorável ao iniciante. Comece por ele.


Baixe a versão 3.3, nome código ‘Europa’.

A utilização é simples, e a assistência que ele dá aos códigos é gigantesca.

Sobre suas notas.
Eu recomendo o DEITEL.

Mesmo depois de tirar nota boa, nas férias peguei o DEITEL 6º edição em inglês para estudar e fiquei estudando constantemente e enfim entendi muitos conceitos da qual mesmo tendo ido bem não tinha me familiarizado.

Mas já que seu tempo é reduzido, diferente do que foi o meu nas férias, recomendo que comece pela apostila da Caelum entendendo bem todos os conceitos e quando tiver terminado ela, você começa aos poucos a olhar o livro do DEITEL. Ok?

Se você tiver msn manda via MP pra trocarmos alguma idéia, de repente eu te ajudo por lá. Sei como é ruim essa parte de estrutura de dados e pode ser definitivo na sua escolha se irá usar ou não Java(prefira usar, isso dá dinheiro e é a melhor linguagem em muitos aspectos).

Olá, tente solucionar o algoritmo primeiro, não tenha pressa, virá naturalmente, anote tudo. Esqueça a sintaxe da linguagem.
Use português mesmo. Por exemplo:

  • Digite a qtde de números para entrada;
  • Leia o número;
  • Guarde o número em um vetor de números (vetor 1);
  • Encontre o maior número;
  • Monte um outro vetor de números tirando o maior número encontrado (vetor 2);
  • Mostre o vetor de números (vetor 2);

Abraços.
Obs.: não desanime, esse estresse inicial é sinal de que o seu cérebro está começando a assimilar…

Cara muito obrigado mesmo pela ajuda, nem tenho como agradecer tamanha prestatividade.

Estou enviando msn via MP, como dito, e agradeço tal suporte.

Uma vez peguei a versão em português desse livro do Deitel e não gostei muito, talvez eu não tivesse usado da forma como deveria o livro.

O mfjeng deu uma outra solução possível para o problema. O que diferente da minha é que ele monta outro vetor SEM o valor maior. Eu somente li o próprio vetor de novo e fui checando se o valor da posição era igual ao valor considerado maior.

Há muitas soluções para uma coisa só.
Aí entra a arte de programação…que me fascinou…

E de nada aí rapaz! Conte aí com o pessoal do GUJ e comigo aqui. No que puder eu ajudo…sou meio iniciante também, mas acho que já sei umas coisinhas, rsrsrs…

O DEITEL enrola muito mas vai construindo bem o teu pensamento sobre os assuntos. Eu achei excelente apesar de cansativo.

PS: Só deixar dar um toque aqui. Como já está resolvido, edita o seu primeito post, do tópico e coloca no título do tópico: [resolvido]. Porque de repente o pessoal entra, posta uma solução sem ler o resto do tópico e vê que já tá resolvido e é desagradável, né? Kkkk

Ja enviei e estou mudando o nome do tópico.

Usei por base aquele corpo do seu código e fiz alguns ajustes que considerei necessários.

Agora vou partir pro próximo, com medo de chegar no último (é aquele que postei no tópico inicial que tem que fazer um desenho).