Java错误与数组搜索有关

Dun*_*mer 2 java arrays swing

嘿家伙我正在尝试使用drawString()函数从数组中的搜索中绘制结果.我正在使用下面的代码

import java.awt.Graphics;

public class canvas extends JPanel{
    int i, count;
    public String read_string = "";
    public String[] names = {"Duncan","Matthew","Kevin","Etc"};
    public String[] searchfor = {"Duncan","Kevin"};
    public canvas() {

    search();


    }

    public void search() {

        for(i=0; i<names.length; i++) {
            read_string = names[i];
            if(read_string.contains("Duncan") || read_string.contains("Kevin")) {

                count++;

                System.out.println(read_string);
                drawThatText(null, read_string, 500*i + 1, 500*i + 1);
            } else {

            }


        }
    }


    public void drawThatText(Graphics g, String s, int x, int y) {


        g.drawString(s, x, y);

    }
}
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

Duncan
java.lang.ExceptionInInitializerError
Caused by: java.lang.ArithmeticException: / by zero
    at canvas.search(canvas.java:33)
    at canvas.<init>(canvas.java:19)
    at Client.<clinit>(Client.java:10)
Exception in thread "main" 
Run Code Online (Sandbox Code Playgroud)

aio*_*obe 5

drawThatText(read_string, 500*i + 1, 500*i + 1); 是第33行

该行不可能抛出除零异常.

然而,我确实看到NullPointerException你打电话后可以得到一个

drawThatText(null, ...
Run Code Online (Sandbox Code Playgroud)

然后呢

public void drawThatText(Graphics g, String s, int x, int y) {
                         ^^^^^^^^^^^
                       will equal null

    g.drawString(s, x, y);
    ^
    |
    '--- Will throw a NullPointerException

}
Run Code Online (Sandbox Code Playgroud)

这是该程序的不同版本,可以帮助您推动正确的方向:

import java.awt.Graphics;
import javax.swing.*;
public class canvas extends JPanel {
    int i, count;
    public String read_string = "";
    public String[] names = {"Duncan","Matthew","Kevin","Etc"};
    public String[] searchfor = {"Duncan","Kevin"};

    @Override
    public void paintComponent(Graphics g) {
        for(i=0; i<names.length; i++) {
            read_string = names[i];
            if(read_string.contains("Duncan") ||
               read_string.contains("Kevin")) {
                count++;
                System.out.println(read_string);
                drawThatText(g, read_string, 50*i + 10, 50*i + 10);
            }
        }
    }

    public void drawThatText(Graphics g, String s, int x, int y) {
        g.drawString(s, x, y);
    }

    public static void main(String[] args) {
        JFrame jf = new JFrame();
        jf.setContentPane(new canvas());
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setSize(200, 200);
        jf.setVisible(true);
    }
}
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述