Kan iemand mij uitleggen wat een schildwacht doet op Java? Of hoe het werkt?

Ik probeer te begrijpen wat sentinel is of hoe het werkt met het programma. Hoe dan ook, dit is het codeblok dat ik probeer te begrijpen. Ik weet dat het een schildwachtlus is, maar ik weet niet wat het doet.

private static final int SENTINEL = -999

Van wat ik heb gegoogled, is dat door een negatief geheel getal te hebben, dit het einde van een reeks aangeeft. Maar hoe doet het dat? Oh, en hoe initialiseer ik de sentinel? Is het al geïnitialiseerd?

public static int gameScore(int[] teamBoxScore) { //This is telling me the name of an array
int output = 0;
for (int v : teamBoxScore){ //I know that this the values of the array will be stored in the variable "v".
     if (v !=SENTIENL) {// 
         output += v; 
      }
}
return output;
} 

Alstublieft en bedankt! Ik leer coderen met Java


Antwoord 1, autoriteit 100%

Er is niets bijzonders aan een ‘schildwacht’. Het is gewoon een constante van uw keuze die geen legitieme waarde is in een gegevensset, dus u kunt deze gebruiken om het einde van een reeks te markeren. Als de boxscore van een team bijvoorbeeld nooit minder dan nul zal zijn, kan -999 (of een andere negatieve waarde) worden gebruikt als een break/end-markering.

Meestal zijn er betere, schonere manieren om dit te doen.


Antwoord 2, autoriteit 29%

om sentinel-controlled repetitionte begrijpen, laten we een simplevoorbeeld bekijken,

import java.util.Scanner; // program uses class Scanner
public class ClassAverage
{
  public static void main(String[] args)
  {
     // create Scanner to obtain input from command window
     Scanner input = new Scanner(System.in);
     // initialization phase
     int total = 0; // initialize sum of grades
     int gradeCounter = 0; // initialize # of grades entered so far
     // processing phase
     // prompt for input and read grade from user    
     System.out.print("Enter grade or -1 to quit: ");
     int grade = input.nextInt();                    
     // loop until sentinel value read from user
     while (grade != -1)
     {
        total = total + grade; // add grade to total
        gradeCounter = gradeCounter + 1; // increment counter
        // prompt for input and read next grade from user
        System.out.print("Enter grade or -1 to quit: "); 
        grade = input.nextInt();                         
     }
     // termination phase
     // if user entered at least one grade...
     if (gradeCounter != 0)
     {
        // use number with decimal point to calculate average of grades
        double average = (double) total / gradeCounter;                
        // display total and average (with two digits of precision)
        System.out.printf("%nTotal of the %d grades entered is %d%n",
           gradeCounter, total);
        System.out.printf("Class average is %.2f%n", average);
     }
     else // no grades were entered, so output appropriate message
        System.out.println("No grades were entered");
  }
} // end class ClassAverage

laten we het nu uitvoeren

Enter grade or -1 to quit: 97
Enter grade or -1 to quit: 88
Enter grade or -1 to quit: 72
Enter grade or -1 to quit: -1
Total of the 3 grades entered is 257
Class average is 85.67

In een door de schildwacht gecontroleerde lus moeten prompts de gebruiker aan de schildwacht herinneren. het is een goede gewoonte om te doen

referentie: Java™ How To Program (Early Objects), tiende editie


Antwoord 3, autoriteit 14%

Schildwachtwaarde wordt gebruikt om extra controles in loops te voorkomen.

Bij het zoeken naar een bepaalde waarde in een ongesorteerde lijst, wordt elk element vergeleken met deze waarde, waarbij de lus eindigt wanneer gelijkheid wordt gevonden; om echter het geval aan te pakken dat de waarde afwezig zou zijn, moet men ook na elke stap testen of de zoekopdracht niet succesvol is voltooid. Door de gezochte waarde aan het einde van de lijst toe te voegen, is een mislukte zoekopdracht niet langer mogelijk en is er geen expliciete beëindigingstest vereist in de binnenste lus; achteraf moet men nog beslissen of er een echte match is gevonden, maar deze test hoeft maar één keer te worden uitgevoerd in plaats van bij elke iteratie.

Raadpleeg https://en.wikipedia.org/wiki/Sentinel_value

Other episodes