Java中的重复检查器
好的,我是这个网站的新手,但我知道我不应该在这里问HW问题,但我问的确实是HW,但它已经完成并提交(并评分),我只是希望我的程序能够更好地理解:) 为了证明我已经完成了,并且没有尝试快速完成,这里有一个到提交页面的链接: 现在在程序上…我应该创建一个程序,检查用户输入中的重复字符串,然后按排序顺序输出所有“唯一”字符串(不重复的字符串),然后按排序顺序在先前输出的正下方输出“非唯一”字符串。我的指导老师告诉我们,我们必须使用一个“三重嵌套循环”,我假设它只是for循环中的for循环,for循环中的for循环……我得到了所有需要将字符串存储在数组中的结果,在这种情况下,我无法也没有找到其他方法。我提交的这份作业是:Java中的重复检查器,java,Java,好的,我是这个网站的新手,但我知道我不应该在这里问HW问题,但我问的确实是HW,但它已经完成并提交(并评分),我只是希望我的程序能够更好地理解:) 为了证明我已经完成了,并且没有尝试快速完成,这里有一个到提交页面的链接: 现在在程序上…我应该创建一个程序,检查用户输入中的重复字符串,然后按排序顺序输出所有“唯一”字符串(不重复的字符串),然后按排序顺序在先前输出的正下方输出“非唯一”字符串。我的指导老师告诉我们,我们必须使用一个“三重嵌套循环”,我假设它只是for循环中的for循环,for循环
package Homework2;
import java.util.Scanner;
public class Homework2 {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);
System.out.println("Enter a list of words:");
String[] words = stdin.nextLine().split(" ");
System.out.println(words.length);
String[] array = new String[words.length];
for (int i = 0; i < words.length; i++) {
if(words == words)
for (int j = 0; j < words.length; j++) {
array[j] = words;
System.out.println(array[j]);
}
}
}
}
package作业2;
导入java.util.Scanner;
公共课家庭作业2{
公共静态void main(字符串[]args){
扫描仪标准输入=新扫描仪(System.in);
System.out.println(“输入单词列表:”);
String[]words=stdin.nextLine().split(“”);
System.out.println(单词长度);
String[]数组=新字符串[words.length];
for(int i=0;i
我想再次强调,我已经提交了这项作业,我只是希望能够正确地完成这项作业,以进一步加深我的理解
任何帮助都将不胜感激 此代码有两个明显的编译时问题:
words==words
始终为真。我想你是想测试这条线是否有重复,但这不是做这件事的方法
array[j]=words
尝试将字符串[]分配给字符串变量
这个作业实际上比乍一看要难一点。最棘手的部分是按排序顺序打印唯一字符串。最实用的解决方案是使用链表,这允许在列表中间插入。我确实假设不允许使用Collections.sort()。我想也可能不允许使用LinkedList,但你在问题中没有提到这一点
String[] words = { "1", "4", "2", "4", "3", "1" };
LinkedList<String> unique = new LinkedList<String>();
LinkedList<String> duplicates = new LinkedList<String>();
unique.add(words[0]);
for (int i = 1; i < words.length; i++)
{
boolean found = false;
for (String uniqueWord : unique)
{
if (words[i].equals(uniqueWord))
{
duplicates.add(words[i]);
found = true;
break;
}
}
if (!found)
{
boolean added = false;
for (int index = 0; index < unique.size(); index++)
{
if (words[i].compareTo(unique.get(index)) < 0)
{
unique.add(index, words[i]);
added = true;
break;
}
}
if (!added)
unique.addLast(words[i]);
}
}
for (String word : unique)
System.out.println(word);
System.out.println("--");
for (String word : duplicates)
System.out.println(word);
String[]words={“1”、“4”、“2”、“4”、“3”、“1”};
LinkedList unique=新建LinkedList();
LinkedList duplicates=新建LinkedList();
唯一。添加(字[0]);
for(int i=1;i
我喜欢用一个相当简单的解决方案来解决这个问题:
Set<String> used = new HashSet<>();
public boolean wasUsed(String s) {
return used.add(s);
}
//using the method
if (wasUsed(yourString)) {
// duplicate!
}
Set used=new HashSet();
已使用公共布尔值(字符串s){
返回已使用。添加(s);
}
//使用该方法
如果(使用了(你的字符串)){
//重复!
}
集合仅包含一个元素的1个元素,添加重复项时将返回false。使管理变得非常容易
至于您的场景,我只需保留一组单独的单词,并在您找到重复的单词时将其删除
您可以进一步阅读,了解这些有用的工具。words==words
总是正确的。提交一个甚至不编译的解决方案有点奇怪这是什么words==words?array[j]=words代码>不起作用