Mihin tässä koodissa pitäisi pistää virheentarkistus, jotta jos aiheutuu poikkeus(tarkistetaan onko ikä ja palkka kokonaislukuja), se ei tule liian myöhään? Ja miten tuo tarkistus pitäisi koodata, koska nyt se on epäilemättä jostainpäin vialla, eli validate funktiota kutsutaan liian myöhään. Myös tuo laskurin toiminnassa on vikaa, nykyisellä koodilla tulee ArrayIndexOutOfBoundsException-poikkeuksia.
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;
public class HenkiloTiedot extends Applet implements ActionListener
{
private Vector data = new Vector();
private HenkiloVO current = null;
private int laskuri = -1;
public HenkiloVO henkilo;
private Label label1, label2, label3, label4, label5;
private TextField vastaus1, vastaus2, vastaus3, vastaus4;
private Button nappi1, nappi2, nappi3, nappi4, nappi5;
public void init()
{
setLayout(new GridLayout(7,2));
setBackground(Color.gray);
add(label1 = new Label("Etunimi"));
add(vastaus1 = new TextField());
add(label2 = new Label("Sukunimi"));
add(vastaus2 = new TextField());
add(label3 = new Label("Ikä"));
add(vastaus3 = new TextField());
add(label4 = new Label("Palkka"));
add(vastaus4 = new TextField());
add(nappi1 = new Button("Alkuun"));
add(label5 = new Label("Syötä tiedot"));
add(nappi2 = new Button("Edellinen"));
add(nappi3 = new Button ("Seuraava"));
add(nappi4 = new Button ("Lisää"));
add(nappi5 = new Button("Poista"));
nappi1.addActionListener(this);
nappi2.addActionListener(this);
nappi3.addActionListener(this);
nappi4.addActionListener(this);
nappi5.addActionListener(this);
}
public void validate(String en, String sn, int i, int pa) {
String error = "";
int iIka = -1;
int paPalkka = -1;
try
{
iIka= (i);
}
catch (Exception ex)
{
error = "Iän on oltava kokonaisluku";
}
try
{
paPalkka = (pa);
}
catch (Exception ex)
{
error = error "Palkan on oltava kokonaisluku";
}
if(error.length()>0) {
label5.setText("Korjaa tiedot");
} else {
current = new HenkiloVO(en, sn, iIka, paPalkka);
this.vastaus1.setText("");
this.vastaus2.setText("");
this.vastaus3.setText("");
this.vastaus4.setText("");
this.nappi4.setLabel("Tallenna");
}
int size = this.data.size();
for(int j = 0; j< size; j ) {
System.out.println(data.elementAt(j));
}
}
private void getValuesFromData(int index) {
if(this.data.size() > 0) {
HenkiloVO values =(HenkiloVO)data.elementAt(index);
if(values != null) {
this.vastaus1.setText(values.Etunimi);
this.vastaus2.setText(values.Sukunimi);
this.vastaus3.setText("" values.Ika);
this.vastaus4.setText("" values.Palkka);
} else {
this.vastaus1.setText("");
this.vastaus2.setText("");
this.vastaus3.setText("");
this.vastaus4.setText("");
}
}
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == nappi5){
if (this.laskuri>-1)
this.data.remove(this.laskuri);
this.vastaus1.setText("");
this.vastaus2.setText("");
this.vastaus3.setText("");
this.vastaus4.setText("");
label5.setText("Tiedot poistettu, Syötä uusi");
}
if (e.getSource() == nappi4){
if (this.current==null){
String en=this.vastaus1.getText();
String sn=this.vastaus2.getText();
int i=Integer.parseInt(this.vastaus3.getText());
int pa=Integer.parseInt(this.vastaus4.getText());
this.validate(en,sn,i,pa);
}else{
if(this.laskuri ==-1)
this.data.addElement(current);
else
this.data.setElementAt(current,laskuri);
label5.setText("Tiedot lisätty");
this.nappi4.setLabel("Lisää");
current = null;
laskuri=-1;
}
}
if(e.getSource() == nappi1){
this.getValuesFromData(0);
this.laskuri=0;
}
if (e.getSource() == nappi2){
if (this.laskuri>0)
this.getValuesFromData(--this.laskuri);
else if (this.laskuri==-1&&this.data.size()>0)
{this.laskuri=this.data.size();
this.getValuesFromData(--this.laskuri);
}
}
if (e.getSource() == nappi3){
if(this.laskuri
import java.awt.*;
import java.awt.event.*;
import java.applet.*;
import java.util.*;
public class HenkiloTiedot extends Applet implements ActionListener
{
private Vector data = new Vector();
private HenkiloVO current = null;
private int laskuri = -1;
public HenkiloVO henkilo;
private Label label1, label2, label3, label4, label5;
private TextField vastaus1, vastaus2, vastaus3, vastaus4;
private Button nappi1, nappi2, nappi3, nappi4, nappi5;
public void init()
{
setLayout(new GridLayout(7,2));
setBackground(Color.gray);
add(label1 = new Label("Etunimi"));
add(vastaus1 = new TextField());
add(label2 = new Label("Sukunimi"));
add(vastaus2 = new TextField());
add(label3 = new Label("Ikä"));
add(vastaus3 = new TextField());
add(label4 = new Label("Palkka"));
add(vastaus4 = new TextField());
add(nappi1 = new Button("Alkuun"));
add(label5 = new Label("Syötä tiedot"));
add(nappi2 = new Button("Edellinen"));
add(nappi3 = new Button ("Seuraava"));
add(nappi4 = new Button ("Lisää"));
add(nappi5 = new Button("Poista"));
nappi1.addActionListener(this);
nappi2.addActionListener(this);
nappi3.addActionListener(this);
nappi4.addActionListener(this);
nappi5.addActionListener(this);
}
public void validate(String en, String sn, int i, int pa) {
String error = "";
int iIka = -1;
int paPalkka = -1;
try
{
iIka= (i);
}
catch (Exception ex)
{
error = "Iän on oltava kokonaisluku";
}
try
{
paPalkka = (pa);
}
catch (Exception ex)
{
error = error "Palkan on oltava kokonaisluku";
}
if(error.length()>0) {
label5.setText("Korjaa tiedot");
} else {
current = new HenkiloVO(en, sn, iIka, paPalkka);
this.vastaus1.setText("");
this.vastaus2.setText("");
this.vastaus3.setText("");
this.vastaus4.setText("");
this.nappi4.setLabel("Tallenna");
}
int size = this.data.size();
for(int j = 0; j< size; j ) {
System.out.println(data.elementAt(j));
}
}
private void getValuesFromData(int index) {
if(this.data.size() > 0) {
HenkiloVO values =(HenkiloVO)data.elementAt(index);
if(values != null) {
this.vastaus1.setText(values.Etunimi);
this.vastaus2.setText(values.Sukunimi);
this.vastaus3.setText("" values.Ika);
this.vastaus4.setText("" values.Palkka);
} else {
this.vastaus1.setText("");
this.vastaus2.setText("");
this.vastaus3.setText("");
this.vastaus4.setText("");
}
}
}
public void actionPerformed(ActionEvent e)
{
if (e.getSource() == nappi5){
if (this.laskuri>-1)
this.data.remove(this.laskuri);
this.vastaus1.setText("");
this.vastaus2.setText("");
this.vastaus3.setText("");
this.vastaus4.setText("");
label5.setText("Tiedot poistettu, Syötä uusi");
}
if (e.getSource() == nappi4){
if (this.current==null){
String en=this.vastaus1.getText();
String sn=this.vastaus2.getText();
int i=Integer.parseInt(this.vastaus3.getText());
int pa=Integer.parseInt(this.vastaus4.getText());
this.validate(en,sn,i,pa);
}else{
if(this.laskuri ==-1)
this.data.addElement(current);
else
this.data.setElementAt(current,laskuri);
label5.setText("Tiedot lisätty");
this.nappi4.setLabel("Lisää");
current = null;
laskuri=-1;
}
}
if(e.getSource() == nappi1){
this.getValuesFromData(0);
this.laskuri=0;
}
if (e.getSource() == nappi2){
if (this.laskuri>0)
this.getValuesFromData(--this.laskuri);
else if (this.laskuri==-1&&this.data.size()>0)
{this.laskuri=this.data.size();
this.getValuesFromData(--this.laskuri);
}
}
if (e.getSource() == nappi3){
if(this.laskuri
Vastaukset 3
Vanhimmat
Pistä kaikkiin toimintoihin ja if:hin poikkeuksen käsittely ja tulosta "välitietoja" System.out.println -toiminnolla.
Katso nyt tildet (~~~~), mitä sait aikaan, kaveri ei uskalla enää tehdä yhtään mitään...
Laita rohkeesti vaan ne Integr.parseInt():t kohdalleen. Exceptionoeiden käsittely vie niin tolkuttoman "kauan" aikaan, ettet ehdi edes käsittämään mitä tapahtui. Kyseessä on kuitenkin kiista siitä onko sekunnin sadasosa pitkä vai lyhyt aika tämän kaltaisessa ohjelmassa.
Huoh...
Jos iIka ja i ovat inttejä, niin eihän intin sijoituksesta toiseen inttiin voi tulla poikkeuksia:
try
{
iIka= (i);
}
Sulut ovat turhia tuossa sijoituksessa.
Lisäksi ei kannata aina vain catchata Exceptionia, vaan jokin niistä poikkeuksista, mitä testattava koodi voi mahdollisesti heittää.