简体   繁体   English

具有递归性的java.lang.StackOverflowError

[英]java.lang.StackOverflowError with Recursivity

When I run my code I get java.lang.StackOverflowError 当我运行代码时,我得到java.lang.StackOverflowError

I would be more than appreciative if someone can tell me what's wrong. 如果有人可以告诉我怎么了,我将不胜感激。

This is my code: 这是我的代码:

int cantPuntos;
static int HEIGHT = 625;
static int WIDTH = 1000;
Point[] puntos;
static BufferedImage buff;

public static void main(String[] args) {

      JFrame frame = new JFrame();
      frame.getContentPane().add(new Main());
      frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      frame.setSize(WIDTH, HEIGHT);
      frame.setVisible(true);

}
public void paint(Graphics g){
    buff = salPimienta();
    Image img = buff;
    g.drawImage(img, 0,0,this);
}


//Cantidad de pixeles dependiendo porcentaje
public int cantPixelSP(int porcentaje){
    cantPuntos = ((HEIGHT*WIDTH)*porcentaje)/100;
    puntos = new Point[cantPuntos];
    System.out.println("Cont: "+cantPuntos);
    return (int) (cantPuntos);
}

public int generarRandomW(){
    return (int) (Math.random()*(WIDTH+1));
}

public int generarRandomH(){
    return (int) (Math.random()*(HEIGHT+1));
}

//Genera puntos y los guarda en un arreglo de tipo Point 
public void generarPuntos(int cont){
    if(cont<cantPuntos){
        puntos[cont]=new Point(generarRandomW(),generarRandomH());
        cont++;
        generarPuntos(cont);
    }

}

//Pinta los puntos de blanco o negro
public Graphics pintar(Graphics g, int cont){
    if(cont<puntos.length){
        if(cont<= (int) Math.floor(puntos.length/2)) g.setColor(Color.black);
        else g.setColor(Color.WHITE);
        g.drawRect((int) puntos[cont].getX(), (int) puntos[cont].getY(), 1, 1);
        pintar(g,cont+1);
    }
    return g;
}

//Crea sal y pimienta
public BufferedImage salPimienta(){
    cantPixelSP(1);
    System.out.println("Cant: "+cantPuntos+" vector: "+puntos.length );
    generarPuntos(0);
    BufferedImage bufferedImage = new BufferedImage(WIDTH,HEIGHT,BufferedImage.TYPE_INT_RGB);
    try {
        System.out.println(getClass().getResource("/Paris.jpg"));
        bufferedImage = ImageIO.read(getClass().getResource("/Paris.jpg"));
    } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
    }
    Graphics g = bufferedImage.getGraphics();
    g = pintar(g, 0);
    return bufferedImage;
}

I need to add noise to an Image. 我需要为图像添加噪点。 The StackOverFlowError occurs in this function: 该函数中发生StackOverFlowError:

public void generarPuntos(int cont){
    if(cont<cantPuntos){
        puntos[cont]=new Point(generarRandomW(),generarRandomH());
        cont++;
        generarPuntos(cont);
    }

}

I will appreciate your help. 感谢您的帮助。

use this instead 用这个代替

//Genera puntos y los guarda en un arreglo de tipo Point // Generic puntos y los Guarda en un arreglo de tipo Point

public void generarPuntos(int cont){ 公共无效的一般性Puntos(int cont){

while(cont<cantPuntos){

    puntos[cont]=new Point(generarRandomW(),generarRandomH());

    cont++;
}}

since each function call and its parameters are saved in stack memory 因为每个函数调用及其参数都保存在堆栈存储器中

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM