从Main方法传递参数

时间:2012-12-11 18:50:14

标签: java map

这是我的完整代码。我的挑战是最后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);      
}    
}

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

3 个答案:

答案 0 :(得分:1)

我能说的一个问题是:

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

删除第二行

findColor(int r)不是静态方法,所以你不能直接调用静态方法,你需要使用实例引用(上面代码中的line3)。

答案 1 :(得分:0)

您要做的是从命令行中读取。这样做:

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

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

答案 2 :(得分:0)

查看最后3行:

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

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

您的NewClass函数范围内实际上有一个main的实例,您调用的是a。因此,只需通过该实例调用findColor

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