ÖVNINGSUPPGIFT

Uppgift 2 – Beräkna antal kakelplattor

Försök själv först. Ledtrådar och facit finns längre ner – helt utan inloggning.


Nyckelord: if-satsen, Scanner

Programmera, Analysera och Molnet

Skriv ett program som beräknar antal kakelpaket

Företaget Kakelplattan AB vill ha hjälp med att skriva ett program som ska hjälpa hantverkaren att veta hur många kakelpaket, hur många säckar kakelfix samt hur många säckar kakelfog som ska tas med till respektive kund. Din uppgift blir att skriva ett program som frågar vad för typ av arbete det är och hur många kvadratmeter det är.

Det kan vara tre olika typ av arbeten, Badrum ( B ), Hall ( H ) och Kök ( K ). Du kan använda bokstaven i parentesen för att ange respektive arbete. Ifall hantverkaren anger fel kommando för arbete eller ett värde mindre än noll för kvadratmeter så ska programmet ge ett felmeddelande.

Ett paket kakelplattor innehåller 32 stycken plattor, en säck kakelfix väger 5 kg och en säck kakelfog väger 3 kg.

Ett badrum behöver per kvadratmeter

  • Kakelplattor: 15 st
  • Kakelfix: 0,7 kg
  • Kakelfog: 0,4 kg

En hall behöver per kvadratmeter

  • Kakelplattor: 8
  • Kakelfix: 0,3 kg
  • Kakelfog: 0,25 kg

Ett kök behöver per kvadratmeter

  • Kakelplattor: 12 st
  • Kakelfix: 0,2 kg
  • Kakelfog: 0,15 kg

Eftersom hantverkaren inte kan ta med sig halva paket eller delar av säckar så måste uträkningen alltid avrundas uppåt. Det vill säga ifall beräkningen blir 7,1 paket kakelplattor ska det avrundas till 8 paket kakelplattor, så inte hantverkaren får för lite material med sig.

public static void main (String[] args) {

    // Skriv din kod här

}
Ledtråd

Använd Scanner för att ta in ett värde från användaren. Exempelvis:

import java.util.Scanner;  // Importerar klassen Scanner

public class Scanner_exempel {
    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);

        System.out.println("Ange första talet: ");
        int first = input.nextInt();                // Sparar ned första talet

        System.out.println("Ange andra talet: ");
        int second = input.nextInt();              // Sparar ned andra talet

        // Skriver ut första, andra och första + andra talet
        System.out.println(first + " + " + second + " = " + (first+second));
    }
}
Lösning
import java.util.Scanner;

public class KakelUppgift {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Arbete: B för badrum, H för hall, K för kök");
        String work = input.nextLine().trim();
        double plates, fix, fog;
        if (work.equalsIgnoreCase("B")) {
            plates = 15; fix = 0.7; fog = 0.4;
        } else if (work.equalsIgnoreCase("H")) {
            plates = 8; fix = 0.3; fog = 0.25;
        } else if (work.equalsIgnoreCase("K")) {
            plates = 12; fix = 0.2; fog = 0.15;
        } else {
            System.out.println("Felaktig typ av arbete");
            return;
        }
        System.out.println("Antal kvadratmeter:");
        if (!input.hasNextDouble()) {
            System.out.println("Felaktig area");
            return;
        }
        double area = input.nextDouble();
        if (!Double.isFinite(area) || area < 0) {
            System.out.println("Arean måste vara ändlig och minst 0");
            return;
        }
        System.out.println("Kakelpaket: " + Math.ceil(plates * area / 32));
        System.out.println("Kakelfix: " + Math.ceil(fix * area / 5) + " säckar");
        System.out.println("Kakelfog: " + Math.ceil(fog * area / 3) + " säckar");
    }
}

Vi använder klassen Scanner för att ta in en input från användaren. Vi läser av inputen med funktionen nextLine(). När vi inte bryr oss om det är en stor eller liten bokstav kan vi använda oss av metoden equalsIgnoreCase(). Det innebär exempelvis att work.equalsIgnoreCase('B') är uppfyllt oavsett om strängen work är 'b' eller 'B'. Metoden Math.ceil() avrundar talet uppåt.