Tämä ohjelma etsii merkkijonosta vokaalit. Kun ollaan merkkijonon lopussa, aloitetaan alusta.
import java.awt.*;
import javax.swing.*;
import java.awt.event.*;
import java.util.ArrayList;
public class Vokaalit extends JApplet implements ActionListener {
//Luodaan objektit
//Rivi 1
JPanel rivi1 = new JPanel();
JLabel teksti = new JLabel("0");
//Rivi 2
JPanel rivi2 = new JPanel();
JTextField tlaatikko = new JTextField(10);
//Rivi 3
JPanel rivi3 = new JPanel();
JButton nappain_1 = new JButton("Aseta");
JButton nappain_2 = new JButton("Seuraava vokaali");
public void init(){
//Asetellaan objektit.
GridLayout appletinAsettelu = new GridLayout(5,1,10,10);
Container ruutu = getContentPane();
ruutu.setLayout(appletinAsettelu);
//Lisätään kuuntelijat.
nappain_1.addActionListener(this);
nappain_2.addActionListener(this);
//Ensimmäinen rivi
FlowLayout asettelu1 = new FlowLayout(FlowLayout.CENTER,10,10);
rivi1.setLayout(asettelu1);
rivi1.add(teksti);
ruutu.add(rivi1);
//Toinen rivi
FlowLayout asettelu2 = new FlowLayout(FlowLayout.CENTER,10,10);
rivi2.setLayout(asettelu2);
rivi2.add(tlaatikko);
ruutu.add(rivi2);
//Kolmas rivi
FlowLayout asettelu3 = new FlowLayout(FlowLayout.CENTER,10,10);
rivi3.setLayout(asettelu3);
rivi3.add(nappain_1);
rivi3.add(nappain_2);
ruutu.add(rivi3);
setContentPane(ruutu);
}
int indeksi = 0;
String mjn = "";
public void actionPerformed(ActionEvent e){
String komento = e.getActionCommand();
if (komento.equals("Aseta")){
//Asetetaan mjono.
mjn = tlaatikko.getText();
}
else if (komento.equals("Seuraava vokaali")){
//Etsitään seuraava vokaali
do {
if (indeksi < mjn.length()-1){
//Luku ei saa mennä ArrayListin yli
indeksi++;
}
} while (mjn.charAt(indeksi) != 'a' && mjn.charAt(indeksi) != 'e' && mjn.charAt(indeksi) != 'i' && mjn.charAt(indeksi) != 'o' && mjn.charAt(indeksi) != 'u' && mjn.charAt(indeksi) != 'y' && indeksi < mjn.length()-1);
//Aloitetaan laskenta alusta, jos ollaan lopussa.
if (mjn.charAt(indeksi) != 'a' && mjn.charAt(indeksi) != 'e' && mjn.charAt(indeksi) != 'i' && mjn.charAt(indeksi) != 'o' && mjn.charAt(indeksi) != 'u' && mjn.charAt(indeksi) != 'y' && indeksi < mjn.length()-1){
indeksi = -1;
}
//Näytetään luku.
if (indeksi != -1){
teksti.setText(String.valueOf(mjn.charAt(indeksi)));
}
if (indeksi == mjn.length()-1){
indeksi = -1;
}
}
}
}Tämä koodi on niin surkea räpellys, että pakko olla spammitrollausta.
Kannattaa käyttää apumuuttujia toiston välttämiseen ja ryhmitellä koodi järkevämmin. Esimerkiksi tuo do-while-silmukka menisi luontevammin niin, että silmukassa vietäisiin indeksiä ylöspäin ja oikean merkin löytyminen olisi silmukan sisällä lopetusehtona. Merkin tunnistamisen voi lyhentää niin, että laittaa hyväksyttävät merkit merkkijonoksi ja tutkii indexOf-metodilla, löytyykö merkki sieltä.
Tuon vokaalin haun voisi tehdä todella paljon helpommin esimerkiksi näin:
// Kierroksia on enintään merkkijonon pituuden verran.
for (int i = 0; i < mjn.length(); ++i) {
// Siirrytään seuraavaan indeksiin. Jakojäännöksellä päästään lopusta alkuun.
indeksi = (indeksi + 1) % mjn.length();
// Tutkitaan tätä merkkiä. Jos on vokaali, näytetään ja lopetetaan silmukka.
final char merkki = mjn.charAt(indeksi);
if ("aeiouyåäö".indexOf(merkki) > -1) {
teksti.setText(String.valueOf(merkki));
break;
}
}Aihe on jo aika vanha, joten et voi enää vastata siihen.