Nada

Kurs 2D1343 [NADA, KTH]                                               1999-01-17 
Henrik Eriksson

Datalogilaboration 2 - Stjärnor

Slingor och anrop och inläsning är laborationens tema. Men innan ni börjar - städa upp efter förra labben! Endast javafiler ska sparas, classfilerna kan suddas. (Varför?) Det gör en unixexpert med kommandot
   rm *.class
Ännu bättre ordning kan man få genom att skapa underunderkataloger med
   mkdir lab1
   mkdir lab2
   - - -
men det får ni själva avgöra.

Sjutton stjärnor!

Skapa i emacs filen Stars.java med följande innehåll.
class Stars1                                                      {
  public static void main(String args[])                          {
    for(int j=0; j<17; j++) System.out.print("*")                 ;
    System.out.println()                                          ;}}
Kompilera med javac Stars.java, kör med java Stars1 och kolla att sjutton stjärnor skrivs ut. Din uppgift är att lägga till en sats så att fyra sådana stjärnrader skrivs!

Hur långa stjärnrader du vill!

Skriv en ny klass Stars2 som är likadan men där 17 ersätts av ett med n=Mio.GetInt() inläst heltal. Troligen får du nu av javac en åthutning för att du glömt att göra en viss sak...

Vid körningen händer ingenting förrän man matar in ett tal och trycker retur. Om inläsningssatsen placerats före fyravarvsslingan får man då fyra likadana stjärnrader. Med inläsningen inne i slingan blir det intressantare. Man kan då skriva in fyra olika tal och får fyra olika stjärnrader. Pröva båda.

(Om det inte vill fungera: kontrollera att fyravarvsslingan innehåller både inläsning och utskrift. Måsvingar behövs!)

Hur många stjärnrader du vill!

Skriv nu klassen Stars3 där fyravarvsslingan bytts mot en som går oändligt många varv. Här rekommenderas while, men vad ska villkoret inom parentes vara? Provkör med flera tal på samma rad. Pröva tal som 0 och -17. Vad händer om man skriver bokstäver? Hur avbryter man körningen?

Skriv en mer användarvänlig version, Stars4, som börjar med en vänlig utskrift Heltal skilda av mellanslag, tack: och som verkligen avslutar körningen vid radslutet. I Mio.java finns ett lämpligt anrop för detta.

Skriv FEL så får du rätt!

Med lämpligt valda tal kan man få Stars4 att skriva FEL med stjärnor.
*****
*
***
*
*

*****
*
***
*
*****

*
*
*
*
*****
Skriv i emacs en datafil feldata med dessa sjutton tal på samma rad och med radbyte direkt efter sista talet. En unixfiness är att man kan få programmet att läsa från en datafil i stället för från tangenterna på följande enkla sätt.
   java Stars4 < feldata
Om FEL skrivs på skärmen är det rätt.

Anropa en egen metod!

Programmet blir vackrare om du skriver en metod writeStars som från huvudprogrammet kan anropas writeStars(n) och då skriver ut n stjärnor. Metoden writeStars skrivs ungefär som main men med skillnaden att argumentet (alltså indata) till writeStars ska vara int n i stället för String args[]. Och till den nya metoden flyttas forslingan och den följande println-satsen. När du fått denna version, Stars5, att fungera är du klar med labben och kan arkivera javafilen på papper.

Smöra!

Den överambitiösa och smöriga kursdeltagaren gör nu som extrauppgift ett program som räknar ut fakulteten för sjutton.
       17! = 355687428096000
Eftersom en int bara rymmer niosiffriga tal fär man användning för en annan typ. Vilken?

Försök till sist få underskrift av en lärare.

Väl labbat av ......................................... medger.............................. den .................


Sidansvarig: <henrik@nada.kth.se>
Senast ändrad 17 januari 1999
Tekniskt stöd: <webmaster@nada.kth.se>