0

这是我的完整代码。我的挑战是在最后 3 行!我无法将参数 (int r) 发送给 findColor(int r)。非常感谢任何帮助。谢谢

import java.util.*;
public class NewClass {
private HashMap <Character,HashSet> colorMap ;

public NewClass() {
    colorMap = new HashMap<Character, HashSet>();
}

public void addColor(){
    HashSet a1 = new HashSet();
    a1.add("Yellow");
    a1.add("Blue");
    a1.add("Pink");
    colorMap.put('X', a1);
    HashSet a2 = new HashSet();
    a2.add("White");
    a2.add("Brown");
    a2.add("Blue");
    a2.add("Black");
    colorMap.put('W', a2);
}    

public Set<String> findColor(int r)
{
Set<String> colors = new HashSet<String>();
    {
    for(Character m : colorMap.keySet())

    if(r < colorMap.size())
        {
        Set<String> zone = colorMap.get(m);
        System.out.println("Zone " + zone + " has more than " + r + " colors");
        }        
    }
    return colors;
 }    

 public static void main(String [] args){

    Set<String> colors;
    NewClass a = new NewClass();
    Scanner input = new Scanner(System.in);
    System.out.print("Enter a numbers \n");
    int r = input.nextInt();
    colors = findColor(r);
    a.findColor(r);      
}    
}

非常感谢任何帮助。谢谢!

4

3 回答 3

1

我能说的一个问题是:

    int r = input.nextInt();
    //colors = findColor(r);
    Set<String> colors = a.findColor(r);     

删除第二行

findColor(int r) 不是静态方法,因此不能直接在静态方法内部调用,需要使用实例引用(即上面代码中的第 3 行)。

于 2012-12-11T18:51:40.233 回答
0

看看你的最后 3 行:

int r = input.nextInt();
colors = findColor(r);
a.findColor(r);

在第 2 行,您尝试findColor从静态方法调用,但findColor不是静态的。这是不允许的;非静态方法必须通过非静态方法所属的特定类的实例来调用。

您实际上在您的函数NewClass范围内有一个实例,您调用了. 因此,只需通过该实例调用:mainafindColor

int r = input.nextInt();
colors = a.findColor(r);
于 2012-12-11T18:56:38.297 回答
0

您正在尝试做的是从命令行读取。做这个:

http://alvinalexander.com/java/edu/pj/pj010005

最后 3 行中的第二行是错误的。添加一个。在方法调用之前,删除第 3 行。

于 2012-12-11T18:53:49.103 回答