如何按字母顺序排列名字
问题描述:
我有3个元素,他们有名字和姓氏的一个按钮。我需要检查他们是否按字母排序,然后按姓氏排序。元素的页面对象是ListV_Sorted。我想我只是按名字排序。 0元素=杰克丹尼尔斯,1元素=约翰费拉,2元素=麦克杜罗夫。 ListV是元素的页面对象。我得到一个错误它说预计真实但发现错误。如何按字母顺序排列名字
@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;
}
答
取而代之的是java.util.LinkedList
你应该使用java.util.TreeSet
排序使用的数据结构中的输入。
我已经创建了一个稍微改变的代码版本,在程序执行后打印出“true”。主要区别在于使用java.util.TreeSet
和Collection
接口。
这里是改变的版本:
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
非常感谢结果如何打印出错误,错误,错误。 –
'分裂( “”);'将字符串分割成单个字符。因此,product_names.get(0)将是“Jack Daniels”,product_names.get(1)=“J”和product_names.get(2)=“s”。我不认为这是你打算做的。我也没有真正得到你想要的整个分裂+为每个名字添加3个值到列表中。我认为你需要重新思考你的整个方法,并可能利用这个机会来学习如何使用调试器。 –
元素基本上是一个字符串=“杰克丹尼尔斯”我试图分裂两个单词。你会怎么做。 –
按空格分割而不是空字符串将是一个开始。但是,我仍然不明白你为什么想分裂。为什么不直接比较字符串呢? –