Sentinela?

galera como faço para resolver esse problema ?

  1. 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

sentinela é qnd o loop nao termina … é como se fosse um loop infinito …

qm determina qnd ira sair do loop é o usuario …

ex.:

[code]while(true) {
System.out.println("Digite um numero. Se quiser sair digite -1);
if(numeroDigitado == -1) {
System.out.println(“TCHAU”);
break;
}

//faz loginca
}[/code]

    • isso ae !

espero ter ajudado

Verificação para saber se o numero é par

if(numeroDigitado % 2 == 0) { // o % é para pegar o resto da divisao ... System.out.print("NUMERO É PAR ENTAO DEVO IGNORAR ESSE CARA"); }

vlwww

Esse código abaixo deve funcionar…
Caso não entenda alguma coisa, é só perguntar.

import java.util.Scanner;

public class Problema15 {
	private static int menorImpar = Integer.MAX_VALUE;

	public static void main(String[] args){

		Scanner entrada = new Scanner(System.in);
		int numero = entrada.nextInt();
		
		while (numero > 0){
			verificaNumero(numero);
			numero = entrada.nextInt();
		}
		
		if (Problema15.menorImpar > 0){
			System.out.println("O menor ímpar inserido foi: " + Problema15.menorImpar);
		} else {
			System.out.println("Não foi inserido nenhum número ímpar");
		}
	}
	
	private static void verificaNumero(int numero){
		if (numero%2 == 1 && numero < Problema15.menorImpar){
			Problema15.menorImpar = numero;
		}
	}
}

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

}

:wink:

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

}

;)[/quote]

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]

é a sua JVM coloca o tamanho do vetor pra 100

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)).

Abs!

e tem como colocar um valor indefinido?
pq eu coloquei 4 para testar e ele roda, mas qd vou digitar o quinto falor ele estou e para o rodar

desculpe a minha ignorancia caso eu esteja falando merda iajAHUhauHAU

Kara ta ai, tem n maneiras de resolver esse problema, fiz aki a q achei mais rápida

flwwww

import javax.swing.*;
class Problema{
	public static void main(String args[]){
		int numIni, numImp;
		numIni = 0;
		numImp = 1000000000;		
		while( numIni > -1){
			numIni = Integer.parseInt (JOptionPane.showInputDialog("Informe um número"));
			if( numIni%2 == 0 || numIni <= 0 ){
				continue;		
			}else{
				if(numIni < numImp ){
					numImp = numIni;				
				}				
				System.out.println(numIni);
			}	
		}
		System.out.println(numImp);
	}	
}

testei aqui e rodou man!
vlw mesmooo

[quote=thiago_rainmaker]Kara ta ai, tem n maneiras de resolver esse problema, fiz aki a q achei mais rápida

flwwww

import javax.swing.*; class Problema{ public static void main(String args[]){ int numIni, numImp; numIni = 0; numImp = 1000000000; while( numIni > -1){ numIni = Integer.parseInt (JOptionPane.showInputDialog("Informe um número")); if( numIni%2 == 0 || numIni <= 0 ){ continue; }else{ if(numIni < numImp ){ numImp = numIni; } System.out.println(numIni); } } System.out.println(numImp); } } [/quote]

ENTÃO EU ESTOU A QUASE UM MÊS ENGASAGADA, NESSA TAL DE SENTINELA…
VALEW A TODOS AQUI, QUE M AJUDARAM A DESVENDAR ESSE MISTÉRIO :roll: