Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

251
Vistas
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 Respuestas
Responde la pregunta

0

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

over 4 years ago · Santiago Trujillo Denunciar

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda