Java homework part 3.

Java homework part 3.

Java

The second part of previous homework will be here. This portion of the 10 assignments given was mostly about handling "String" variables with Java. I found the first few exercises to be simple and then the last two to be a bit difficult. I managed to get them correct though I still think that my code could have been a bit more "efficient" on some of the exercises.

Previous part of the same set of homework.

1/5

The first program counts a discount on user input based on whether or not they are "regulars".

kantaasiakas

import java.text.DecimalFormat;
import java.util.Scanner;

public class Kantaasiakas {

    public static void main(String[] args) {

         double PurchasePrice = 0;
         String CustomerStatus;
         double FinalPrice = 0;

         Scanner input = new Scanner(System.in);
        
         System.out.print("Anna ostosten summa: ");
         PurchasePrice = input.nextDouble();
        

         System.out.print("Oletko kanta-asiakas (kyllä, ei): ");
         CustomerStatus = input.next();

         if (CustomerStatus.equals("kyllä")) {
             if (PurchasePrice > 1000) {
                 FinalPrice = PurchasePrice - (PurchasePrice * 0.01);
             }
             else {
                 FinalPrice = PurchasePrice - (PurchasePrice * 0.005);

             }
         }
        
         if (CustomerStatus.equals("ei")) {
             FinalPrice = PurchasePrice;
         }
            
        DecimalFormat desimaalit = new DecimalFormat("0.00");

        System.out.print("Ostosten loppusumma on " +desimaalit.format(FinalPrice));
    }

}

 

2/5

The program is called Sananlasku which stands for proverbs in Finnish. What the program does is it calculates how many proverbs the user typed in until typing "LOPPU" and how many characters they contained in total.

sananlasku

import java.util.Scanner;

public class Sananlasku {

    public static void main(String[] args) {
        // Lukee sananlaskuja kunnes input = loppu
        
        String Proverb;
        int TotalChars = 0;
        
        Scanner input = new Scanner(System.in);
        
        System.out.print("Anna sananlasku: ");
        Proverb = input.nextLine();
        TotalChars = Proverb.length();
        
        for (int i = 1;!Proverb.equals("LOPPU");i++) {
            System.out.print("Anna sananlasku: ");
            Proverb = input.nextLine();
            
            TotalChars = TotalChars + Proverb.length();
            
            if (Proverb.equals("LOPPU")){
                System.out.print("Sananlaskuja oli " + i +" kappaletta.");
                System.out.print("Sananlaskuissa oli merkkejä yhteensä " + (TotalChars - 5));
            }
        }
        

    }

}

 

3/5

A pretty simple program that checks if user input password is correct. The user can only input the password incorrectly three times before the program stops asking for the password.

ruskavahti

import java.util.Scanner;

public class Ovivahti {

    public static void main(String[] args) {
        
        String CorrectPass = "ruska";
        
        Scanner input = new Scanner(System.in);
        
        System.out.print("Ovivahti kysyy 1.kertaa, tunnussana? ");
        CorrectPass = input.nextLine();
        
        if (!CorrectPass.equals("ruska")) {
            for (int i = 2;!CorrectPass.equals("ruska"); i++) {
                System.out.print("Ovivahti kysyy " + i + ". kertaa, tunnussana? ");
                CorrectPass = input.nextLine();
                if (CorrectPass.equals("ruska")){
                    System.out.print("SISÄÄN");
                }
                
                else if(i == 3) {
                    System.out.print("OVI ON LUKITTU");
                    break;
                }
        }
            
            }
        else {
            System.out.print("SISÄÄN");
        }
    }

}

 

4/5

This one was a bit trickier. The program asks for the users full name, street address, ZIP code and postal area. Then the program deletes all unnecessary spaces from the input feed, makes the user input first name and last name begin with an upper case letter and the rest of the name lower case letters, does the same for the address and makes postal area given into all upper case letters.

osoitetarra

import java.util.Scanner;

public class OsoiteTarra {

