Porque quando executo este código ele pede duas vezes a entrada?
import javax.swing.*;
import java.awt.Graphics;
public class i extends JApplet
{
public void paint(Graphics quad)
{
int lado;
String sLado;
super.paint(quad);
sLado = JOptionPane.showInputDialog("Digite o lado do quadrado");
lado = Integer.parseInt(sLado);
quad.drawString("*", 20, lado);
}
}
Bom, na verdade estou tentando fazer o exercício 4.23 do livro Java Como Programar 4ed. fiz alguma coisa de exercício mas cheguei num ponto com mais ou menos essa estrutura acima e não ficou essa dúvida.
Boa noite!!!
Poste seu codigo de teste por favor…
att…
Primeiro eu fiz com System.out.print e funcionou. Então eu tentei passar para um applet e não funcionou.
import javax.swing.JOptionPane;
public class quadEmSystem
{
public static void main(String args[])
{
int col, lin, lado, iLado, fLado;
String sLado;
sLado = JOptionPane.showInputDialog("Digite o tamanho do quadrado (de 1 a 20)");
lado = Integer.parseInt(sLado);
lin = lado - 2;
iLado = lado;
fLado = lado;
while (lado >= 1)
{
System.out.print("*");
--lado;
}
System.out.println();
while (lin >= 1)
{
col = 1;
while (col <= iLado)
{
if (col == 1 || col == iLado)
System.out.print("*");
else
if (col != 1 || col != iLado)
System.out.print(" ");
++col;
}
--lin;
System.out.println();
}
while (fLado >= 1)
{
System.out.print("*");
--fLado;
}
}
}
import javax.swing.*;
import java.awt.Graphics;
public class Exercicio4º23 extends JApplet
{
public void paint(Graphics quad)
{
int col, lin, lado, iLado, fLado;
String sLado;
super.paint(quad);
sLado = JOptionPane.showInputDialog("Digite o tamanho do quadrado (de 1 a 20)");
lado = Integer.parseInt(sLado);
lin = lado - 2;
iLado = lado;
fLado = lado;
while (lado >= 1)
{
quad.drawString("*", 200, lado);
--lado;
}
quad.drawString(" ", 0, 0);
while (lin >= 1)
{
col = 1;
while (col <= iLado)
{
if (col == 1 || col == iLado)
quad.drawString("*", col, iLado);
else
if (col != 1 || col != iLado)
quad.drawString(" ", col, iLado);
++col;
}
--lin;
quad.drawString(" ", 0, 0);
}
while (fLado >= 1)
{
quad.drawString("*", fLado, 20);
--fLado;
}
}
}
O texto do exercício é este:
4.23 Escreva um applet que lê o tamanho do lado de um quadrado e exibe um quadrado vazio desse tamanho com asteriscos, utilizando o método drawString dentro do método paint de seu applet. Utilize um diálogo de entrada para ler o tamanho fornecido pelo usuário. O programa deve trabalhar com quadrados de todos os tamanhos de lado possíveis, entre 1 e 20.
Não estou certo, mas o erro poderia estar ocorrendo na tua chamada de
super.paint(quad)
Mas qual seria o erro? Eu acho que tem que se chamar a versão herdada do método paint. Ou não???
O método paint é chamado sempre que a tela precisar. Seria melhor voce deixar essa lógica em outro método.
Faça a leitura do tamanho do quadrado no método start() e armazene isso em uma variável. No método paint() apenas desenhe o quadrado (sem perguntar ao usuário novamente).