我有一个学校的作业,这是到目前为止我正在做的笔记
import java.io.*;
import java.util.Scanner;
public class UniquesDupesTester
{
public static void main( String args[] ) throws IOException
{
// make a Scanner and associate it with "UniquesDupes.dat"
// as long as there are Strings in the file
// read in a String,
// create a UniquesDupes object with it
// print the object
Scanner in = new Scanner(new File("UniquesDupes.dat"));
while (in.hasNextLine())
{
String n = in.nextLine();
UniquesDupes a = new UniquesDupes(n);
a.getUniques();
a.getDupes();
System.out.println (a);
}
}
}
单独的文件
import java.util.Set;
import java.util.TreeSet;
import java.util.Arrays;
import java.util.ArrayList;
public class UniquesDupes
{
private ArrayList<String> list;
/**
* constructs a UniquesDupes object such that list contains the space delimited strings
* parsed from input
* @param input a String containing the list of words separated by spaces
*/
public UniquesDupes(String input)
{
list = new ArrayList<String>();
String[] words = "abc cde fgh ijk".split(" ");
ArrayList<String> list = new ArrayList<String>(Arrays.asList(words));
}
/**
* returns a set of Strings containing each unique entry in the list
*/
public Set<String> getUniques()
{
Set<String> uniques = new TreeSet<String>();
for(String a:list)
{
uniques.add(a);
}
return uniques;
}
/**
* returns a set of Strings containing each entry in the list that occurs more than once
*/
public Set<String> getDupes()
{
Set<String> uniques = new TreeSet<String>();
Set<String> dupes = new TreeSet<String>();
for(String a:list)
{
uniques.add(a);
{
if(uniques.add(a) == false)
{
dupes.add(a);
}
}
}
return dupes;
}
/**
* returns the original list, the list of duplicates and the list of uniques
* @return the String version of the object
*/
public String toString()
{
return "Orig list :: " + list
+ "\nDuplicates :: " + getDupes()
+ "\nUniques :: " + getUniques() + "\n\n";
}
}
这是dat文件(如果需要)
a b c d e f g h a b c d e f g h i j k
one two three one two three six seven one two
1 2 3 4 5 1 2 3 4 5 1 2 3 4 5 6
它可以编译并运行,但是所有文件都返回空白,我不知道我做错了什么,否则提示会很有价值
最佳答案
逻辑几乎是正确的。UniquesDupes
类几乎可以,但是构造函数不可以。应该是
public UniquesDupes() // no args, default constructor
{
list = new ArrayList<String>(); //just initialize the list
}
同时,所述类将需要一个addString方法:
public void addString(String input) {
String[] words = input.trim().split(" "); //split the input string into words by spaces, after trimming whitespace
this.list.addAll(Arrays.asList(words)); //adding them to the list.
}
while循环应稍作更改。您只需要一个UniquesDupes类的实例,然后使用之前创建的addString方法添加每一行。
UniquesDupes a = new UniquesDupes(); //create it here
while (in.hasNextLine())
{
String n = in.nextLine();
a.addString(n); //adding the string
}
然后需要对结果进行不同的处理
Collection<String> uniques = a.getUniques();
Collection<String> dupes = a.getDupes();
System.out.println (uniques.toString());
System.out.println (dupes.toString());
也就是说,逻辑几乎是正确的...
但是,您所做的一件丑陋的事情是这部分:
list = new ArrayList<String>(); //using instance variable
String[] words = "abc cde fgh ijk".split(" ");
ArrayList<String> list = new ArrayList<String>(Arrays.asList(words));
// ^^ declaring local variable the same name as the instance variable
这是不好的。你不应该这样做。不,不。不要再做一次!养成这种习惯使代码异常难以阅读,并且疯狂地疯狂维护。