You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Next »

En enkel og rett frem oversettelse av rpncalc1.py til Java, med en opplisting av de viktigste forskjellene.

Java-pakker og -klasser

Java-kode struktureres i mapper som kalles pakker (eng: package). Pakken må deklareres øverst i fila med en package-setning. Vi velger å legge koden i en mappe/pakke med navn python, så setningen blir package python; (se nedenfor om bruk av semi-kolon).

Én fil tilsvarer vanligvis én klasse og navnet må deklareres i en klasse-deklarasjon. Konvensjonen er å bruke såkalt camel case, hvor hver del av et sammensatt ord begynner med stor forbokstav og det ellers ikke brukes ordskiller. Derfor bruker vi RPNCalc1 som klassenavn, så klassedeklarasjonen blir dermed class RPNCalc1 { } og filnavnet blir RPNCalc1.java. Alt innholdet forøvrig plasseres mellom et krøllparentesene (se nedenfor om bruk av krøllparenteser).

Variabler

Variabler må alltid deklareres eksplisitt med en type, før eller idet de tilordnes en verdi. operands-variablen er en liste av desimaltall, og i Java finnes det en standardtype som heter List i java.util-pakken.  Når en bruker såkalte container-klasser, f.eks. lister, sett og dictionaries (kalles map i Java), så må en også oppgi hvilken type elementene har, og her bruker vi desimaltall-typen Double. Deklarasjonen blir dermed i utgangspunktet java.util.List<Double> operands; Siden det også (kan) finnes andre klasser med samme navn, må vi enten bruke det fulle navnet java.util.List eller ha med en import-setning som sier at når vi skriver List, så mener vi egentlig java.util.List. For å slippe å skrive

RPNCalc1.java

Og her er all koden:

package python;

import java.util.List;
import java.util.ArrayList;
import java.util.Scanner;

class RPNCalc1 {
    List<Double> operands = new ArrayList<Double>();
    void main() {
        Scanner scanner = new Scanner(System.in);
        while (true) {
            System.out.println(operands);
            System.out.print(" > ");
            String token = scanner.nextLine();
            if (Character.isDigit(token.charAt(0))) {
                double operand = Double.valueOf(token);
                operands.add(operand);
            } else if (token.equals("exit")) {
                break;
            } else if (token.equals("+")) {
                operands.add(operands.remove(operands.size() - 1) + operands.remove(operands.size() - 1));
            } else if (token.equals("-")) {
                operands.add(- (operands.remove(operands.size() - 1) - operands.remove(operands.size() - 1)));
            } else {
                System.out.println("Unsupported operator: " + token);
            }
        }
        System.out.println("program exited");
        scanner.close();
    }
    
    public static void main(String[] args) {
        new RPNCalc1().main();
    }
}
  • No labels