尝试在Java中检测字符串的相似性时出错

时间:2018-11-08 00:56:31

标签: java string nullpointerexception comparison

我正在尝试编写一个需要一致的字符串输入的程序。为此,我将用户给定的字符串和先前给定的字符串数组(初始化为1000)放入函数中,并进行比较,然后根据需要进行更正。当我运行程序时,某些字符串可以工作并且NullPointerExceptions(两者都可以)。

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at main.Utils.isSimilar(Utils.java:17)
at app.GUI$2.mouseClicked(GUI.java:178)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:270)
at java.awt.Component.processMouseEvent(Component.java:6536)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
at java.awt.Component.processEvent(Component.java:6298)
at java.awt.Container.processEvent(Container.java:2236)
at java.awt.Component.dispatchEventImpl(Component.java:4889)
at java.awt.Container.dispatchEventImpl(Container.java:2294)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4888)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4534)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4466)
at java.awt.Container.dispatchEventImpl(Container.java:2280)
at java.awt.Window.dispatchEventImpl(Window.java:2746)
at java.awt.Component.dispatchEvent(Component.java:4711)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:758)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:90)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:80)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

我不知道为什么它无法正常运行。该程序正在用Java 1.8.0编译,我正在测试在Mac OS Mojave上运行它。我究竟做错了什么?这是所有相关代码: GUI.java:

private String[] allImageObjects = new String[1000];//Basically the category

进一步

public GUI(String title, JFrame window) {
        window = new JFrame(title);
        window.setSize(600, 500);
        window.setPreferredSize(new Dimension(600, 500));;
        window.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        window.setResizable(false);
        window.setLocationRelativeTo(null);
        window.setUndecorated(true);

        for(int i = 0; i < allImageObjects.length; i++) {
            allImageObjects[0] = "Null";
        }

        init(window);

        window.setVisible(true);

        window.pack();
        window.setLocationRelativeTo(null);
    }

在init();

JButton btnNext = new JButton("Next");
        btnNext.addMouseListener(new MouseAdapter() {
            @Override
            public void mouseClicked(MouseEvent e) {
                String checkString = (textField.getText());
                if(checkString == "") {
                    return;
                }
                for(final String compString : allImageObjects) {
                     if(Utils.isSimilar(compString, checkString, 0.1)) {
                         JFrame popup = new JFrame();
                         popup.setType(Type.POPUP);
                         popup.setResizable(false);
                         popup.setVisible(true);
                         System.out.println("Eaquel");
                         return;
                     } 
                }
                int totalObjects = 0;
                 for (int i = 0; i < allImageObjects.length; i ++) {
                     if (allImageObjects[i] != null) {
                         totalObjects ++;
                     }
                 }
                 allImageObjects[totalObjects + 1] = textField.getText();
            }
        });

并在Utils.java中:

public static boolean isSimilar(String one, String two, double aR) {
        int difference = one.compareToIgnoreCase(two);

        char[] onec = one.toLowerCase().toCharArray();
        char[] twoc = two.toLowerCase().toCharArray();
        //Averages
        double stringOneAve = 0.0;
        double stringTwoAve = 0.0;

        double totalAve;

        for (int i = 0; i < onec.length; i++){
            stringOneAve += onec[i] - '0';
        }

        stringOneAve /= onec.length;

        for (int i = 0; i < twoc.length; i++){
            stringTwoAve += twoc[i] - '0';
        }

        stringTwoAve /= twoc.length;

        totalAve = (stringOneAve + stringTwoAve) / 2;

        int acceptaceRate = (int)(aR * totalAve);

        if(difference < 0 + (acceptaceRate / 2) && difference > 0 - (acceptaceRate / 2)){
               return true;
        }

        return false;
    }

0 个答案:

没有答案