Desenvolva classe e métodos, necessários para receber números inteiros e positivos, seqüencialmente, um a um,
até que seja fornecido um número negativo (Sentinela). Quando isto ocorrer, deverá ser apresentado o menor dos
números ímpares positivos inseridos. Os números pares, eventualmente inseridos, devem ser ignorados na elaboração
do resultado.
Exemplo: Menor ímpar: Entrada 1: 2
Entrada 2: 9
Entrada 3: 4
Entrada 4: 5
Entrada 5: -1 (Sentinela: Término do laço de entrada)
Saída: Menor ímpar = 5
certo pessoal, lembrando que ele quer que todos os numeros sejam armazenados em algum lugar…pelo menos é que o exemplo mostra… entao fica mais ou menos assim:
package guj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Sentinela {
static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
public static void main(String...args) throws NumberFormatException, IOException{
int numeros[] = new int[Integer.MAX_VALUE];
int i =0;
int menor = Integer.MAX_VALUE,impar;
while(true){
System.out.print("Entre com um numero: ");
numeros[i]= Integer.parseInt(entrada.readLine());
if(numeros[i]<0){
for(int j=0;j<=i-1;j++){
if(numeros[j]%2 != 0){
impar = numeros[j];
if(impar<menor){
menor = impar;
}
}
System.out.println("Entrada"+j+": "+numeros[j]);
}
System.out.println("O menor numero impar é: "+menor);
break;
}
i++;
}
}
}
quando eu vou compilar esse código aparece esse erro
java.lang.NoClassDefFoundError: guj/Sentinela
Exception in thread "main"
[quote=abelgomes]certo pessoal, lembrando que ele quer que todos os numeros sejam armazenados em algum lugar…pelo menos é que o exemplo mostra… entao fica mais ou menos assim:
package guj;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Sentinela {
static BufferedReader entrada = new BufferedReader(new InputStreamReader(System.in));
public static void main(String...args) throws NumberFormatException, IOException{
int numeros[] = new int[Integer.MAX_VALUE];
int i =0;
int menor = Integer.MAX_VALUE,impar;
while(true){
System.out.print("Entre com um numero: ");
numeros[i]= Integer.parseInt(entrada.readLine());
if(numeros[i]<0){
for(int j=0;j<=i-1;j++){
if(numeros[j]%2 != 0){
impar = numeros[j];
if(impar<menor){
menor = impar;
}
}
System.out.println("Entrada"+j+": "+numeros[j]);
}
System.out.println("O menor numero impar é: "+menor);
break;
}
i++;
}
}
}
tem que V que o nome da minha Classe é Sentinela e esta no pacote GUJ…onde esta seua classe…qual o nome do arquivo.java? tem que ser igual…
nesse caso altere o nome do pacote para o seu pacote…ou retire se nao estiver usando pacote… e altere o nome da classe para o nome igual do seu arquivo.java
blz consegui aqui, eu alterei para o nome da Classe mesmo …
só o erro q da agora é qd vms definir o tamanho do Array, ele aparece esse erro …
Exception in thread "main" java.lang.OutOfMemoryError: Requested array size exceeds VM limit
at Sentinela.main(Sentinela.java:12)
[quote=abelgomes]tem que V que o nome da minha Classe é Sentinela e esta no pacote GUJ…onde esta seua classe…qual o nome do arquivo.java? tem que ser igual…
nesse caso altere o nome do pacote para o seu pacote…ou retire se nao estiver usando pacote… e altere o nome da classe para o nome igual do seu arquivo.java[/quote]
Olá abelgomes,
segundo o enunciado do problema e o exemplo dado, não há indícios de que os números inseridos devam ser armazenados, e sim apenas processados!
No entanto, supondo que realmente deva-se armazenar os dados, a solução que vc deu não é adequada!
Para resolver o problema vc utilizou um array de inteiros de tamanho 2147483647 (Integer.MAX_VALUE) (linha 10 do seu código).
Lembrando que em java uma variável int tem tamanho 4 bytes (32-bits), com a sua solução você está reservando 8589934588 bytes para tal array, que equivale aproximadamente à 8GBytes (haja memória RAM).
Caso seja necessário armazenar os dados inseridos, isso pode ser feito facilmente utilizando alguma estrutura de dados como um ArrayList para armazená-los, e, seguindo a solução que eu apresentei anteriormente, adaptá-la guardando o índice do meu ArrayList que contém o menor inteiro, para fácil recuperação, posteriormente. (nesse caso a minha variável (int menorImpar) vira (int indiceDoMenorImpar)).