2015-04-12 138 views
0

//这个程序将打印在字符串如何删除所有的字符串

的矢量我希望这个程序打印向量中的所有最短串的所有最短元素的矢量最长的字符串。输出应该是hello,test,JAVA。最后一个词没有被删除。任何人都可以帮忙,因为条件很清楚,我想。如果长度相同,则应将其删除。

import java.util.Vector; 

class printAllSmallInVectorOfString 
{ 
    public static void main(String[] args) 
    { 
     Vector<String> v=new Vector(); 

     v.addElement("hello"); 
     v.addElement("test"); 
     v.addElement("phytons"); 
     v.addElement("JAVA"); 
     v.addElement("Program"); 
     v.addElement("ultrons"); 


     String largest=""; // define largest 

     for(int i=0 ; i < v.size() ; i++) 
     { 
      // checks if first element is longer 
      if(largest.length() < v.elementAt(i).length()) 
      { 
       // largest stores the string 
       largest=v.elementAt(i); 
      } 
      // condition for elements of same length 
      else if(v.elementAt(i).length() == largest.length()) 
      { 
       System.out.println("The largest element so far is " + largest + " at index " + v.indexOf(largest)); 
       System.out.println(v.elementAt(i) + " at index " + v.indexOf(v.elementAt(i)) + " is the same length as the largest element " + largest + "\n"); 
       // removes second element which is equal with longest 
       v.removeElementAt(i); 
      } 


     } 
     // removes longest element 
     v.removeElementAt(v.indexOf(largest)); 

     for(String z : v) 
     System.out.println(z); 


    } 
} 
+0

不要使用'Vector',它已被弃用。 –

+0

是的我知道,但我只做这个,因为即将在几周内完成考试,在学习指南中有一个问题要求我们这样做,以实际返回所有最短字符串的向量 –

+1

您的逻辑有缺陷。如果要打印矢量中最短的字符串,请首先使用一个确定最短字符串的循环,然后使用另一个循环删除所有较长的元素。 – Veluria

回答

1

这是一个没有任何Java 8功能的简单解决方案。

public static void main(String[] args) { 
    Vector<String> v = new Vector(); 

    v.addElement("hello"); 
    v.addElement("test"); 
    v.addElement("phytons"); 
    v.addElement("JAVA"); 
    v.addElement("Program"); 
    v.addElement("ultrons"); 

    System.out.println(keepShortest(v)); 
} 

public static List<String> keepShortest(List<String> strings) { 
    // Find length of shortest string 
    int shortest = Integer.MAX_VALUE; 
    for (String string : strings) { 
     if (string.length() < shortest) { 
      shortest = string.length(); 
     } 
    } 

    // Populate new list with shortest strings 
    List<String> newList = new ArrayList<>(); 
    for (String string : strings) { 
     if (string.length() == shortest) { 
      newList.add(string); 
     } 
    } 

    return newList; 
} 

正如我上面所说的,你需要:

  • 找到最短的字符串第一
  • 然后取出其中较长的所有字符串的长度;或填充所有等长的字符串的新列表
+0

工作谢谢 –

+0

这是令人困惑,因为它需要一个'List'并返回一个'List',但它也会改变输入。如果你返回一个List,然后返回一个新的List,如果你改变了输入'return void'。 –

+0

@BoristheSpider你是对的;这可能有点令人困惑。我会改变它。 – Veluria

1

我想正是如此做:

public static void main(String[] args) throws Exception { 
    final Collection<String> strings = Arrays.asList(
      "hello", 
      "test", 
      "phytons", 
      "JAVA", 
      "Program", 
      "ultrons" 
    ); 

    final int min = strings.stream() 
      .mapToInt(String::length) 
      .min() 
      .getAsInt(); 

    final Collection<String> shortest = strings.stream() 
      .filter(s -> s.length() == min) 
      .collect(toList()); 

    shortest.forEach(System.out::println); 
} 

首先,不要使用Vector

现在,获取CollectionString的最小长度。

然后取Collectionfilter为该长度的String

最后,循环并打印Collection的内容。

+0

即时通讯还不是很好的集合,但没有一种方法来结合集合与矢量 –

+0

@ColinAnacoura a ['Vector'](https://docs.oracle.com/javase/8/docs/api/java/util/Vector。 html)_is a_'Collection'。 –

+0

好吧会试试看,并让你知道它是如何去 –

相关问题