0
當我運行我的代碼,我得到java.lang.StackOverflowError的java.lang.StackOverflowError的用遞歸性
我會比感激更多,如果有人能告訴我什麼是錯的。
這是我的代碼:
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;
}
我需要噪聲添加到圖像。 StackOverFlowError發生在此函數中:
public void generarPuntos(int cont){
if(cont<cantPuntos){
puntos[cont]=new Point(generarRandomW(),generarRandomH());
cont++;
generarPuntos(cont);
}
}
我會感謝您的幫助。
看着你的代碼,你嘗試減少6,250次。你可以[增加堆棧大小](http://stackoverflow.com/q/3700459/1270789),但我認爲只要將代碼重寫爲for(int cont = 0; cont
如果堆棧上的東西總數超過了這個值,你會得到這個錯誤,你可以通過-Xss選項來增加大小 但是我建議重寫你的代碼 –
我不喜歡遞歸for generarPuntos方法,因爲@ Ken YN說。 – AngelThread