2017-06-22 1 views
0

J'ai une question basique sur java et je veux l'implémenter en java. QuestioProgrammation logique en Java basée sur les conditions

i ont un tableau de nombre entier de 1 à 50. int a [] = {1,2,3} ............ 50

si un [i] est divisé par 2, puis il affichera "Bonjour". Si un [i] est divisé par 3, il affichera "Monde". Si un [i] est divisé par 5 et 2, il affichera "Hello World".

i ont essayé le programme ci-dessous, mais il montre la production correcte

package test; 

public class Test { 

    public static void main(String[] args) { 
     int []a = {1,2,3,4,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20}; 

     for (int i = 0; i < a.length; i++) { 
      if(a[i]%2==0) { 
       System.out.println("Hello"); 
      } else if(a[i]%3==0) { 
       System.out.println("World"); 
      } else if(a[i]%2==0 && a[i]%5==0) { 
       System.out.println("Hello World"); 
      } 
     } 

    } 

} 
+0

Voulez-vous dire "si un [i] est ** divisible ** par ..."? – khelwood

+0

_ "si un [i] est divisé par 5 et 2 alors il montrera ..." _ Votre dernière clause else-if compare 3 et 5, pas 2 et 5. –

+0

_si un [i] est divisé par 5 et 2 alors il montrera "Hello World" ._ Votre code énonce: 'a [i]% 3 == 0 && a [i]% 5 == 0'. – Flown

Répondre

2

Vous avez écrit un « [i] est divisé par 5 et 2 », mais votre code contient un « 3 »:

} else if(a[i]%3==0 && a[i]%5==0) { 

doit devenir

} else if(a[i]%2==0 && a[i]%5==0) { 

Mais le problème est que votre si les déclarations sont ordonnées de manière à ce 3ème optio n n'est jamais atteint, vous devez changer votre "else ifs" en "if" (sauf si vous avez d'autres intentions, alors vous devrez peut-être réordonner les instructions à la place, mais alors vous devez penser à ce que vous voulez faire avec nombres divisibles par 2 et 3 ou tous les 2,3 et 5).

+1

En ce qui concerne la dernière instruction: la solution est de changer 'else if' en' if' ou de supprimer la troisième condition et de mettre 'if (a [i]% 5 == 0)' dans 'if (a [i ]% 2 == 0) 'block, qui est aussi plus clair pour lire IMO. – BackSlash

+0

vous voulez dire besoin de mettre les conditions au bon endroit. comme si (a [i]% 2 == 0 && a [i]% 5 == 0) { System.out.println ("Bonjour tout le monde"); } besoin de le mettre en premier –

+1

@Test Nope, je veux dire comme ceci: 'if (a [i]% 2 == 0) {if (a [i]% 5 == 0) {print (" Bonjour tout le monde ") } else {print ("Hello")}} ' – BackSlash

0

J'ai eu la réponse. besoin de placer l'état au bon endroit

if(a[i]%2==0 && a[i]%5==0) { 
    System.out.println("Hello World"); 
} else if(a[i]%3==0) { 
    System.out.println("World"); 
} else if(a[i]%2==0) { 
    System.out.println("Hello"); 
} 

Merci pour votre aide

2

Je ne vois pas tous les cas qui pourraient se tromper que ce code ci-dessous. Le IF est amélioré mais vous ne pouvez pas en sortir trop.

int[] values = {1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; 

    for (int i = 0; i < values.length; i++) { 
     int value = values[i]; 

     if (value % 2 == 0) { 
      if (value % 5 == 0) { 
       System.out.println("Hello World"); 
      } else { 
       System.out.println("Hello"); 
      } 
     } else if (value % 3 == 0) { 
      System.out.println("World"); 
     } 
    } 
0

Un autre exemple serait récursion utiliser pour le résoudre, mais vous atteindre toujours le IFs.

public class Main { 

    public static void main(String[] args) { 
     int[] values = {1, 2, 3, 4, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20}; 

     check(0, values); 
    } 

    private static void check(int index, int[] values) { 
     if (index >= values.length) 
      return; 

     int value = values[index]; 

     if (value % 2 == 0) { 
      if (value % 5 == 0) { 
       System.out.println("Hello World"); 
      } else { 
       System.out.println("Hello"); 
      } 
     } else if (value % 3 == 0) { 
      System.out.println("World"); 
     } 

     check(++index, values); 
    } 
}