virheentarkistus ja laskurin toiminta

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
3596
Äänestä

Muut lukivat myös

Vastaukset 3

Vanhimmat

Pistä kaikkiin toimintoihin ja if:hin poikkeuksen käsittely ja tulosta "välitietoja" System.out.println -toiminnolla.

Äänestä

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...

Äänestä

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ää.

Äänestä

Kommentoi aloitusta


Jade kirjoitti:

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

Anonyymi
5000

Ilmoita asiaton sisältö

  • Sisältää materiaalia, joka on loukkaavaa, herjaavaa, rasistista, uhkailevaa tai ahdistelevaa.

  • Materiaali sisältää nimiä, yhteystietoja tai muita henkilökohtaisia tietoja. Julkisuuden henkilöistä, julkisissa viroissa toimivista ihmisistä sekä yritysten vastuuhenkilöistä saa keskustella työhön liittyen. Myös yksityiselämään liittyvistä asioista voi keskustella siltä osin, kuin niistä on julkisesti kerrottu.

  • Sisältää lapsille haitallista tai heiltä kiellettyä materiaalia. Seksuaalinen sisältö on sallittua aiheeseen tarkoitetuilla palstoilla, joiden ikäraja on 18 vuotta.

  • Lainvastaista sisältöä voi olla mm. yksityiselämää loukkaavan tiedon levitys, kiihottaminen kansanryhmää vastaan, laiton uhkaaminen, alaikäisiin liittyvä seksuaalinen sisältö/grooming, petokset, identiteettivarkaudet, kunnianloukkaukset ja tekijänoikeusrikkomukset.

  • Sisältö ei liity palstan tai keskusteluketjun aiheeseen.

  • Viesti ei ole suomea tai ruotsia (pl. International Forums), se sisältää mainontaa, se sisältää tekijänoikeuksin suojattua materiaalia, se on massapostitus tai jokin muu syy.

Jaa keskustelu