Lab 3

  1. Skriv en metod likbentTriangel(int n) som skriver ut en likbent triangel av asterisker vars bas består av n asterisker, under förutsättning att n är ett udda heltal mindre än 80. För att triangeln ska bli vacker i asteriskgrafik måste varje rad i triangeln innehålla ett udda antal asterisker. Ett anrop likbentTriangel(7) ska alltså ge utskriften
       *
      ***
     *****
    *******
    
    Skriv ett program som använder sig av metoden för att skriva ut en triangel vars bas ges i ett argument på kommandoraden. Skriv programmet så att det testar om det tal som står på kommandoraden är positivt, udda och mindre än 80, och skriver ut ett felmeddelande om dessa villkor inte är uppfyllda.

  2. Definera en klass Stream som har två attribut data och index. index är ett heltal och data är en teckenarray. Konstrueraren ska ta en array av char som enda argument. Klassen ska också innehålla en metod read som returnerar ett tecken. Första anropet av read returnerar första tecknet i data-arrayen, andra anropen ger andra tecknet i arrayen, o.s.v. tills sista tecknet returnerats. Alla följande anrop ger tecknet '\0' i retur.

  3. Skriv en klassdefinition som implementerar gränssnittet Skrikare. Se nedan. Du bestämmer själv vad din version av metoden skrik ska göra.
    interface Skrikare{
        public void skrik();
    }
    
    För att testa din implementation så kan du lägga följande rader i en mainmetod och köra, förutsatt att klassen som implementerar gränssnittet heter Test:
    public static void main(String[] argv){
        Test test1 = new Test();
        Skrikare test2 = new Test();
        test1.skrik();
        test2.skrik();
    }
    

    Ta en liten funderare över resultatet...

  4. (Redovisning) Definiera en offentlig klass med namnet Utility som innehåller en metod
    public static int[] sort(int arr[]){...
    
    Metoden tar en heltalsarray som argument, sorterar talen i stigande ordning i denna array. Följande anrop
    int radda[] = {3,50,10,4,2};
    int svar[] = sort(radda);
    
    skulle resultera i att arrayen svar fick heltalsvärdena {2,3,4,10,50}. Du kan använda valfri algoritm men ange i en kommentar vilken du använder och principen för hur den fungerar.

    Krav:

  5. Definiera en klass Stack som fungerar som en stapel. Man kan lägga och plocka textsträngar från stapeln. När man lägger en sträng till stapeln så hamnar den alltid överst. När man plockar från stapeln så är det alltid den senast lagrade strängen man hämtar.

    Klassen har två attribut stapel och senaste. Attributet stapel är en array av teckensträngar och attributet senaste är ett heltal som pekar ut den senast lagrade strängen i arrayen. Klassen har två instansmetoder

    
    public boolean push(String str){...
    
    och
    public String pop(){...
    
    där metoden push tar en sträng som ett argument och lagrar på stapeln och ökar attributet senaste med ett. Den returnerar true om allt gick bra och annars false, d.v.s. om stapel var full. Metoden pop() plockar bort den senaste strängen och returnerar denna. Attributet senaste ska minskas med ett. Om stapeln är tom returnerar metoden null. Konstrueraren ska ta ett heltal som argument som bestämmer stapelns höjd.

    Följande rader i en main-metod testar om stacken kan lagra och returnera två strängar.

    //test av stacken
    Stack stack = new Stack(5);
    stack.push("Hej");
    stack.push("du");
    	
    System.out.println(stack.pop());
    System.out.println(stack.pop());
    
    Skriv en test av din Stack-klass som utökar ovanstående exempel. Förutom att lagra och läsa ska testet visa vad som händer när:

  6. Definiera en metod
    static int inversioner(int[] a)
    
    som returnerar som värde antalet inversioner i arrayen a. En inversion är ett par i,j av index sådana att i>j men a[i]<a[j]. Exempelvis gäller att en array med medlemmarna

    9 24 70 19 94

    har 2 inversioner, medan

    27 67 78 15 7 15 81 22

    har 14 inversioner.