KTH 2D1310: Programmeringsteknik
2D1311: Programmeringsteknik med PBL
Nada

Källkod för text-kalkylator.

Koden kan även hittas här.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
import java.io.*;

/** Klassen Kalkylator beskriver en textbaserad kalkylator. */
public class Kalkylator {

    /** Används för att enkelt kunna ta emot användarens
        inmatningar. */
    private static BufferedReader indata =
	new BufferedReader(new InputStreamReader(System.in));

    public static void main(String[] args) throws IOException {
	// Skapa en kalkylator.
	Kalkylator kalkylatorn = new Kalkylator();

	System.out.println("Välkommen!");	
	
	// Håll reda på om användaren vill fortsätta.
	boolean villFortsätta = true;

	// Upprepa följande så länge som användaren vill fortsätta.
	while (villFortsätta) {
	    kalkylatorn.frågaEfterTalen();
	    kalkylatorn.frågaEfterOperator();
	    kalkylatorn.beräkna();
	    System.out.println(kalkylatorn.geResultatString());

	    System.out.print("En gång till (j/J)? ");
	    String svar = indata.readLine();
	    if (svar.equals("j") || svar.equals("J")) 
		villFortsätta = true;
	    else
		villFortsätta = false;
	}
	System.out.println("Tack och hej!");	
    }


    /* Instansvariablerna */
    private double tal1;
    private double tal2;
    private char operator;
    private double resultat;


    /** Konstruktormetoden.  Initierar en nyskapad Kalkylator med
        startvärdena (tal1 = 0, tal2 = 0, operator = '+', resultat =
        0) */
    public Kalkylator() {
	tal1 = 0.0;
	tal2 = 0.0;
	operator = '+';
	resultat = 0.0;
    }


    /** Frågar användaren efter de två talen.  Utnyttjar
        frågaEfterEttTal() */
    public void frågaEfterTalen() throws IOException {
	tal1 = frågaEfterEttTal();
	tal2 = frågaEfterEttTal();
    }


    /** Frågar användaren efter ett tal och returnerar det.  Om
        användaren matar in något galet, så ställs frågan igen (och
        igen... och igen...)  */
    public double frågaEfterEttTal() throws IOException {
	
	boolean korrekt = false;
	double talet = 0.0;

	while (! korrekt) {
	    System.out.print("Ange ett tal: ");
	    
	    try {
		talet = Double.parseDouble(indata.readLine());
		korrekt = true;
	    }
	    catch (NumberFormatException e) {
		System.out.println("Felaktigt tal. Försök igen.");
	    }
	}
	return talet;
    }


    /** Frågar användaren efter en operator och returnerar den.  Om
        användaren matar in något galet, så ställs frågan igen (och
        igen... och igen...)  */
    public void frågaEfterOperator() throws IOException {
	boolean korrekt = false;

	while (! korrekt) {
	    System.out.print("Ange en operator: ");
	    String svar = indata.readLine();

	    if (svar.length() == 1 &&
		"+-*/".indexOf(svar) != -1) {
		operator = svar.charAt(0);
		korrekt = true;
	    }
	    else
		System.out.println("Felaktigt tal. Försök igen.");
	}
    }


    /** Beräknar resultatet baserat på tal1, tal2 och operator.  */
    public void beräkna() {
	if (operator == '+')
	    resultat = tal1 + tal2;
	else if (operator == '-')
	    resultat = tal1 - tal2;
	else if (operator == '*')
	    resultat = tal1 * tal2;
	else if (operator == '/')
	    resultat = tal1 / tal2;
    }


    /** Skriver ut det senast beräknade resultatet.  */
    public String geResultatString() {
	return(tal1 + " " +
	       operator + " " + 
	       tal2 + " är " +
	       resultat + "!");
    }
}

^ Upp till kurssidan.


Sidansvarig: <panda@nada.kth.se>
Senast ändrad 27 juni 2002
Tekniskt stöd: <webmaster@nada.kth.se>