2017-01-14 3 views
0

J'ai un peu de difficulté avec mon code. J'essaie de faire correspondre deux positions d'un scanner avec les emplacements d'un tableau. cela fonctionne mais le problème est que le code imprime les nombres deux fois. Comment puis-je résoudre ce problème? J'ai aussi besoin que l'impression reste visible si les deux éléments sont les mêmes. J'ai déjà essayé de trouver la même question mais je n'ai pas pu la trouver.Emplacements correspondants du tableau JAVA

import java.util.Scanner; 

public class memory { 
    int[] memoryGeheugen = {1, 3, 1, 4, 3, 5, 2, 5, 2, 4}; 
    String sterretjes = "*"; 
    boolean dubbel = false; 
    Scanner scan = new Scanner(System.in); 
public void run() { 
    System.out.println("voer de cijfers in positie 1"); 
    int raden1 = scan.nextInt(); 
    System.out.println("voer de cijfer in positie 2"); 
    int raden2 = scan.nextInt(); 
    for (int i = 0; i < memoryGeheugen.length; i++) { 
    if (memoryGeheugen[i] != memoryGeheugen[raden1]){ 
     System.out.print(sterretjes); 
    } 
    else if(memoryGeheugen[i] == memoryGeheugen[raden1]&&memoryGeheugen[i]==memoryGeheugen[raden2]) { 
     System.out.print(memoryGeheugen[raden1]); 
     System.out.print(memoryGeheugen[raden2]); 
    } 
    } 
} 

public static void main(String[] args) { 
    new memory().run(); 
} 

sortie:

voer de cijfers in positie 1: 
1 
voer de cijfer in positie 2: 
4 

*33**33***** 
+1

Quel est l'objectif du programme? –

+0

J'essaie de faire un jeu appelé mémoire. Vous devez deviner toutes les paires pour gagner le match. et si vous ne devinez pas la paire, les chiffres reviennent cachés. Jusqu'à présent, j'essaie de faire cela étape par étape, mais seulement réussi partiellement. – user7418776

Répondre

0

Votre déclaration:

if(memoryGeheugen[i] == memoryGeheugen[raden1]&&memoryGeheugen[i]==memoryGeheugen[raden2]) 

dit essentiellement memoryGeheugen [raden1] et memoryGeheugen [raden2] sont égales entre elles.

Donc, si vous imprimez comme ceci:

System.out.print(memoryGeheugen[raden1]); 
System.out.print(memoryGeheugen[raden2]); 

Ensuite, vous aurez des valeurs dupliquées imprimé parce que votre condition logique les détermine comme égaux.

Par conséquent, commenter la deuxième ou première ligne, car les deux lignes d'impression est inutile si memoryGeheugen [raden1] = memoryGeheugen [raden2]:

System.out.print(memoryGeheugen[raden1]); 
//System.out.print(memoryGeheugen[raden2]); 

Et, votre susceptibles d'obtenir des valeurs non-double.

+0

tnx pour la réponse – user7418776

0

Il n'y a pas d'erreur dans votre code, il imprime à double raison de la

System.out.print(memoryGeheugen[raden1]); //raden1 = 1 memoryGeheugen[1] = 3 
System.out.print(memoryGeheugen[raden2]); //raden1 = 4 memoryGeheugen[4] = 3 

Ce imprimera

* 33 ** 33 ****

Utilisez System.out::println si vous voulez des lignes séparées

if (memoryGeheugen[i] != memoryGeheugen[raden1]){ 
    System.out.println(sterretjes); 
} 
else if(memoryGeheugen[i] == memoryGeheugen[raden1]&&memoryGeheugen[i]==memoryGeheugen[raden2]) { 
    System.out.println(memoryGeheugen[raden1]); 
    System.out.println(memoryGeheugen[raden2]); 
} 

Cela les imprimer dans des lignes distinctes

*
*
*
*
+0

si je le change rien ne se passe à cause de la! = Impressions '*' ci-dessus. le but du code est qu'il l'imprime en double, mais pas deux fois de suite juste à côté de l'autre (33 ***). ou n'est-ce pas ce que tu voulais dire? tnx pour la réponse – user7418776

+0

@ user7418776 Je pense que j'ai mis à jour la réponse en fonction de vos besoins. –

+0

tnx pour le temps et la réponse, je vais essayer de trouver un autre moyen de le faire. parce que j'en ai besoin alignés à l'emplacement exact de l'entrée du scanner. – user7418776