/* Tehtävä 11 (Jaakko Nurro 2006) */ import java.util.Scanner; public class Joulukuusi { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); //luodaan Scanner-olio, jolta voi pyytää sitten kokonaislukuja int korkeus = 0; /* Korkeutta kysellään käyttäjältä, kunnes tämä syöttää ei-negatiivisen luvun. * HUOM! Jos käyttäjä syöttää jotain muuta kuin kokonaisluvun, ohjelma kaatuu * javatulkin virheilmoitukseen, mutta tämä on tehtävänannossa sallittu. */ do { System.out.println("Minkä korkuisen (positiivinen kokonaisluku) joulukuusen haluat?"); korkeus = lukija.nextInt(); if (korkeus <0) System.out.println("Korkeuden pitäisi olla positiivinen kokonaisluku, nollakin käy."); } while (korkeus < 0); /* Tulostetaan joulukuusen tähtirivit */ for (int rivi=1; rivi<=korkeus; rivi++) { /* Rivin alkuun tulee välilyöntejä */ for (int tyhjä=korkeus-rivi; tyhjä > 0; tyhjä--) System.out.print(" "); /* Välilyöntien jälkeen tulee tulostettavan rivin numero*2 -1 tähteä */ for (int tähtiä=rivi*2-1; tähtiä >0; tähtiä-- ) System.out.print("*"); System.out.println(); //kun koko rivi on tulostettu, vaihdetaan riviä } } } /* Tehtävä 12 (Jaakko Nurro 2006) */ import java.util.Scanner; public class Karkausvuodet { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); //luodaan Scanner-olio, jonka avulla lukea lukuja näppäimistöltä int vuosi1, vuosi2; System.out.println("Syötä kaksi vuosilukua, joiden väliltä haluat nähdä karkausvuodet lueteltuna. Vuosilukujen tulee olla kokonaislukuja"); System.out.println("Syötä ensimmäinen luku:"); vuosi1 = lukija.nextInt(); System.out.println("Syötä toinen luku:"); vuosi2 = lukija.nextInt(); /* Ohjelma luettelee luvut pienimmästä suurimpaan. Jotta se onnistuisi * kätevästi, pidetään huoli siitä, että vuosi1 on aloitusvuosi ja vuosi2 * lopetusvuosi. Käyttäjä voi kuitenkin syöttää ne missä tahansa * järjestyksessä, joten jos vuosi2 < vuosi1, vaihdetaan muuttujien arvot niin * että vuosi1 <= vuosi2. */ if(vuosi2 < vuosi1) { /* Vaihdossa tarvitaan tallelokero, jotta kummankin muuttujan arvo * säilyisi tallessa. Mietipä mitä tapahtuisi jos * vaihtoa yritettäisiin lauseilla vuosi1=vuosi2; vuosi2=vuosi1; ? */ int tallelokero = vuosi2; vuosi2 = vuosi1; vuosi1 = tallelokero; } /* Karkausvuosien etsiminen aloitetaan muuttujan vuosi1 arvosta ja päätetään * se vuosi2 arvoon*/ for (int i=vuosi1; i<=vuosi2; i++){ if (i%4 == 0 && (i%100 != 0 || i%400 == 0) && i != 4000)//karkausvuosiehto System.out.println(i); //karkausvuosiehdon täyttävä vuosiluku tulostaan } } } /* Tehtävä 13 (Jaakko Nurro 2006, syötteiden koon tarkistus Jukka Stenlund 2006) */ import java.util.Scanner; public class LuvunArvaus { public static void main(String[] args) { Scanner lukija = new Scanner(System.in); int koneenLuku = (int)(10*Math.random());//satunnainen kokonaisluku väliltä 0-9 int saldo = 0; //pelaajan virtuaalieurot int potti = 400; // mitä saa arvauskerralla 1 /* Ensin kerrotaan pelaajalle pelin henki */ System.out.println("Sinulla on kolme arvausta arvata kokonaisluku väliltä 0-9."); System.out.println("Jos osut oikeaan ensimmäisellä arvauksella, voitat 400 virtuaalieuroa."); System.out.println("Jos luvuista toinen on sama kuin koneen arpoma, voittaa 200 virtuaalieuroa."); System.out.println("Jos luvuista kolmas on sama kuin koneen arpoma, voittaa 100 virtuaalieuroa."); System.out.println("Jos mikään luvuista ei ollut sama kuin koneen arpoma, häviää 100 virtuaalieuroa."); System.out.println("Mikään ei estä arvaamasta samaa lukua useampaankin kertaan."); System.out.println("Saldosi on alkuun "+saldo+" virtuaalieuroa."); /* kolme arvausta toteutetaan toistamalla arvauksia */ for (int i = 0; i < 3; i++) { System.out.println("Arvaus " + (i + 1) + ":"); int arvaus = 0; // käyttäjän arvaama luku, alustetaan nollaksi boolean syöteOK = false; // onko käyttäjä syöttänyt // kokonaisluvun? do { /* tarkistetaan onko käyttäjä syöttänyt kokonaisluvun */ syöteOK = lukija.hasNextInt(); if (syöteOK) { arvaus = lukija.nextInt(); // nyt ei ohjelman pitäisi // kaatua tähän syöteOK = (arvaus >= 0 && arvaus <= 9); // tarkistetaan, // onko luku // oikealta väliltä if (!syöteOK) System.out.print("Arvauksen pitää olla väliltä 0-9. "); } else { // käyttäjä on syöttänyt jotain muuta kuin // kokonaisluvun System.out.print("Arvauksen pitää olla kokonaisluku. "); lukija.next(); // ohitetaan roska eikä välitetä kutsun // arvostakaan } if (!syöteOK) System.out.println("Saat arvata uudelleen.");//Kun tulostetaan tässä, ei tarvi kirjoittaa tätä kahteen paikkaan koodissa. } while (!syöteOK); // toistetaan siis kunnes käyttäjä syöttää // kokonaisluvun if (arvaus == koneenLuku) saldo += potti; // arvattiin oikein, joten saldoa kasvatetaan // potilla potti /= 2; // potti puolittuu joka kierros } if (saldo ==0) saldo = -100; // ei oikeita arvauksia System.out.println("Oikea luku oli "+koneenLuku+"."); System.out.println("Saldosi on siis "+saldo+" virtuaalieuroa."); } } /* Tehtävä 14 (Jaakko Nurro 2006, next() -> nextLine() -korjaus Jukka Stenlund 2006) */ import java.util.Scanner; public class HiuksetPystyyn { /* lukee yhden syöttörivin ja tulostaa tuon rivin kahteen kertaan yhdelle * tulostusriville */ private static void kirjoitaLuettuRiviTuplana() { /* Kutsutaan luettuTuplanaa()-metodia, joka kätevästi tuottaa * juuri sellaisen merkkijonon, kuin haluamme tulostuvan, tulostetaan * sen kutsun arvo. */ System.out.println(luettuTuplanaa()); } /* lukee yhden syöttörivin ja palauttaa arvonaan tuon rivin katenoituna * (eli yhteenliitettynä) itsensä kanssa*/ private static String luettuTuplanaa() { Scanner lukija = new Scanner(System.in); String rivi = lukija.nextLine(); return rivi+rivi; } /* tulostaa parametrina annetun kokonaisluvun kerrottuna parametrina * annetulla kertojalla*/ private static void kirjoitaLukuKerrottuna(int luku, int kertoja) { /* Kutsutaan kerro()-metodia joka kätevästi laskee juuri sen mitä halutaankin * tulostuvan ja annetaan sen parametriksi parametrina * saadut arvot. Kutsun arvo annetaan tulostettavaksi println()-metodille. */ System.out.println(kerro(luku, kertoja)); } /* palauttaa arvonaan parametrina annetun kokonaisluvun kerrottuna * parametrina annetulla kertojalla */ private static int kerro(int luku, int kertoja) { return luku * kertoja; } /* palauttaa arvonaan pienemmän double-parametreista; jos parametrit * ovat yhtä suuret palautetaan jälkimmäisen arvo */ private static double minimi(double eka, double toka) { if (eka < toka) return eka; else return toka; } /* palauttaa arvonaan true, jos kahdesta parametrista ensimmäinen * on suurempi kuin toinen, muuten metodi palauttaa arvon false.*/ private static boolean suurempi(int eka, int toka) { return eka > toka; } /* Pääohjelmametodi ylläolevien metodien käyttöön ja testaamiseen. * Tässä on pyritty lausekattavuuteen, eli siihen että jokainen ohjelmarivi * suoritetaan ainakin kerran. */ public static void main(String[] args) { int i=5, j=6; System.out.println("Testataan tuplana kirjoittamista, syötä merkkijono?"); kirjoitaLuettuRiviTuplana(); System.out.println("i="+i+" ja j ="+j); System.out.println("Onko i>j? ..."+suurempi(i,j)); System.out.println("Onko j>i? ..."+suurempi(j,i)); System.out.println("i*j= ..."); kirjoitaLukuKerrottuna(i,j); System.out.println("Pienempi noista on siis "+minimi(i,j)); System.out.println("Testaillaan, älä välitä tulostuksista ellet ole lukenut lähdekoodia..."); System.out.println(minimi(3.14,2.78)); System.out.println(minimi(2.78,3.14)); } } /* Tehtävä 15 (Jaakko Nurro 2006) */ import java.util.Scanner; public class KeskiarvonLaskentaPalvelu { /* Keskiarvo lasketaan jakamalla lukujen summa niiden lukumäärällä */ private static void laskeSyottoKarvo(int lukumäärä) { if (lukumäärä > 0) { // pitää olla jotain laskettavaa, muuten ei tehdä mitään Scanner lukija=new Scanner(System.in); double summa = 0; // tähän kerätään syötettyjen lukujen summa for (int luettu=0; luettu0); } }