Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

250
Views
Valor centinela de Sonarlint falso positivo

Tengo el siguiente fragmento de código, donde la herramienta sonarlint dice que mi variable booleana sentinel siempre se evalúa como verdadera, y sentinel = true es una afirmación inútil.

 import static java.lang.System.*; public class Sentinel { private static final int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; public static void main(String[] args) { boolean sentinel = false; int counter = 0; while (!sentinel) { out.println( "Counter: " + counter); out.println( "Array index: " + array[counter] ); counter++; if ( counter == array.length - 1 ) { out.println( "End of the array reached" ); sentinel = true; out.println( "Breaking..." ); break; } } } }

¿Cuál podría ser el problema con el análisis de sonarlint? El código se compila perfectamente y se ejecuta según lo previsto.

Saludos.

Actualizar:

@kkk ha proporcionado dos valiosas respuestas. Vea abajo, pero dejo aquí el que más me gustó:

 import java.util.concurrent.atomic.AtomicBoolean; import static java.lang.System.*; public class Sentinel { private static final int[] array = new int[] { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }; public static void main(String[] args) { AtomicBoolean sentinel = new AtomicBoolean(false); int counter = 0; while ( !sentinel.get() ) { out.println( "Counter: " + counter); out.println( "Array index: " + array[counter] ); counter++; if ( counter == array.length - 1 ) { out.println( "Counter limit reached" ); sentinel.set( true ); out.println( "Breaking..." ); break; } } } }
over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

hacer centinela estático o usuario AtomicBoolean, es un problema de visibilidad

over 4 years ago · Santiago Trujillo Report

0

El cambio realizado por sentinel = true; nunca es visto por while (!sentinel) . Eso es debido a la instrucción break.

Dicho esto, su código es mucho más simple con un bucle for . Tu while simplemente lo hace complejo.

 for(int counter = 0; counter < array.length; counter++) { out.println("Counter: " + counter); out.println("Array index: " + array[counter]); if (counter == array.length - 1) { out.println("End of the array reached"); out.println("Breaking..."); } }

O, mejor aún, haga el counter == array.length - 1 acciones después del ciclo

 for(int counter = 0; counter < array.length; counter++) { out.println("Counter: " + counter); out.println("Array index: " + array[counter]); } out.println("End of the array reached"); out.println("Breaking...");
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!