Java 使用嵌套循环删除重复项

Java 使用嵌套循环删除重复项,java,nested-loops,Java,Nested Loops,我正在尝试开发一个程序,可以通过字符串排序并删除重复项。我正在为此使用嵌套循环。然而,当我运行代码时,它只是一遍又一遍地重复几个单词 package q2; import java.util.Arrays; public class Q2 { public static void main(String[] args) { String sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO

我正在尝试开发一个程序,可以通过字符串排序并删除重复项。我正在为此使用嵌套循环。然而,当我运行代码时,它只是一遍又一遍地重复几个单词

package q2;

import java.util.Arrays;

public class Q2 {

public static void main(String[] args) {
    String sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN DO FOR YOUR COUNTRY";
    String lowercaseSentence;
    lowercaseSentence = sentence.toLowerCase();
    String[] sentenceWords = lowercaseSentence.split(" ");
    int LenghtofSentence = sentenceWords.length;
    String[] unique = new String[LenghtofSentence];

    for (int i = 0; i <= LenghtofSentence; i++) {
        //System.out.println(i);
        for (int j = 0; j <= LenghtofSentence; j++) {
            if (!sentenceWords[i].equals(unique)) {
               unique[j] = sentenceWords[i];
               j++;
            } else {
                j++;
            } 
         }
     System.out.println(Arrays.toString(unique));
   }
} 
} 
我正在为此使用Netbeans。感谢您的帮助。 谢谢
Keir

我不知道您为什么要使用for循环来实现此功能,并使其变得复杂

只需在java中使用
Set
即可完成<代码>集合是一个不包含重复元素的集合。更多

在使用上述代码之前,还要导入以下内容:

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;

使用
LinkedHashSet
将保持单词在数组中出现的顺序。希望能有所帮助。

让你的问题看起来是一个练习,我认为我们不应该给你一个解决方案,而应该给你一个解释如何找到解决方案的建议。首先,如果您可以在练习中使用Java集合,那么使用
Set
将给您带来改进,因为它将检查单词是否重复,并为您提供一个不重复的集合

如果在练习中只能使用数组,则必须使用不同的解决方案。 我建议首先迭代
unique
数组,以检查是否存在重复项,然后对
unique
数组进行排序

另一方面,Netbeans允许您一步一步地执行代码(正如@f1sh所建议的)

封装测试;
导入java.util.ArrayList;
导入java.util.array;
公开课考试{
公共静态void main(字符串[]args){
String句子=“不要问你的国家能为你做什么,问问你能为你的国家做什么”;
字符串小写内容;
lowercaseSentence=句子。toLowerCase();
String[]sentenceWords=小写内容.split(“”);
int LenghtofSentence=sentenceWords.length;
String[]uniqueString=新字符串[LenghtofSentence];
ArrayList unique=新的ArrayList();
int k=0;

对于(inti=0;i首先,您的逻辑看起来并不完美


ArrayIndexOutOfBound
是因为数组的索引错误而发生的
unique
sentenceWords
替换
为什么不直接使用
集(例如
LinkedHashSet
)?当你为
这样的循环编写
时:
for(int i=0;i
sentenceWords[i].equals(unique)
使用
LinkedHashSet
保留词序。
Set<String> mySet = new LinkedHashSet<String>(Arrays.asList(sentenceWords));
String[] unique = myset.toArray(new String[myset.size()]);
import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
 package test;


import java.util.ArrayList;

import java.util.Arrays;


public class Test {


      public static void main(String[] args) {

          String sentence = "ASK NOT WHAT YOUR COUNTRY CAN DO FOR YOU ASK WHAT YOU CAN  DO FOR YOUR COUNTRY";

          String lowercaseSentence;

          lowercaseSentence = sentence.toLowerCase();

          String[] sentenceWords = lowercaseSentence.split(" ");

          int LenghtofSentence = sentenceWords.length;

          String[] uniqueString = new String[LenghtofSentence];

           ArrayList<String> unique = new ArrayList<String>();

          int k=0;
          for(int i=0;i<LenghtofSentence;i++)
          {
             if(!unique.contains(sentenceWords[i]))
             {
                unique.add(sentenceWords[i]);
                 k++;
             }
          }
          for(int i=0;i<unique.size();i++)
          {
              uniqueString[i] = unique.get(i);
              System.out.print(" "+uniqueString[i]);
          }
       }
    } 
String[] unique = Arrays.stream(sentenceWords)
    .distinct().sorted().toArray(String[]::new);