2015-12-01 5 views
0

J'écris un programme qui aide un utilisateur à faire un Top X ou une liste de favoris.Bubble Search guidée par l'entrée de l'utilisateur?

L'utilisateur saisira d'abord le nombre d'éléments qui figureront dans la liste et qui seront ensuite utilisés pour créer un tableau de la même taille. Ensuite, l'utilisateur remplit le tableau. Enfin, on pose à l'utilisateur une série de questions où le programme compare chaque élément de la liste à un autre élément de la liste, un à la fois, et demande entre les deux quel est celui que vous préférez. En fonction de leur choix, leur score est conservé dans un autre tableau qui stocke des valeurs entières. Lequel est ensuite trié par ordre décroissant. Lorsque j'exécute le programme, il ne compare pas tous les éléments à chaque élément. Par exemple, disons que j'ai un tableau de trois éléments dont les éléments sont "Vanille", "Chocolat" et "Fraise". Il me demandera de comparer la vanille au chocolat, puis la vanille à la fraise. Cependant, il ne comparera pas le chocolat à la fraise et imprimera les résultats. Je veux savoir quelle erreur logique j'obtiens. Je n'ai jamais utilisé une recherche de bulles pour les chaînes.

Voici mon code de référence:

import java.util.Scanner; 

public class FavoriteListMaker { 

public static void main(String[] args) 
{ 

    Scanner inputDevice = new Scanner(System.in); 
    System.out.println("This program is to help you order a favorites list. Please enter the amount of items on the list."); 
    int ListSize = inputDevice.nextInt(); 
    inputDevice.nextLine(); 
    String [] TopXA = new String [ListSize]; 
    int [] TopXB = new int[ListSize]; 

    for (int x = 0; x < TopXA.length; ++ x) 
    { 
     System.out.println("Please enter an item to be organized on the list"); 
     TopXA[x] = inputDevice.nextLine(); 
     System.out.println("You have " + (ListSize - x - 1) + " items left to fill on the list."); 
    } 

    System.out.println("Now we will compare each item on the list with every item on the list one at a time."); 
    System.out.println("We will ask you a series a question on whether you like item A better then item B and tally the score."); 
    System.out.println("At the end the item with the most points wins."); 

    int comparisonsToMake = TopXA.length - 1; 
    for (int y = 0; y < TopXA.length - 1; ++ y) 
    { 
     for (int z = 0; z < comparisonsToMake; ++ z) 
     { 
      if(TopXA[y] != TopXA[z + 1]) 
      { 
       String compareA = TopXA[y]; 
       String compareB = TopXA[z + 1]; 

       System.out.println("Do you prefer " + compareA + " or " + compareB + " ."); 
       System.out.println("If you prefer " + compareA + " Please press 1. If you prefer " + compareB + " please press 2."); 
       int choice = inputDevice.nextInt(); 
       inputDevice.nextLine(); 
       switch(choice) 
       { 
       case 1: 
        TopXB[y] =+ 1; 
        break; 
       case 2: 
        TopXB[z + 1] =+ 1; 
        break; 
       default: 
        System.out.print("I'm sorry but that is not a valid input."); 
       } 
      } 
     } 
     --comparisonsToMake; 
    } 

    int comparisonsToMakeB = TopXB.length - 1; 
    for(int a = 0; a < TopXB.length - 1; ++ a) 
    { 
     for(int b = 0; b < comparisonsToMakeB; ++b) 
     { 
      if(TopXB[b] < TopXB[b + 1]) 
      { 
       String temp = TopXA[b]; 
       TopXA[b] = TopXA[b + 1]; 
       TopXA[b + 1] = temp; 
      } 
     } 
     --comparisonsToMakeB; 
    } 
    for(int q = 0; q < TopXA.length; ++ q) 
    { 
     System.out.print("Your number " + (q + 1) + " pick is " + TopXA[q] + "."); 
    } 

    } 
} 
+0

Je viens de me rendre compte que l'utilisation d'une recherche de bulle pour ce que je fais pourrait être une prémisse intrinsèquement erronée. Donc je suppose que ce que je demande vraiment est ce qui est une méthode alternative pour obtenir une quantité donnée d'éléments dans un tableau pour être comparé à chaque combinaison possible de paires une fois. J'ai également appris que l'utilisation de tableaux parallèles est apparemment une technique maladroite, donc s'il y a une alternative à cela, je vais le prendre. – dpolaristar

Répondre

0

jamais l'esprit que je trouve la réponse .... il était simple en fait. J'ai simplement changé toute instance de z en y.

int comparisonsToMake = TopXA.length - 1; 
for (int y = 0; y < TopXA.length - 1; ++ y) 
{ 
    for (int z = 0; z < comparisonsToMake; ++ z) 
    { 
     if(TopXA[y] != TopXA[z + 1]) // changed TopXA[z + 1] to [y + 1] 
     { 
      String compareA = TopXA[y]; 
      String compareB = TopXA[y + 1]; //instance of change 

      System.out.println("Do you prefer " + compareA + " or " + compareB + " ."); 
      System.out.println("If you prefer " + compareA + " Please press 1. If you prefer " + compareB + " please press 2."); 
      int choice = inputDevice.nextInt(); 
      inputDevice.nextLine(); 
      switch(choice) 
      { 
      case 1: 
       TopXB[y] =+ 1; 
       break; 
      case 2: 
       TopXB[y + 1] =+ 1; //instance of change. 
       break; 
      default: 
       System.out.print("I'm sorry but that is not a valid input."); 
      } 
     } 
    } 
    --comparisonsToMake; 
} 

Honnêtement, je ne sais pas pourquoi j'ai fait ce changement. Probablement parce que j'étais fatigué et que j'y travaillais la nuit dernière et que je pensais à une logique de troll insensée.