Commit 6637f1b7 authored by Grethe Sandstrak's avatar Grethe Sandstrak
Browse files

legge til filene til workshoppen

parents
class By implements java.io.Serializable{
private String navn;
private String ordfrer;
private int antallInnbyggere;
private int maksAntallInnbyggere = 1000;
public By(String navn, String ordfrer, int antallInnbyggere, int maksAntallInnbyggere) throws Exception{
this.navn = navn;
this.ordfrer = ordfrer;
if (antallInnbyggere <= maksAntallInnbyggere){
this.antallInnbyggere = antallInnbyggere;
this.maksAntallInnbyggere = maksAntallInnbyggere;
} else throw new Exception("Byen kan ikke ha flere innbyggere enn det er plass til!");
}
public By (){}
public String getNavn(){ return navn; }
public void setNavn(String newValue) { navn = newValue; }
public String getOrdfrer(){ return ordfrer; }
public void setOrdfrer(String newValue) { ordfrer = newValue; }
public int getAntallInnbyggere(){return antallInnbyggere;}
public void setAntallInnbyggere(int newValue){ maksAntallInnbyggere = newValue;}
public int getMaksAntallInnbyggere(){ return maksAntallInnbyggere;}
public void setMaksAntallInnbyggere(int newValue){maksAntallInnbyggere = newValue;}
public String toString() {
return navn + " " + ordfrer + " " + antallInnbyggere + " " + maksAntallInnbyggere;
}
public boolean equals(Object obj) {
if (this==obj) return true;
if (obj instanceof By) {
By by = (By) obj;
if (by.getNavn().equals(navn)) return true;
}
return false;
}
public int getLedigKapasitet(){return maksAntallInnbyggere - antallInnbyggere;}
public boolean ledig(){ return (antallInnbyggere <= maksAntallInnbyggere);}
}
\ No newline at end of file
class Land implements java.io.Serializable{
private String navn;
private String statsoverhode;
private By[] byer; // hovedstad indeks 0
private int antallbyer = 0;
public Land(String navn, String statsoverhode, int maksAntallByer) {
this.navn = navn;
this.statsoverhode = statsoverhode;
if (maksAntallByer > 0) {
byer = new By[maksAntallByer];
antallbyer = 0;
}
}
public Land(String navn, String statsoverhode, By[] byer) throws Exception{
this.navn = navn;
this.statsoverhode = statsoverhode;
/* komposisjon */
if (byer != null) {
this.byer = new By[byer.length];
for (int i = 0; i < byer.length; i++) {
this.byer[i] = new By(byer[i].getNavn(), byer[i].getOrdfrer(), byer[i].getAntallInnbyggere(), byer[i].getMaksAntallInnbyggere());
}
}
}
public String getNavn() { return navn; }
public void setNavn(String newValue) {navn = newValue;}
public String getStatsoverhode() { return statsoverhode; }
public void setStatsoverhode(String newValue) {statsoverhode = newValue; }
public String toString() {
String res = navn + ", Statsoverhode: " + statsoverhode + "\n Byer:\n---------------------\n";
for (By b : byer) {
if (b != null) res += b + "\n";
}
return res;
}
private boolean regFr(By by){
if (by != null) {
// sjekk at by ikke er registrert fra fr
for (int i=0; i<antallbyer; i++) {
if (byer[i]!=null && byer[i].equals(by)) {
return true; // by er allerede registrert
}
}
}
return false; // ikke registrert fr
}
public boolean regBy(By by) throws Exception {
if (by != null) {
if (regFr(by)) return false; // by er allerede registrert
if (antallbyer < byer.length) {
byer[antallbyer] = new By(by.getNavn(), by.getOrdfrer(), by.getAntallInnbyggere(), by.getMaksAntallInnbyggere());
return false;
}
}
return true;
}
public int getAntallInnbyggere() {
int antall = 0;
for (int i=0; i<antallbyer; i++) {
antall += byer[i].getAntallInnbyggere();
}
return antall;
}
public By[] getByerMedPlass(int antall) throws Exception{
By[] tmp = new By[byer.length];
int j= 0;
for(int i=0; i<antallbyer; i++){
if(byer[i].getLedigKapasitet()<= antall){
tmp[j] = new By(byer[i].getOrdfrer(), byer[i].getNavn(), byer[i].getAntallInnbyggere(), byer[i].getMaksAntallInnbyggere());
i++;
}
}
if (j==byer.length) return tmp;
else{
By[] returTab = new By[j];
for(int i=0; i<j; i++){
returTab[i] =new By(tmp[i].getNavn(), tmp[i].getOrdfrer(), tmp[i].getAntallInnbyggere(), tmp[i].getMaksAntallInnbyggere());
}
return returTab;
}
}
private String[] getOrdfrere(){
String[] ordfrere = new String[antallbyer];
for(int i=0; i<antallbyer; i++){
ordfrere[i] = byer[i].getOrdfrer();
}
return ordfrere;
}
public String[] getSortertOrdfrerListe() {
String[] ordfrere = getOrdfrere();
for(int start=0; start<ordfrere.length; start++){
int hittilMinst=start;
for(int j=start; j<ordfrere.length; j++){
if(ordfrere[j].compareTo(ordfrere[hittilMinst]) <= 0) hittilMinst=j;
}
// bytt plass start og hittilminst
String tmp = ordfrere[start];
ordfrere[start] = ordfrere[hittilMinst];
ordfrere[hittilMinst] = tmp;
}
return ordfrere;
}
private boolean gyldigIndeks(int indeks){
if (indeks >=0 && indeks<=antallbyer) return true;
else return false;
}
public By getBy(int indeks){
if (gyldigIndeks(indeks)) return byer[indeks];
else return null;
}
}
\ No newline at end of file
import static javax.swing.JOptionPane.*;
import java.io.*;
class Land_Testklient {
public static Land lesFraFil(String filnavn) throws Exception {
try{
FileInputStream innstrom = new FileInputStream(filnavn);
ObjectInputStream inn = new ObjectInputStream(innstrom);
Land land = (Land)inn.readObject(); // kaster eofexception ved tom fil, FileNotFound
inn.close();
return land;
}catch(FileNotFoundException e){
System.out.println("fil ikke funnet!");
}catch(EOFException e){
System.out.println("fil funnet, men tom!");
}
return null;
}
public static boolean skrivTilFil(Land l, String filnavn){
boolean ok = false;
if (l != null){
try{
FileOutputStream utstrom = new FileOutputStream(filnavn); // true = append
ObjectOutputStream ut = new ObjectOutputStream(utstrom);
ut.writeObject(l);
ut.close();
ok = true;
}catch(FileNotFoundException e){
System.out.println("fil ikke funnet!");
}catch(Exception e){
System.out.println("Noe gikk galt med skriving til fil!");
}
}
return ok;
}
public static void main(String[] args) {
String[] muligheter = {"Nytt land", "Registrer by", "List ordfrere", "List alle byer", "Avslutt"};
final int NYTT_LAND = 0;
final int REG_BY = 1;
final int LIST_ORDFRERE = 2;
final int LIST_ALLE_BYER = 3;
final int AVSLUTT = 4;
int valg = showOptionDialog(null, "Velg operasjon", "Eksamen vr 2016", YES_NO_OPTION, INFORMATION_MESSAGE, null, muligheter, muligheter[0]);
Land land = null;
final String filnavn = "landdata.ser";
// les eventuelle data fra fil
try{
land = lesFraFil(filnavn);
if (land == null){ // legger inn noen testdata, her kunne en valgt ta inn brukerinput istd
land = new Land("Norge", "Kong Harald V", 10);
land.regBy(new By("Trondheim", "Otervik, Rita", 170000, 200000));
land.regBy(new By("Oslo", "Borgen, Marianne", 650000, 700000));
land.regBy(new By("Stjrdal", "Vigdenes, Ivar", 23308, 23400));
land.regBy(new By("Verdal", "Iversen, Bjrn", 14855, 15000));
}
}catch(Exception e){
System.out.println("noe gikk galt ved lesing fra fil" + e.toString());
}
while (valg != AVSLUTT){
switch (valg){
case NYTT_LAND:
String navn = showInputDialog("Navn: ");
String statsoverhode = showInputDialog("Statsoverhode: ");
int antallByer = Integer.parseInt(showInputDialog("Maks antallbyer: "));
int sikker = showConfirmDialog(null, "Sikker? - Du vil slette alle tidligere registrerte data");
if (sikker == YES_OPTION) land = new Land(navn, statsoverhode, antallByer);
else showMessageDialog(null, "Avbryter");
break;
case REG_BY:
if (land != null){
String bynavn = showInputDialog("Navn: ");
String ordfrer = showInputDialog("Ordfrer(Etternavn, Fornavn): ");
int antallInnbyggere = Integer.parseInt(showInputDialog("Antall innbyggere: " ));
int maksAntallInnbyggere = Integer.parseInt(showInputDialog("Maks antall innbyggere: " ));
try{
boolean ok = land.regBy(new By(bynavn, ordfrer, antallInnbyggere, maksAntallInnbyggere));
if (ok) showMessageDialog(null, "By registrert");
else showMessageDialog(null, "By er registrert fra fr/ ikke plass til by/ feil inndata");
} catch(Exception e){
showMessageDialog(null, "Antall innbyggere kan ikke vre hyere enn maksAntallInnbyggere" + e.toString());
}
} else showMessageDialog(null, "Du m registrere ett land frst");
break;
case LIST_ORDFRERE:
if (land != null){
String[] oListe = land.getSortertOrdfrerListe();
if (oListe != null){
String res = "";
for (String s: oListe){
res += s + "\n";
}
showMessageDialog(null, "Ordfrere:\n----------------\n" + res);
}
} else showMessageDialog(null, "Du m registrere ett land frst");
break;
case LIST_ALLE_BYER:
if (land != null){
showMessageDialog(null, land);
} else showMessageDialog(null, "Du m registrere ett land frst");
default: break;
}
valg = showOptionDialog(null,"Velg operasjon","Eksamen vr 2016", DEFAULT_OPTION, PLAIN_MESSAGE, null, muligheter, muligheter[0]);
}
// skriv til fil ved avslutt
try{
if (land != null) skrivTilFil(land, filnavn);
System.out.println("Skriv til fil; " + land);
}catch(Exception e) {
System.out.println("Noe gikk galt ved skriving til fil. " + e.toString());
}
}
}
\ No newline at end of file
class By implements java.io.Serializable{
private String navn;
private String ordfrer;
private int antallInnbyggere;
private int maksAntallInnbyggere = 1000;
public By(String navn, String ordfrer, int antallInnbyggere, int maksAntallInnbyggere) throws Exception{
this.navn = navn;
this.ordfrer = ordfrer;
if (antallInnbyggere <= maksAntallInnbyggere){
this.antallInnbyggere = antallInnbyggere;
this.maksAntallInnbyggere = maksAntallInnbyggere;
} else throw new Exception("Byen kan ikke ha flere innbyggere enn det er plass til!");
}
public By (){}
public String getNavn(){ return navn; }
public void setNavn(String newValue) { navn = newValue; }
public String getOrdfrer(){ return ordfrer; }
public void setOrdfrer(String newValue) { ordfrer = newValue; }
public int getAntallInnbyggere(){return antallInnbyggere;}
public void setAntallInnbyggere(int newValue){ antallInnbyggere = newValue;}
public int getMaksAntallInnbyggere(){ return maksAntallInnbyggere;}
public void setMaksAntallInnbyggere(int newValue){maksAntallInnbyggere = newValue;}
public String toString() {
return navn + " " + ordfrer + " " + antallInnbyggere + " " + maksAntallInnbyggere;
}
public boolean equals(Object obj) {
if (this==obj) return true;
if (obj instanceof By) {
By by = (By) obj;
if (by.getNavn().equals(navn)) return true;
}
return false;
}
public int getLedigKapasitet(){return maksAntallInnbyggere - antallInnbyggere;}
public boolean ledig(){ return (antallInnbyggere <= maksAntallInnbyggere);}
}
\ No newline at end of file
import org.junit.Test;
import static org.junit.Assert.*;
import org.junit.*;
public class Land_Fasit_Test{
private static Land instance;
@BeforeClass
public static void setUpClass() throws Exception {
}
@AfterClass
public static void tearDownClass() throws Exception {
}
@Before
public void setUp()throws Exception {
//legge inn kjent data i tabellene
instance = new Land("Norge", "Kong Harald V", 4); // plass til kun en by
instance.regBy(new By("By1", "Ordfrer1, en", 10, 12));
instance.regBy(new By("By2", "Ordfrer2, to", 10, 100));
instance.regBy(new By("By3", "Ordfrer3, tre", 10, 200));
}
@After
public void tearDown() {
// tilbakestill
}
/* Test av metoden getBy */
@Test
public void testGetBy() throws Exception{
System.out.println("testGetBy()");
By result = instance.getBy(0);
By expResult = new By("By1", "Ordfrer1, en", 10, 12);
assertEquals(expResult, result);
}
/* Test av metoden getByerMedPlass */
@Test
public void testGetByerMedPlass() throws Exception{
System.out.println("testGetByerMedPlass()");
int antNyeInnbyggere = 80;
By[] expResult = {new By("By2", "Ordfrer2, to", 10, 100), new By("By3", "Ordfrer3, tre", 10, 200)};
By[] result = instance.getByerMedPlass(antNyeInnbyggere);
assertArrayEquals(expResult, result);
}
/* Test av metoden Land.regBy */
@Test (expected=Exception.class)// kan ikke opprette en by med for mange innbyggere
public void testregByForMangeInnbyggere() throws Exception{
System.out.println("testregByForMangeInnbyggere()");
// skal kaste unntak fordi byen har for mange innbyggere, unntaket kastes fra konstruktr i klassen By
instance.regBy(new By("TulleBy", "Hansen, Hege", 100, 10));
}
@Test // Normalsituasjon, reg en ok by
public void testregByOk() throws Exception{
System.out.println("testregByOk()");
// registrere en by - normalsituasjon skal vre ok
boolean result = instance.regBy(new By("Trondheim", "Otervik, Rita", 170000, 200000));
boolean expResult = true;
assertEquals(expResult, result);
}
@Test // kan ikke opprette samme by to ganger
public void testregByDuplikat() throws Exception{
System.out.println("testregByDuplikat()");
// registrere en by - normalsituasjon skal vre ok
instance.regBy(new By("Trondheim", "Otervik, Rita", 170000, 200000));
// registrere samme by to ganger - forventes feile
boolean result = instance.regBy(new By("Trondheim", "Otervik, Rita", 170000, 200000));
boolean expResult = false;
assertEquals(expResult, result);
}
@Test // kan ikke opprette flere byer enn det er plass til
public void testregByIkkePlass() throws Exception{
System.out.println("testregByIkkePlass()");
// registrere en by - normalsituasjon skal vre ok
instance.regBy(new By("Trondheim", "Otervik, Rita", 170000, 200000));
// registrere en by mer enn det er plass til, forventes feile
boolean result = instance.regBy(new By("Stjrdal", "Vigdenes, Ivar", 23308, 23400));
boolean expResult = false;
assertEquals(expResult, result);
}
public static void main(String args[]) {
org.junit.runner.JUnitCore.main(Land_Fasit_Test.class.getName()); // tas med dersom textpad ikke er konfigurert
}
}
\ No newline at end of file
class Land implements java.io.Serializable{
private String navn;
private String statsoverhode;
private By[] byer; // hovedstad indeks 0
private int antallbyer = 0;
public Land(String navn, String statsoverhode, int maksAntallByer) {
this.navn = navn;
this.statsoverhode = statsoverhode;
if (maksAntallByer > 0) {
byer = new By[maksAntallByer];
antallbyer = 0;
}
}
public Land(String navn, String statsoverhode, By[] byer) throws Exception{
this.navn = navn;
this.statsoverhode = statsoverhode;
/* komposisjon */
if (byer != null) {
this.byer = new By[byer.length];
for (int i = 0; i < byer.length; i++) {
this.byer[i] = new By(byer[i].getNavn(), byer[i].getOrdfrer(), byer[i].getAntallInnbyggere(), byer[i].getMaksAntallInnbyggere());
}
}
}
public String getNavn() { return navn; }
public void setNavn(String newValue) {navn = newValue;}
public String getStatsoverhode() { return statsoverhode; }
public void setStatsoverhode(String newValue) {statsoverhode = newValue; }
public String toString() {
String res = navn + ", Statsoverhode: " + statsoverhode + "\n Byer:\n---------------------\n";
for (By b : byer) {
if (b != null) res += b + "\n";
}
return res;
}
private boolean regFr(By by){
if (by != null) {
// sjekk at by ikke er registrert fra fr
for (int i=0; i<antallbyer; i++) {
if (byer[i]!=null && byer[i].equals(by)) {
return true; // by er allerede registrert
}
}
}
return false; // ikke registrert fr
}
public boolean regBy(By by) throws Exception {
if (by != null) {
if (regFr(by)) return false; // by er allerede registrert
if (antallbyer < byer.length) {
byer[antallbyer] = new By(by.getNavn(), by.getOrdfrer(), by.getAntallInnbyggere(), by.getMaksAntallInnbyggere());
antallbyer++;
return true;
}
}
return false;
}
public int getAntallInnbyggere() {
int antall = 0;
for (int i=0; i<antallbyer; i++) {
antall += byer[i].getAntallInnbyggere();
}
return antall;
}
public By[] getByerMedPlass(int antall) throws Exception{
By[] tmp = new By[byer.length];
int j= 0;
for(int i=0; i<antallbyer; i++){
if(byer[i].getLedigKapasitet()>= antall){
tmp[j] = new By(byer[i].getNavn(), byer[i].getOrdfrer(), byer[i].getAntallInnbyggere(), byer[i].getMaksAntallInnbyggere());
j++;
}
}
if (j==byer.length) return tmp;
else{
By[] returTab = new By[j];
for(int i=0; i<j; i++){
returTab[i] =new By(tmp[i].getNavn(), tmp[i].getOrdfrer(), tmp[i].getAntallInnbyggere(), tmp[i].getMaksAntallInnbyggere());
}
return returTab;
}
}
private String[] getOrdfrere(){
String[] ordfrere = new String[antallbyer];
for(int i=0; i<antallbyer; i++){
ordfrere[i] = byer[i].getOrdfrer();
}
return ordfrere;
}
public String[] getSortertOrdfrerListe() {
String[] ordfrere = getOrdfrere();
for(int start=0; start<ordfrere.length; start++){
int hittilMinst=start;
for(int j=start; j<ordfrere.length; j++){
if(ordfrere[j].compareTo(ordfrere[hittilMinst]) <= 0) hittilMinst=j;
}
// bytt plass start og hittilminst
String tmp = ordfrere[start];
ordfrere[start] = ordfrere[hittilMinst];
ordfrere[hittilMinst] = tmp;
}
return ordfrere;
}
private boolean gyldigIndeks(int indeks){
if (indeks >=0 && indeks<=antallbyer) return true;
else return false;
}
public By getBy(int indeks){
if (gyldigIndeks(indeks)) return byer[indeks];
else return null;
}
}
\ No newline at end of file
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
/**
*
* @author grethsan
*/
import java.util.*;
class AlfabetSpill {
public static void main(String[] args) {
try{
Kortstokk kortstokken = new Kortstokk();
Spill spillet = new Spill(new Spiller("Grethe"), new Spiller("Nils"));
String resultat = spillet.spillMangeOmganger(13);
System.out.println(resultat + "\n" + spillet.avsluttSpill());
} catch(Exception e){
System.out.println(e);
}
}
} // AlfabetSpill
/* Kjøring av programmet
Grethe trakk K. Nils trakk Y. De byttet ikke. Grethe har 1 p. og Nils har 0 p.
Grethe trakk M. Nils trakk R. De byttet ikke. Grethe har 2 p. og Nils har 0 p.
Grethe trakk V. Nils trakk U. De byttet. Grethe har 3 p. og Nils har 0 p.
Grethe trakk G. Nils trakk Q. De byttet ikke. Grethe har 4 p. og Nils har 0 p.
Grethe vant :)
*/
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.