Tablica dynamiczna w applecie.

0

Mam taki problem, za zadanie dostaliśmy wykonanie apletu, w którym dynamicznie utworzona tablica ma zostać wypełniona losowymi liczbami typu integer z przedziału podanego przez użytkownika. wszystko ładnie pięknie, ale program nie reaguje po podaniu liczb. Elegancko wyświetla "Tablica mniejsza od 1" przy wpisaniu liczby mniejszej od 1, ale po wpisaniu większej nie reaguje..

import java.awt.*;
import java.applet.*;
import java.util.*;
import java.awt.event.*;

public class generator extends Applet implements ActionListener
{
    TextField pole1, pole2, pole3, wynik; 
    Label label1, label2, label3;
    Button guzik;
    int i,g1,g2,g3,g;
    String zupa;
    Random rand;
    int tablica[];

    public void init()
    {
        Random rand = new Random();
        label1 = new Label("Zakres od:"); add(label1);
        label2 = new Label("Zakres do:"); add(label2);
        label3 = new Label("roz. tablicy:"); add(label3);
        pole1 = new TextField(); add(pole1); 
        pole2 = new TextField(); add(pole2); 
        pole3 = new TextField(); add(pole3); 
        wynik = new TextField("lol"); add(wynik);
        guzik = new Button("Wyswietl"); add(guzik);
        guzik.addActionListener(this);
 
    }
    
 
    public void actionPerformed(ActionEvent e) {
     if (e.getSource()== guzik) { zupa="";
     if(Integer.parseInt(pole3.getText())<0||pole3.getText()==null) {
     wynik.setText("Tablica mniejsza od 1"); } else
       tablica = new int[Integer.parseInt(pole3.getText())];  
     for (i=0;i<=Integer.parseInt(pole3.getText());i++) 
     { tablica[i]=rand.nextInt(Integer.parseInt(pole2.getText())-Integer.parseInt(pole1.getText()))+Integer.parseInt(pole3.getText())+1; }
     for (i=0;i<=Integer.parseInt(pole3.getText());i++) { zupa=zupa+Integer.toString(tablica[i])+" ";}
    wynik.setText(zupa); 
        }      
    }

    public void paint(Graphics g)
    {
        label1.setBounds(10,10,70,20);
        label2.setBounds(10,40,70,20);
        label3.setBounds(10,70,70,20);
        pole1.setBounds(90,10,50,20);
        pole2.setBounds(90,40,50,20);
        pole3.setBounds(90,70,50,20);
        guzik.setBounds(10, 100, 60, 20);
        wynik.setBounds(10, 130, 200, 25);
    }
}
1

Nie stworzyłeś "losowacza" widocznego w metodzie actionPerformed().
Ten wiersz

Random rand = new Random();

powinien wyglądać inaczej.

0

Faktycznie trochę niejasno napisane. Może teraz

1 public void actionPerformed(ActionEvent e) {
2    if (e.getSource()== guzik) { 
3     g1=Integer.parseInt(pole1.getText());
4     g2=Integer.parseInt(pole2.getText());
5     g3=Integer.parseInt(pole3.getText());
6     zupa="";
7     if(g3<0||pole3.getText()==null) 
8       {
9           wynik.setText("Tablica mniejsza od 1"); 
10        } else 
11            {
12                tablica = new int[g3]; 
13                for (i=0;i<=g3;i++) 
14                    { 
15                        tablica[i]=rand.nextInt(g2-g1)+(g3+1); 
16                    }
17                for (i=0;i<=g3;i++) 
18                    { 
19                        zupa+=Integer.toString(tablica[i])+" ";
20                    }
21                wynik.setText(zupa); 
22            }      
23    }}

To jak powinien wyglądać tamten wiersz?

1

Przekraczasz zakres tablicy, powinno być

for (i=0;i<g3;i++)
...

Tworzysz w metodzie init() zmienną lokalną rand, powinno być

rand=new Random();
0

Działa. Widocznie to było przez to, że przekraczałem zakres tablicy, przeoczyłem.
A teraz, jak dokładnie ustawić, by wyświetlało napis "mniejsze od 1" przy pustym polu3?
mam wpisane pole3.getText()==nullale w praktyce to nie działa.

1
int zakres=0;
try
{
     zakres=Integer.parseInt(pole3.getText())
}
catch(NumberFormatException e)
{
}
if(zakres<1)
{
     wynik.setText("Niewłaściwy rozmiar tablicy")
}
else
{
     ..... 
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1