【问题标题】:finding the largest variable找到最大的变量
【发布时间】:2012-03-25 08:14:35
【问题描述】:

我有以下五个整数变量,并且在程序期间,它们被随机分配了一些值。我想获得最大的变量名而不是变量值。我想知道它们中是否至少有两个具有相同的值。请举个例子。谢谢。

int politics_counter = 0;
        int economics_counter = 0;
        int foreign_counter = 0;
        int sport_counter = 0;
        int weather_counter = 0;

【问题讨论】:

  • 如果您想要 name,那么您很有可能需要将它们保存在 Map 中。
  • 请给出一些代码sn-ps。我是初学者。
  • 这是一个愚蠢的问题。变量的名称是无关紧要的,直到它们被认为不是具体的,然后需要跳过箍,例如创建地图,在这种情况下,为什么首先要这样表达它们等等。跨度>
  • @ssrp - 如果您详细说明为什么需要变量名,您可能会得到更好的答案。这似乎是一个奇怪的要求。

标签: java methods integer


【解决方案1】:

现在来回答(有点)

public class MyThingie {

TreeMap<Integer, String> data = new TreeMap<Integer, String>();

public void doIt() {
    ...

    insertElement("politics_counter", politics_counter);
    insertElement("economics_counter", economics_counter);
    insertElement("foreign_counter", foreign_counter);
    insertElement("sport_counter", sport_counter);
    insertElement("weather_counter", weather_counter);

    System.out.println("Highest variable is "+data.lastEntry().getValue());
}

public void insertElement(String name, Integer i) {
    if (data.get(i) == null) {
        System.out.println("Element "+name+" has the name value as "+data.get(i));
    }
    else {
        data.put(name,i);
    }
}
}

现在有一个更有趣的答案:

public class BiggestFinder {
    public void showBiggester(Object o) throws Exception {
        TreeMap<Integer, String> data = new TreeMap<Integer, String)();
        for (Field f  : o.getDeclaredFields()) {
            Object v = f.getValue(o);
            if (v instanceof Integer) {
                if (data.get(v)!=null) {
                    System.out.println("Value for "+f.getName()+" is the same as "+data.get(v));
                }
                else {
                    data.put((Integer)f.getValue(o), f.getName());
                }
            }
        }

        System.out.println("Largest is "+data.lastEntry().getValue());
    }
}

这将询问一个对象并显示最大的字段,因为该对象的成员都是整数并且都可以通过此方法访问。有一种方法可以捏造并改进它以使其更加“强大”。

【讨论】:

  • 正如OP所说,该值可以重复。
  • 但是他想知道它是否重复,而不是重复的值是什么,他没有问我想的名字,所以只是把找到的重复而不是细节?
  • 我认为第一个解决方案中的 if 条件是错误的
  • @PlexQ:我认为你需要o.getClass().getDeclaredFields()而不是o.getClass().getDeclaredFields()
【解决方案2】:

正如@Max 建议的那样,您可以使用映射来存储变量,然后操纵映射以查找最大的变量名称或值。

// Initialize your map
HashMap<String, Integer> vars = new HashMap<String,Integer>();

// Inserting a variable
vars.put("politics_counter", new Integer(0));

// Looking for biggest variable
String biggestVar = "";
for (String key : vars.keySet()) {
    if (key.length() > biggestVar.length)
        biggestVar = key;
}

【讨论】:

  • 您可能会争辩说 HashMap 在 O(2n) 中而不是在 O(2nlogn) 中像 TreeMap 那样执行此操作,但我认为为了便于使用并且考虑到 n 有多小,我会采用 TreeMap ,只是看起来更好。无论如何,人们应该更喜欢 Trees。
  • 您不需要使用密钥的构造函数副本,因为它是不可变的。
  • 我也很确定装箱是不必要的,除非您使用的是非常旧的 Java 版本, vars.put("politics_count", 0);应该可以正常工作,或者它的推断模拟。
  • @giorashc 为什么是“=new String(key)” 而不仅仅是“=key”?
  • 是的,复制是多余的。谢谢你的评论,但我希望这一点很清楚。我使用拳击是因为我现在知道他使用的是什么 JDK。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-15
相关资源
最近更新 更多