Uppgift 1 Lösningsförslag till tentamen 150117 a) Utskriften blir: 7 Metoden returnerar värdet av den största siffran som ingår i talet som skickas till metoden. b) Utskriften blir k= 5 a= [3, 1] b= [3, 3] c) En lokal variabel är synlig inom det programblock där variabeln deklareras. Variabeln b är alltså okänd utanför do-blocket. En korrekt kod har följande utseende: boolean b; do { b = Math.random() < 0.5; while (b);
Uppgift 2 Med användning av dialogrutor: import javax.swing.joptionpane ; import java.util.scanner; public class Salary { public static double payment(double hours, double perhour) { double payout; if (hours > 40 ) payout = 40 * perhour + (hours - 40) * 1.5 * perhour; else payout = hours * perhour; return payout; //payment public static void main(string[] args){ while(true) { String indata = JOptionPane.showInputDialog("Ange antalet arbetstimmar och timlön: "); if (indata == null) break; Scanner sc = new Scanner(indata); double nrofhours = sc.nextdouble(); double salaryperhour = sc.nextdouble(); if (nrofhours < 0 salaryperhour < 0) JOptionPane.showMessageDialog(null, "Felaktig indata"); else JOptionPane.showMessageDialog(null, String.format("Veckolönen är %.2f kronor", payment(nrofhours, salaryperhour))); // main //Salary Med användning av System.in och System.out: main-metoden får följande utseende: public static void main(string[] args){ while(true) { System.out.print("Ange antalet arbetstimmar och timlön: "); Scanner sc = new Scanner(System.in); if (!sc.hasnext()) break; double nrofhours = sc.nextdouble(); double salaryperhour = sc.nextdouble(); if (nrofhours < 0 salaryperhour < 0) System.out.println("Felaktig indata"); else System.out.printf("Veckolönen är %.2f kronor\n", payment(nrofhours, salaryperhour)); // main
Uppgift 3 public static int[] getindexofmaxvalues( int[] vekt) { int max = getmaxvalue(vekt); int nrofmaxvalues = nrofoccurrence(vekt, max); int [] res = new int[nrofmaxvalues]; int pos = 0; for (int index = 0; index < vekt.length; index = index + 1) { if (vekt[index] == max) { res[pos] = index; pos = pos + 1; return res; //getindexofmaxvalues private static int getmaxvalue(int[] vekt) { int max = vekt[0]; for (int i = 1; i < vekt.length; i = i + 1) { if (vekt[i] > max) max = vekt[i]; return max; //getmaxvalue private static int nrofoccurrence(int[] vekt, int value) { int counter = 0; for (int i = 0; i < vekt.length; i = i + 1) { if (vekt[i] == value) counter = counter + 1; return counter; //nrofoccurrence Uppgift 4 public static int[][][] frosty(int[][][] samples) { int[][][] newsamples = new int[samples.length][samples[0].length][3]; for (int row = 0; row < samples.length; row = row + 1) { for (int col = 0; col < samples[row].length; col = col + 1) { int xn = disturb(row, 5, samples.length-1); int yn = disturb(col, 5, samples[0].length-1); for (int c = 0; c < 3; c++) { newsamples[row][col][c] = samples[xn][yn][c]; return newsamples; //frosty private static int disturb(int x, int d, int max) { int nx = x + (int)(d*math.random()); return Math.max(0,Math.min(nx,max));
Uppgift 5 public class FibonacciWords { public static void main(string[] args) { System.out.println(fibonacciWord(3)); public static String fibonacciword(int n) { String s0 = "0"; String s1 = "01"; String s2 = ""; if (n == 0) { return s0; else if (n == 1) { return s1; else { for (int i = 0; i < n - 1 ; i++) { s2 = s1 + s0; s0 = s1; s1 = s2; return s2;
Uppgift 6 public class AllLanguage { private static final String VOWEL = "aouåeiyäö"; public String toall(string swe) { String all = ""; for (String word : swe.split(" ")) { int i = indexoffirstconsonant(word); if (i >= 0) { all = all + word.substring(0, i + 1) + "all" + word.substring(i + 1) + " "; else { all = all + word + " "; return all; private boolean isconsonant(char ch) { return VOWEL.indexOf(ch) < 0; private int indexoffirstconsonant(string word) { int index = 0; while (!isconsonant(word.charat(index))) { index++; if (index >= word.length()) { return -1; return index; public static void main(string[] args) { System.out.println(new AllLanguage().toAll("Hur är läget?")); Alternativa lösningar: private int indexoffirstconsonant2(string word) { int index = -1; for (int i = 0; i < word.length(); i++) { if (isconsonant(word.charat(i))) { index = i; break; return index; private int indexoffirstconsonant3(string word) { int index = -1; for (int i = word.length()-1; i >= 0; i--) { if (isconsonant(word.charat(i))) { index = i; return index;
Uppgift 7 public class Card { private final int value; private final String color; // enum better public Card(int value, String color) { this.value = value; this.color = color; import java.util.list; public class CardGame { private final List<Player> players; private Player actual; public CardGame(List<Player> players) { this.players = players; public void pickcard(){ actual.pickcard(); import java.util.list; public class Deck { private final List<Card> deck; public Deck(List<Card> deck) { this.deck = deck; public Card remove() { return deck.remove(0); public class Player { private final Deck deck; private final String name; private final List<Card> hand = new ArrayList<>(); public Player(Deck deck, String name) { this.deck = deck; this.name = name; public void pickcard() { hand.add(deck.remove());
import java.util.arraylist; import java.util.list; public class CommandLineGame { public static void main(string[] args) { buildgame(); game.pickcard(); private static CardGame buildgame() { List<Card> cards = new ArrayList<>(); for (int i = 0; i < 13; i++) { cards.add(new Card(i, "hearts")); // Same för clubs, diamonds, spades Deck deck = new Deck(cards); List<Player> players = new ArrayList<>(); players.add(new Player(deck, "olle")); players.add(new Player(deck, "fia")); return new CardGame(players); Uppgift 8 a) I Java finns två olika objektlikhet. Likhetsoperatorn == ger likhet mellan referenser till objekt (d.v.s identitet om de är lika). Vanligen vill man ha dock likhet mellan värden t.ex. om två tärningar visar samma värde. Likhet utifrån värde skall ges av metoden equals(). Metoden equals() finns i t.ex. String-klassen. Om en klass inte själv definierar en equals-metod så ärvs en från klassen Object. Den ärvda metoden fungerar (tyvärr) på samma sätt som ==. För att få likhet utifrån värde måste man överskugga equals-metoden. Se b) b) public class Player { private String name; @Override public boolean equals(object obj) { if (obj == null) { return false; if (getclass()!= obj.getclass()) { return false; final Player other = (Player) obj; return this.name.equals(other.name);