    public static void main(String[] args) {
        // Kysyy etunimi, sukunimi, osoite, postinumero, postitoimipaikka
        // näyttää tiedot 3 rivillä
        // välilyönnit pois
        // etunimi sukunimi alkaa isolla muut pieniä
        // Postitoimipaikka kaikki isolla
        String FirstName;
        String LastName;
        String UserAddress;
        int PostNumber = 0;
        String City;
        
        Scanner input = new Scanner (System.in);
        
        System.out.print("Anna etu- ja sukunimi: ");
        FirstName = input.next().trim();
        LastName = input.next().trim();

        String FirstLetter = FirstName.substring(0,1).toUpperCase();
        String RestOf = FirstName.substring(1).toLowerCase();
        String BigFirst = FirstLetter + RestOf;
        String LastFirst = LastName.substring(0,1).toUpperCase();
        String RestOfLast = LastName.substring(1).toLowerCase();
        String BigLast = LastFirst + RestOfLast;
        input.nextLine();

        System.out.print("Anna katuosoite: ");
        UserAddress = input.nextLine().trim();
        
        String AddressFirst = UserAddress.substring(0,1).toUpperCase();
        String AddressRest = UserAddress.substring(1).toLowerCase();
        String FullAddress = AddressFirst + AddressRest;
        
        System.out.print("Anna postinumero ja postitoimipaikka: ");
        PostNumber = input.nextInt();
        City = input.nextLine().trim();
        String CityCaps = City.toUpperCase();

        
        System.out.println(BigFirst + " " + BigLast);
        System.out.println(FullAddress);
        System.out.print(PostNumber + " " + CityCaps);
    }

}

5/5

Had some issues with this one. I kept overthinking my solution but occams razor proved to be relevant once again and the solution was much simpler than what my first attempt was. The program checks user given input against given conditions and varies it's feedback based on whether the input meets those conditions or not.

  • Student number must start with an "a" and be 8 characters long.
  • Name can contain letters, spaces and dashes and must be between 2 and 20 characters
  • Student group must start with two upper case letters, then there must be a number and the sequence ends with two upper case letters.
  • Age must be a number between 18-65 and we had to translate the "String" in to an integer.
successrun
Run with correct input
inputiswrong
Input is incorrect

import java.util.Scanner;

public class OpiskelijaTarkastus {

public static void main(String[] args) {
        
        Scanner input = new Scanner(System.in);

        System.out.print("Anna opiskelijatunnus: ");
        String StudentNumber;
        StudentNumber = input.nextLine();
        if(StudentNumber.substring(0,1).matches("a") &&
                StudentNumber.substring(1,8).matches("\\d{7}")) {
            System.out.println("Opiskelijatunnus on kelvollinen");
        }
            else {
                System.out.println("Opiskelijatunnus on kelvoton");
            }
        System.out.print("Anna Opiskelijan nimi: ");
        String StudentName;
        StudentName = input.nextLine();
        if (StudentName.matches("[A-ZÅÄÖ a-zåäö-]{2,20}")){
            System.out.println("Opiskelijan nimi on kelvollinen");
        }
        else {
            System.out.println("Opiskelijan nimi on kelvoton");
        }
        
        System.out.print("Anna opiskelijan ryhmä: ");
        String StudentGroup;
        StudentGroup = input.nextLine();
        if (StudentGroup.matches("[A-Z]{2}\\d{1}[A-Z]{2}")) {
            System.out.println("Opiskelijan ryhmä on kelvollinen");
        }
        else {
            System.out.println("Opiskelijan ryhmä on kelvoton");
        }
        System.out.print("Anna opiskelijan ikä: ");
        String StudentAge;
        StudentAge = input.nextLine();
        
        if (StudentAge.matches("\\d{1,2}")) {
            int AgeAsInt = Integer.parseInt(StudentAge);
              if(AgeAsInt <= 65 && AgeAsInt >= 18) {
                    System.out.print("Ikä on kelvollinen");
                    
                }
                else {
                    System.out.print("ikä pitää olla 18-65");
                }
        }
        else {
            System.out.print("Ikä pitää olla numeerinen");
        }
 

    }

}

Sources:

  • image from: https://svgsilh.com/image/311945.html