2017-09-29 4 views
1

Ich habe 3 Elemente und sie haben Vornamen und Nachnamen es ist ein Knopf. Ich muss überprüfen, ob sie nach dem Vornamen und dann nach dem Nachnamen alphabetisch sortiert sind. Das Seitenobjekt für Elemente ist ListV_Sorted. Ich denke ich habe nur nach Vornamen sortiert. 0 Element = Jack Daniels, 1 Element = John Fera, 2 Element = Mike Durov. ListV ist ein Seitenobjekt für die Elemente. Ich bekomme einen Fehler Es wird erwartet, dass es wahr ist, aber falsch gefunden.Sortieren nach Vorname alphabetisch und nach Nachname

@SuppressWarnings("unchecked") 
public void sortingOrder() { 

    Log.log(driver).info("About to Alphebetically Sort"); 
    List<MobileElement> products_MobileElements = new LinkedList<MobileElement>(); 
    products_MobileElements = (List<MobileElement>) TicketPassesNames; 
    LinkedList<String> product_names = new LinkedList<String>(); 

    for(int i=0;i<products_MobileElements.size();i++){ 

     String s = products_MobileElements.get(i).getAttribute("checked"); 
     String[] tokens = s.split(""); 
     String firstName = ""; 
     String lastName = ""; 
     if(tokens.length > 0) { 
      firstName = tokens[0]; 
      lastName = tokens[tokens.length -1]; 
      product_names.add(s); 
      product_names.add(firstName); 
      product_names.add(lastName); 
     } 
    } 
    boolean result = checkAlphabeticalOrder(product_names); 

    Assert.assertEquals(checkAlphabeticalOrder(product_names), true); 
    Log.log(driver).info("Tickest Passes names are in alphabetical order."); 
    System.out.println(result); 
} 

//Method takes a String to Sort AlphabeticalLy 
public static boolean checkAlphabeticalOrder(LinkedList<String> product_names){ 

    String previous = ""; // empty string 

    for (final String current: product_names) { 
     if (current.compareTo(previous) < 0) 
      return false; 
     previous = current; 
    } 

    return true; 
} 
+0

'split ("");' den String in einzelne Zeichen aufgeteilt. So wird product_names.get (0) "Jack Daniels", product_names.get (1) = "J" und product_names.get (2) = "s" sein. Ich denke nicht, dass Sie das vorhaben. Ich bekomme auch nicht wirklich, was Sie beabsichtigen, mit dieser ganzen Aufteilung + Hinzufügen von 3 Werten in die Liste für jeden Namen. Ich denke, Sie müssen Ihren gesamten Ansatz überdenken und wahrscheinlich die Gelegenheit nutzen, um zu lernen, wie man einen Debugger verwendet. –

+0

Element im Grunde eine Zeichenfolge = "Jack Daniels" Ich habe versucht, zwei Wörter zu teilen. Wie würdest du es machen. –

+0

Die Aufteilung nach Leerzeichen anstelle einer leeren Zeichenfolge wäre ein Anfang. Aber nochmal: Ich verstehe immer noch nicht, warum du dich überhaupt teilen willst. Warum vergleichen Sie nicht einfach die Saiten so wie sie sind? –

Antwort

1

Statt eines java.util.LinkedList sollten Sie eine java.util.TreeSet sortieren die Eingabe einer Datenstruktur verwendet werden.

Ich habe eine leicht veränderte Version Ihres Codes erstellt, der nach der Programmausführung "true" ausgibt. Der Hauptunterschied ist jedoch die Verwendung der java.util.TreeSet und der Collection Schnittstelle. Hier

ist die geänderte Version:

import java.text.ParseException; 
import java.util.Arrays; 
import java.util.Collection; 
import java.util.List; 
import java.util.TreeSet; 

public class SimpleTests2 { 

    public static void main(String[] args) throws ParseException { 

     sortingOrder(); 
    } 

    //Method takes a String to Sort AlphabeticalLy 
    public static boolean checkAlphabeticalOrder(Collection<String> product_names) { 

     String previous = ""; // empty string 

     for (final String current : product_names) { 
      if (current.compareTo(previous) < 0) 
       return false; 
      previous = current; 
     } 

     return true; 
    } 

    @SuppressWarnings("unchecked") 
    public static void sortingOrder() { 

//  Log.log(driver).info("About to Alphebetically Sort"); 
     List<MobileElement> products_MobileElements; 
     products_MobileElements = Arrays.asList(
       new MobileElement("Mike Durov"), new MobileElement("Jack Daniels"), new MobileElement("John Fera")); 
     // Here is the main change to your code! 
     Collection<String> product_names = new TreeSet<>(); 

     for (int i = 0; i < products_MobileElements.size(); i++) { 

      String s = products_MobileElements.get(i).getAttribute("checked"); 
      String[] tokens = s.split(" "); 
      String firstName = ""; 
      String lastName = ""; 
      if (tokens.length > 0) { 
       firstName = tokens[0]; 
       lastName = tokens[tokens.length - 1]; 
       product_names.add(s); 
       product_names.add(firstName); 
       product_names.add(lastName); 
      } 
     } 
     boolean result = checkAlphabeticalOrder(product_names); 

//  Assert.assertEquals(checkAlphabeticalOrder(product_names), true); 
//  Log.log(driver).info("Tickest Passes names are in alphabetical order."); 
     System.out.println(result); 
     System.out.println(product_names); 
    } 


    private static class MobileElement { 

     private String name; 

     public MobileElement(String name) { 
      this.name = name; 
     } 

     public String getAttribute(String checked) { 
      return name; 
     } 
    } 
} 
+0

Vielen Dank, wie das Ergebnis falsch, falsch, falsch ausgibt. –

Verwandte Themen