Miten muutan, että toimisi edes HIEMAN paremmin?
________________________________________________
import java.io.*;
public class Automaatti2 {
public static void main(String[] args) throws IOException {
int tunnusLuku, valinta, tiliNumero, talletus;
int nosto, maksu;
String nimi;
char vastaus;
System.out.println("TERVETULOA");
System.out.print("Syötä kortti ja anna tunnusluku:");
tunnusLuku=Oma.lueInt();
valinta=Oma.lueInt();
talletus=Oma.lueInt();
vastaus=Oma.lueChar();
nosto=Oma.lueInt();
nimi=Oma.lueString();
tiliNumero=Oma.lueInt();
while (tunnusLuku!=0){
System.out.println("Antamasi tunnusluku on virheellinen");
System.out.print("Anna tunnusluku uudelleen:");
tunnusLuku=Oma.lueInt();
}
if (tunnusLuku==0)
{
System.out.println("1. Tilin avaus ja talletukset");
System.out.println("2. Saldokysely");
System.out.println("3. Seteliotot");
System.out.println("4. Lopetus");
System.out.print("Valinta on:");
valinta=Oma.lueInt();
}
while(valinta==1)
{
System.out.println("Anna tilinumero:");
tiliNumero=Oma.lueInt();
System.out.println("Anna nimesi:");
nimi=Oma.lueString();
System.out.println("Tee talletus summalle:");
talletus=Oma.lueInt();
System.out.print("Seuraava valinta on:");
valinta=Oma.lueInt();
FileOutputStream tiedosto = new FileOutputStream("tili.txt, true");
PrintWriter kirjoittaja = new PrintWriter(tiedosto, true);
kirjoittaja.println("Tilin omistaja:" nimi);
kirjoittaja.println("Tilinumero" tiliNumero);
kirjoittaja.println("Saldo" talletus);
tiedosto.close();
}
while (valinta==2){
System.out.println("Saldosi on:" talletus);
System.out.print("Seuraava valinta on:");
valinta=Oma.lueInt();
talletus=Oma.lueInt();
talletus= talletus-nosto;
}
while (valinta==3){
System.out.print("Nostan rahaa:");
nosto=Oma.lueInt();
System.out.print("Seuraava valinta on:");
valinta=Oma.lueInt();
}
while (valinta==4){
System.out.println("Lopeta ohjelma (k)?");
vastaus=Oma.lueChar();
}
while(vastaus=='k');
System.exit(0);
}
}
________________________________________________
import java.io.*;
public class Automaatti2 {
public static void main(String[] args) throws IOException {
int tunnusLuku, valinta, tiliNumero, talletus;
int nosto, maksu;
String nimi;
char vastaus;
System.out.println("TERVETULOA");
System.out.print("Syötä kortti ja anna tunnusluku:");
tunnusLuku=Oma.lueInt();
valinta=Oma.lueInt();
talletus=Oma.lueInt();
vastaus=Oma.lueChar();
nosto=Oma.lueInt();
nimi=Oma.lueString();
tiliNumero=Oma.lueInt();
while (tunnusLuku!=0){
System.out.println("Antamasi tunnusluku on virheellinen");
System.out.print("Anna tunnusluku uudelleen:");
tunnusLuku=Oma.lueInt();
}
if (tunnusLuku==0)
{
System.out.println("1. Tilin avaus ja talletukset");
System.out.println("2. Saldokysely");
System.out.println("3. Seteliotot");
System.out.println("4. Lopetus");
System.out.print("Valinta on:");
valinta=Oma.lueInt();
}
while(valinta==1)
{
System.out.println("Anna tilinumero:");
tiliNumero=Oma.lueInt();
System.out.println("Anna nimesi:");
nimi=Oma.lueString();
System.out.println("Tee talletus summalle:");
talletus=Oma.lueInt();
System.out.print("Seuraava valinta on:");
valinta=Oma.lueInt();
FileOutputStream tiedosto = new FileOutputStream("tili.txt, true");
PrintWriter kirjoittaja = new PrintWriter(tiedosto, true);
kirjoittaja.println("Tilin omistaja:" nimi);
kirjoittaja.println("Tilinumero" tiliNumero);
kirjoittaja.println("Saldo" talletus);
tiedosto.close();
}
while (valinta==2){
System.out.println("Saldosi on:" talletus);
System.out.print("Seuraava valinta on:");
valinta=Oma.lueInt();
talletus=Oma.lueInt();
talletus= talletus-nosto;
}
while (valinta==3){
System.out.print("Nostan rahaa:");
nosto=Oma.lueInt();
System.out.print("Seuraava valinta on:");
valinta=Oma.lueInt();
}
while (valinta==4){
System.out.println("Lopeta ohjelma (k)?");
vastaus=Oma.lueChar();
}
while(vastaus=='k');
System.exit(0);
}
}
Vastaukset 8
Vanhimmat
Siis mitä kääntäjä valittaa? Vai miksei toimi? En jaksa lukea koodia ;)
Näyttää toimivan ainakin mulla ihan hyvin. Lukijaluokkana käytin Wiklan Lue-luokkaa.
if (tunnusLuku==0) taitaa olla turha, sillä sitä edeltävän whilen jälkeen tuo on aina totta.
Mentäessä while (valinta==4) looppiin joudutaan ikilooppiin.
while(vastaus=='k'); toistuu myös ikuisesti (huomaa, ettei whilen ehdon ja puolipilkun välillä ole mitään, mikä muuttaisi vastauksen arvoa).
Valintojen testaus olisi siistimpää tehdä vaikka switch-casella.
Niin vika on siinä, kun alan suorittaa ohjelmaa, niin "tunnusluvun" joutuu antamaan monta kertaa ennen kuin ohjelma menee eteenpäin ja jossain vaiheessa se sitten vaan tökkää... mutta kiitos avustanne.
while(tunnusluku!=0)
{
kysy tunnusluku uudestaan
}
Eli nii kauan kysytään tunnuslukua, kunnes tunnusluvuksi annetaan 0
ja se silti kysyy sitä vaan uudestaan, niin tarkista, että se tosiaan lukee tunnusluvuksi varmasti vaan sen 0, eikä esimerkiksi 0 enter
Sen voi tarkistaa tunnusluvun kyselyn jälkeen vaikka näin:
System.out.println("Luku oli:" tunnusluku ":");
Vaikka annan heti oikean tunnusluvun eli 0, niin siitä huolimatta sen joutuu syöttämään useammin kuin kerran. Johtuukohan sitten tuosta Enteristä, täytyypä kokeilla.
Ihan selvä koulutyö.