-1

我正在处理下面的问题并且非常接近,但在第 19 和 32 行我收到以下错误并且无法弄清楚。

foreach 不适用于表达式类型 for (String place: s)

问题:

税务检查员可以使用两个文本文件,分别称为 unemployers.txt 和 taxpayers.txt。每个文件包含一组名称,每行一个名称。检查员将出现在这两个文件中的任何人视为狡猾的角色。编写一个程序,打印出不可靠字符的名称。充分利用 Java 对集合的支持。

我的代码:

class Dodgy {

public static void main(String[] args) {

    HashSet<String> hs = new HashSet<String>();

    Scanner sc1 = null;
try {sc1 = new Scanner(new File("taxpayers.txt"));} 
        catch(FileNotFoundException e){};
while (sc1.hasNextLine()) {
    String line = sc1.nextLine();
    String s = line;
    for (String place: s) {
        if((hs.contains(place))==true){
            System.out.println(place + " is a dodgy character.");
    hs.add(place);}
    }   
}

    Scanner sc2 = null;
try {sc2 = new Scanner(new File("unemployed.txt"));} 
        catch(FileNotFoundException e){};
while (sc2.hasNextLine()) {
    String line = sc2.nextLine();
    String s = line;
    for (String place: s) {
        if((hs.contains(place))==true){
            System.out.println(place + " is a dodgy character.");
    hs.add(place);}
}
}
}
}
4

2 回答 2

1

您正在尝试迭代“字符串中的每个字符串”-这甚至意味着什么?

感觉就像您需要遍历每个文件中的每一行......您不需要在一行进行迭代。

其次 - 在您的第一个循环中,您只查看第一个文件,那么您怎么可能检测到狡猾的字符?

我会考虑将问题抽象为:

  • 编写一个方法来读取文件并填充哈希集。
  • 调用该方法两次以创建两个集合,然后找到交集。
于 2012-08-21T16:55:27.060 回答
0

Foreach 仅适用于java.lang.Iterable类型。由于 String 不是,因此错误也是如此。

如果您的意图是迭代字符串中的字符,则将“s”替换为“s.toCharArray()”,它会返回一个数组,即java.lang.Iterable.

于 2012-08-21T16:52:46.247 回答