Olá!
Você poderiam me dá um exemplo de como funciona o valor de sentinela (while) ?
[quote=hackum]Olá!
Vocês poderiam me dá um exemplo de como funciona o valor de sentinela (while) ?
[/quote]
sentinela?
Exato!
Repetição controlada por sentinela.
Será se alguem poderia me ajudar ?
sentinela? x-man?
hackum,
explica-se melhor kra!
da onde vc tirou esse ‘sentila’ ?
pelomenos aqui em java, n usamos este termo para estrutura de repetição WHILE
nao seria a verificação true ou false n?
por exemplo:
[code]int contador = -1;
while(contador != 0){
}[/code]
Sou iniciante em Java, estou falando na lingua do livro “Java como programar”, foi ele que me disse isso. Veja: Formulando algoritmos: repetição contrada por sentinela
Desenvolva um programa para tirar a média da classe que processe s notas de acordo com um número arbitrário de alunos toda vez que é executado.
Código:
// Fig. 4.9: GradeBook.java
// Classe GradeBook que resolve o programa da média da classe utilizando
// repetição controlado por sentinela.
import java.util.Scanner; // programa utiliza a classe Scanner
public class GradeBook
{
private String courseName; // nome do curso que essa GradeBook representa
// construtor inicializa courseName
public GradeBook( String name )
{
courseName = name; // inicializa courseName
} // fim do construtor
// método para configurar o nome do curso
public void setCourseName( String name )
{
courseName = name; // armazena o nome do curso
} // fim do método setCourseName
// método para recuperar o nome do curso
public String getCourseName()
{
return courseName;
} // fim do método getCourseName
// exibe uma mensagem de boas-vindas para o usuário GradeBook
public void displayMessage()
{
// getCourseName obtém o nome do curso
System.out.printf( "Welcome to the grade book for\n%s!\n\n",
getCourseName() );
} // fim do método displayMessage
// determina a média de um número arbitrário de notas
public void determineClassAverage()
{
// cria Scanner para obter entrada a partir da janela de comando
Scanner input = new Scanner( System.in );
int total; // soma das notas
int gradeCounter; // número de notas inseridas
int grade; // valor da nota
double average; // número com ponto de fração decimal para a média
// fase de inicialização
total = 0; // inicializa o total
gradeCounter = 0; // inicializa o contador de loops
// fase de processamento
// solicita entrada e lê a nota do usuário
System.out.print( "Enter grade or -1 to quit: " );
grade = input.nextInt();
// faz um loop até ler o valor de sentinela inserido pelo usuário
while ( grade != -1 )
{
total = total + grade; // adiciona grade a total
gradeCounter = gradeCounter + 1; // incrementa counter
// solicita entrada e lê a próxima nota fornecida pelo usuário
System.out.print( "Enter grade or -1 to quit: " );
grade = input.nextInt();
} // fim do while
// fase de término
// se usuário inseriu pelo menos uma nota...
if ( gradeCounter != 0 )
{
// calcula a média de todas as notas inseridas
average = (double) total / gradeCounter;
// exibe o total e a média (com dois dígitos de precisão)
System.out.printf( "\nTotal of the %d grades entered is %d\n",
gradeCounter, total );
System.out.printf( "Class average is %.2f\n", average );
} // fim do if
else // nenhuma nota foi inserida, assim gera a saída da mensagem apropriada
System.out.println( "No grades were entered" );
} // fim do método determineClassAverage
} // fim da classe GradeBook
// Fig. 4.10: GradeBookTest.Java
// Cria o objeto da classe GradeBook e invoca seu método determineClassAverage
public class GradeBookTest
{
public static void main( String args[] )
{
// cria o objeto myGradeBookda classe GradeBook e
// passa o nome de cursor para o construtor
GradeBook myGradeBook = new GradeBook(
"CS101 Introduction to Java Programming" );
myGradeBook.displayMessage(); // exibe a mensagem welcome
myGradeBook.determineClassAverage(); // encontra a média das notas
} // fim de main
} // fim da classe GradeBookTest
Desculpe, enviei dois tópicos seguidos contendo as mesmas informações.
Pois é cara ao meu ver esse sentinela ai cujo nome nunca vi deve ser a verificaçao dentro do while mesmo mas “true ou false” simples.
Ah, entendi. Ele chama de sentinela a condição.
Ok, você simplesmente coloca uma condição no while para que o código se repita. Por exemplo:
public class InfladorDeEgo {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
System.out.println("Você é o melhor! Diga "Eu sou o melhor" para sair!");
String sentinela = in.nextLine();
while (!sentinela.equalsIgnoreCase("Eu sou o melhor")) {
System.out.println("Você é o melhor! Diga \"Eu sou o melhor\" para sair!");
String sentinela = in.nextLine();
}
}
}
Olá Everton!
É exatamente isso, é pq estou estudando pelo livro do Java como programar, ele não me disse nada de true ou false, simplesmente deu o nome de valor de sentinela. E eu não estou consiguindo compreender como está no código a qual eu passei logo acima. Será se você poderia me dá um exemplo de como funciona o while false ou true ? Parece que o deitel complicou um pouco nesse ensinamento.
Olá ViniGody
Não consigui compreender o códico que você colocou.
No caso você colocou duas vezes o “System.out.println(“Você é o melhor! Diga “Eu sou o melhor” para sair!”);” ?
Pq ?
Claro cara o Vini deu um exemplo ai em cima mas, dou um tb
por exemplo se eu quiser imprimir meu nome dez vezes:
[code]int contador = 0;
// aqui no While ele verifica se contador realmente é menor do que 10 se for verdade(true) ele entra dentro do while e imprime everton a 1º vez
while(contador < 10){
System.out.println(“everton”); // aqui ele vai imprimir no Console everton
contador ++; // esse contador++ significa que estou adicionando um ao contador seria mesma coisa que contador = contador +1, entao toda vez que ele passar por aqui contador vai receber 1. Após contador receber 1 ele volta de novo na verificaçao do While e verifica se contador é menor do que 10. No caso agora contador vale 1, como 1 e menor do que 10 ele vai entrar de novo no While e imprimir everton de novo. E vai fazer isso até contador ser menor do que 10. Quando for mentira(false) ou quando contador for maior do que dez ai ele sai do while e nao imprime mais everton. Entendeu?
}[/code]
Certo. Mas no caso eu quero que o usuário digita um valor para que o contador pare na hora que ele deseja. Como seria ?
Hum ai vc pergunta para o usuario por exemplo: “Digite 1 para sair”.
[code]int contador = 0;
Scanner verificaContador = new Scanner(System.in);
while(contador != 1){
System.out.println( contador +"e");
System.out.println("digite 1 para sair");
contador = verificaContador.nextInt(); // aqui eu uso nextInt pq estou assumindo que o usuario ira digitar o numero "1" que é um inteiro para ele poder sair
}[/code]
Analisando o código que eu postei, como seria?
# // fase de inicialização
# total = 0; // inicializa o total
# gradeCounter = 0; // inicializa o contador de loops
#
# // fase de processamento
# // solicita entrada e lê a nota do usuário
# System.out.print( "Enter grade or -1 to quit: " );
# grade = input.nextInt();
#
# // faz um loop até ler o valor de sentinela inserido pelo usuário
# while ( grade != -1 )
# {
# total = total + grade; // adiciona grade a total
# gradeCounter = gradeCounter + 1; // incrementa counter
#
# // solicita entrada e lê a próxima nota fornecida pelo usuário
# System.out.print( "Enter grade or -1 to quit: " );
# grade = input.nextInt();
# } // fim do while
Poderia me explicar em base nesse código ?
[quote=hackum]Analisando o código que eu postei, como seria?
# // fase de inicialização
# total = 0; // inicializa o total
# gradeCounter = 0; // inicializa o contador de loops
#
# // fase de processamento
# // solicita entrada e lê a nota do usuário
# System.out.print( "Enter grade or -1 to quit: " );
# grade = input.nextInt();
#
# // faz um loop até ler o valor de sentinela inserido pelo usuário
# while ( grade != -1 )
# {
# total = total + grade; // adiciona grade a total
# gradeCounter = gradeCounter + 1; // incrementa counter
#
# // solicita entrada e lê a próxima nota fornecida pelo usuário
# System.out.print( "Enter grade or -1 to quit: " );
# grade = input.nextInt();
# } // fim do while
Poderia me explicar em base nesse código ?[/quote]
No eu codigo grade que verifica se o while vai se repetir ou nao note que aqui ele pedei para o usuario digitar:
System.out.print( "Enter grade or -1 to quit: " );
e aqui grade recebe o que o cara digitar:
grade = input.nextInt();
Se grade receber -1 ele vai sair do while se ele receber algo diferente de -1 ele repetir novamente o while.
[quote=hackum]Não consigui compreender o códico que você colocou.
No caso você colocou duas vezes o “System.out.println(“Você é o melhor! Diga “Eu sou o melhor” para sair!”);” ?
Pq ?[/quote]
Porque o while testa a condição antes de entrar na repetição. E qual seria o valor da variável sentinela antes da repetição?
Daria para eliminar essa repetição se colocarmos um valor que não invalida o while:
public class InfladorDeEgo {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String sentinela = ""; //Ao invés de fazer a leitura, inicializamos com um valor diferente de "Eu sou o melhor"
while (!sentinela.equalsIgnoreCase("Eu sou o melhor")) {
System.out.println("Você é o melhor! Diga \"Eu sou o melhor\" para sair!");
String sentinela = in.nextLine();
}
}
}
Ou se trocarmos para um bloco do…while:
public class InfladorDeEgo {
public static void main(String args[]) {
Scanner in = new Scanner(System.in);
String sentinela; //A leitura agora será feita antes do teste
do {
System.out.println("Você é o melhor! Diga \"Eu sou o melhor\" para sair!");
String sentinela = in.nextLine();
} while (!sentinela.equalsIgnoreCase("Eu sou o melhor"))
}
}
Obrigado Everton e ViniGodoy, enfim… vocês tiraram minha dúvida. No caso no exemplo do ViniGodoy, eu achei mais fácil utilizar o do…while, fica mais fácil de ler o código.
Enfim… Um grande abraço!