gpt4 book ai didi

java - 当用户输入数字时计算数字的出现次数并显示最高出现次数

转载 作者:行者123 更新时间:2023-12-02 07:39:07 25 4
gpt4 key购买 nike

我试图在用户输入数字时计算用户在程序中输入的数字的出现次数。它们都是整数。这必须显示在 TextArea 中。如果多个数字具有相同的出现次数,则该数字也必须显示在文本区域中。

我发现了一些关于如何执行此操作的非常令人困惑的信息。

我首先使用 TreeMap 添加数字,并在输入每个数字时检查该数字是否已输入。如果不是,则将其输入到键中并为其分配值 1,否则将值加 1。

我已经一遍又一遍地阅读 Java API。我已经找到了 SortedMap,但这对我没有什么好处,因为根据我的理解,它已经在 TreeMap 中按键排序了。我希望 TreeMap 按值排序,然后挑选出具有相同对应值的所有键。我找到了一种按值对其进行排序的方法,但是当我实现它时,它只允许我获取 .last().getKey().intValue()。我原以为数组可能是理想的选择,但我不知道如何去做。

哦,我正在学习 Java 的第二课,所以我知之甚少,对于我不知道的东西知之甚少,所以请记住这一点。

public class NumberCounterGUI extends JFrame {

JLabel jlblEnteranumber = new JLabel("Enter a number:");

JTextField jtfEnteranumber = new JTextField();

JTextArea jtaNumbers = new JTextArea();
JTextArea jtaMessages = new JTextArea();

JScrollPane numbersScrollPane = new JScrollPane(jtaNumbers);

JPanel panel1 = new JPanel();
JPanel panel2 = new JPanel();
JPanel panel3 = new JPanel(new BorderLayout());

Color defaultBackgroundColor = new Color(238, 238, 238);

Font defaultFontBold = new Font("Dialog", Font.BOLD, 12);

TreeMap<Integer, Integer> numbersEntered = new TreeMap<>();

int numberEntered, value;

public NumberCounterGUI() {

jtfEnteranumber.setPreferredSize(new Dimension(84, 20));
jtfEnteranumber.setToolTipText("Integers Only");
jtfEnteranumber.addActionListener(new NumberCounterGUI.Listener());

jtaNumbers.setEditable(false);
jtaNumbers.setLineWrap(true);
jtaNumbers.setWrapStyleWord(true);

numbersScrollPane.setVerticalScrollBarPolicy(JScrollPane
.VERTICAL_SCROLLBAR_AS_NEEDED);
numbersScrollPane.setPreferredSize(new Dimension(300, 75));

jtaMessages.setFont(defaultFontBold);
jtaMessages.setBackground(defaultBackgroundColor);
jtaMessages.setEditable(false);

panel1.add(jlblEnteranumber);
panel1.add(jtfEnteranumber);

panel2.add(jtaMessages);

panel3.add(panel1, BorderLayout.NORTH);
panel3.add(numbersScrollPane, BorderLayout.CENTER);
panel3.add(jtaMessages, BorderLayout.SOUTH);

add(panel3);
}

class Listener implements ActionListener {

@Override
public void actionPerformed(ActionEvent e) {
try {
Long numberEnteredLong = Long.valueOf(jtfEnteranumber.getText());
if (numberEnteredLong <= 2147483647 &&
numberEnteredLong >= -2147483647) {
numberEntered = Integer.valueOf(jtfEnteranumber.getText());
jtaNumbers.insert(jtfEnteranumber.getText() + " ", 1);
if (numbersEntered.get(numberEntered) == null) {
numbersEntered.put(numberEntered, 1);
} else {
value = numbersEntered.get(numberEntered).intValue();
value++;
numbersEntered.put(numberEntered, value);
}
jtaMessages.setText(entriesSortedByValues(numbersEntered)
.last().getKey().intValue() +" occurred most often");
jtfEnteranumber.setText("");
} else {
Toolkit.getDefaultToolkit().beep();
jtaMessages.setText(jtfEnteranumber.getText()
+ " is out of integer range!");
jtfEnteranumber.setText("");
}
} catch (NumberFormatException z) {
Toolkit.getDefaultToolkit().beep();
jtaMessages.setText(jtfEnteranumber.getText()
+ " is not a number!");
jtfEnteranumber.setText("");
}
pack();
}
}

// Found at http://stackoverflow.com/questions/2864840/treemap-sort-by-value
static <K, V extends Comparable<? super V>> SortedSet<Map.Entry<K, V>>
entriesSortedByValues(Map<K, V> map) {
SortedSet<Map.Entry<K, V>> sortedEntries = new TreeSet<>(
new Comparator<Map.Entry<K, V>>() {
@Override
public int compare(Map.Entry<K, V> e1, Map.Entry<K, V> e2) {
int res = e1.getValue().compareTo(e2.getValue());
return res != 0 ? res : 1;
}
});
sortedEntries.addAll(map.entrySet());
return sortedEntries;
}

public static void main(String[] args) {
NumberCounterGUI frame = new NumberCounterGUI();
frame.setTitle("Enter Numbers (Integers 1 - 999)");
frame.pack();
frame.setResizable(false);
frame.setLocationRelativeTo(null);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
}

最佳答案

-使用Collections.Frequency(Collection c, Object o)方法获取集合中某个对象的出现次数。

关于java - 当用户输入数字时计算数字的出现次数并显示最高出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11817362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com