/** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 10 */ import java.util.Scanner; public class Kolmio { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { int leveys = 0; System.out.println("Hei, olen kolmion piirto-ohjelma. Osaan piirtää suorakulmaisen tähtikolmion.\n"); System.out.println("Kuinka suuren kolmion piirrän (1-30)?"); // Luetaan käyttäjältä kolmion suuruus. // Ehto pätee ensimmäisellä kerralla, sillä leveys alustettiin 0:ksi. while (leveys < 1 || leveys > 30) { leveys = lukija.nextInt(); // Kerrotaan käyttäjälle, oliko syöte virheellinen. if (leveys < 1) { System.out.println("Yhtä pienemmän piirtäminen on minulle liian vaikeaa."); } else if (leveys > 30) { System.out.println("En uskalla piirtää jotain noin suurta, ainakaan enempää kuin 30."); } } // Tulostetaan kolmio. for (int rivi = 1; rivi <= leveys; ++rivi) { // rivejä on yhtä monta kuin leveys! // Tulostetaan välilyönnit ensin. for (int i = 0; i < leveys-rivi; ++i) { System.out.print(" "); } // Sitten tähdet. for (int i = 0; i < rivi; ++i) { System.out.print("*"); } // ja lopuksi rivinvaihto: System.out.println(); } } } /** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 11 */ import java.util.Scanner; public class Karkausvuosi { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { int ekaVuosi, vikaVuosi; // Esitellään ohjelma käyttäjälle ja pyydetään antamaan kaksi vuosilukua System.out.println("Luettelen karkausvuodet antamaltasi vuosiväliltä.\n" + "Anna vuosiluvut kummassa tahansa järjestyksessä."); // Mitkä tahansa kokonaislukuarvot hyväksytään. ekaVuosi = lukija.nextInt(); vikaVuosi = lukija.nextInt(); // Aloitetaan tulosten tulostus System.out.println("Kas tässä karkausvuodet vuosilta " + ekaVuosi + "-" + vikaVuosi + ":"); // Käsitellään tapaukset sen mukaan, missä järjestyksessä luvut annettiin if (ekaVuosi <= vikaVuosi) { for (int vuosi = ekaVuosi; vuosi <= vikaVuosi; ++vuosi) { if (((vuosi % 4 == 0 && vuosi % 100 != 0) || vuosi % 400 == 0) && vuosi != 4000) { System.out.println(vuosi); } } } else if (ekaVuosi > vikaVuosi) { for (int vuosi = ekaVuosi; vuosi >= vikaVuosi; --vuosi) { if (((vuosi % 4 == 0 && vuosi % 100 != 0) || vuosi % 400 == 0) && vuosi != 4000) { System.out.println(vuosi); } } } } } /** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 11, vaihtoehtoinen ratkaisu apumetodeja käyttäen */ import java.util.Scanner; public class KarkausvuosiApumetodein { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { int ekaVuosi, vikaVuosi; // Esitellään ohjelma käyttäjälle ja pyydetään antamaan kaksi vuosilukua System.out.println("Luettelen karkausvuodet antamaltasi vuosiväliltä.\n" + "Anna vuosiluvut kummassa tahansa järjestyksessä."); // Mitkä tahansa kokonaislukuarvot hyväksytään. ekaVuosi = lukija.nextInt(); vikaVuosi = lukija.nextInt(); // Aloitetaan tulosten tulostus System.out.println("Kas tässä karkausvuodet vuosilta " + ekaVuosi + "-" + vikaVuosi + ":"); // Käsitellään tapaukset sen mukaan, missä järjestyksessä luvut annettiin if (ekaVuosi <= vikaVuosi) { for (int vuosi = ekaVuosi; vuosi <= vikaVuosi; ++vuosi) { if (onkoKarkausvuosi(vuosi)) { System.out.println(vuosi); } } } else if (ekaVuosi > vikaVuosi) { for (int vuosi = ekaVuosi; vuosi >= vikaVuosi; --vuosi) { if (onkoKarkausvuosi(vuosi)) { System.out.println(vuosi); } } } } /** * Palauttaa totuusarvon, onko parametrina annettu vuosiluku karkausvuosi vai ei. */ private static boolean onkoKarkausvuosi(int vuosi) { return (((vuosi % 4 == 0 && vuosi % 100 != 0) || vuosi % 400 == 0) && vuosi != 4000); } } /** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 12 */ import java.util.Scanner; public class Osuiko { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { int alaraja, ylaraja; int tutkittava; do { System.out.print("Anna alaraja: "); alaraja = lukija.nextInt(); System.out.print("Anna yläraja: "); ylaraja = lukija.nextInt(); if (alaraja > ylaraja) { System.out.println("Yläraja ei voi olla alarajaa pienempi!"); } } while (alaraja > ylaraja); // Kysytään uudestaan, jos yläraja oli alarajaa pienempi // Toistetaan, kunnes käyttäjä antaa syötteeksi luvun 0. do { System.out.print("Anna luku (0 lopettaa): "); tutkittava = lukija.nextInt(); if (tutkittava == 0) { System.out.println("Jo loppui tämä hupi."); } else if (tutkittava >= alaraja && tutkittava <= ylaraja) { System.out.println("Tärppäsi!"); } else { System.out.println("Ohi meni!"); } } while (tutkittava != 0); } } /** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 13 */ import java.util.Scanner; public class Uhkapeli { private static Scanner lukija = new Scanner(System.in); public static void main(String[] args) { // Arvotaan luku int onnenluku = (int)(10*Math.random()); int oikeinLkm = 0; // Pidetään kirjaa oideiden arvausten lukumäärästä int voittosumma = 0; int arvaus = -1; // Alustetaan, jotta Java-kääntäjä on tyytyväinen boolean kelvollinen; System.out.println("Ajattelen lukua väliltä 0-9. Saat arvata kolme kertaa, mikä se on."); // Ensimmäinen arvaus // Luetaan syötteitä, kunnes saadaan kelvollinen do { kelvollinen = true; // Syöte on kelvollinen, kunnes toisin todistetaan System.out.print("1. arvauksesi: "); // Onko syöte kokonaisluku? if (lukija.hasNextInt()) { arvaus = lukija.nextInt(); // Onko arvaus pyydetyltä väliltä? if (arvaus < 0 || arvaus > 9) { kelvollinen = false; System.out.println("Arvauksesi ei ollut väliltä 0-9."); } } else { kelvollinen = false; System.out.println("Arvauksesi ei ollut kokonaisluku."); } // Luetaan loppurivi pois syötepuskurista lukija.nextLine(); } while (!kelvollinen); // Toistetaan, jos kelvollinen != true if (arvaus == onnenluku) { ++oikeinLkm; voittosumma += 400; } // Toinen arvaus // Luetaan syötteitä, kunnes saadaan kelvollinen do { kelvollinen = true; // Syöte on kelvollinen, kunnes toisin todistetaan System.out.print("2. arvauksesi: "); // Onko syöte kokonaisluku? if (lukija.hasNextInt()) { arvaus = lukija.nextInt(); // Onko arvaus pyydetyltä väliltä? if (arvaus < 0 || arvaus > 9) { kelvollinen = false; System.out.println("Arvauksesi ei ollut väliltä 0-9."); } } else { kelvollinen = false; System.out.println("Arvauksesi ei ollut kokonaisluku."); } // Luetaan loppurivi pois syötepuskurista lukija.nextLine(); } while (!kelvollinen); // Toistetaan, jos kelvollinen != true if (arvaus == onnenluku) { ++oikeinLkm; voittosumma += 200; } // Kolmas arvaus // Luetaan syötteitä, kunnes saadaan kelvollinen do { kelvollinen = true; // Syöte on kelvollinen, kunnes toisin todistetaan System.out.print("3. arvauksesi: "); // Onko syöte kokonaisluku? if (lukija.hasNextInt()) { arvaus = lukija.nextInt(); // Onko arvaus pyydetyltä väliltä? if (arvaus < 0 || arvaus > 9) { kelvollinen = false; System.out.println("Arvauksesi ei ollut väliltä 0-9."); } } else { kelvollinen = false; System.out.println("Arvauksesi ei ollut kokonaisluku."); } // Luetaan loppurivi pois syötepuskurista lukija.nextLine(); } while (!kelvollinen); // Toistetaan, jos kelvollinen != true if (arvaus == onnenluku) { ++oikeinLkm; voittosumma += 100; } // Jos ei yhtään oikein if (oikeinLkm == 0) { voittosumma -= 100; } System.out.println("\nAjattelin lukua " + onnenluku + "."); if (voittosumma >= 0) { System.out.println("Onneksi olkoon, voitit juuri " + voittosumma + " virtuaalieuroa!"); } else { // Puhutaan häviämisestä, joten näytetään negatiivisen voittosumman käänteisluku System.out.println("Onneksi olkoon, hävisit juuri " + (0 - voittosumma) + " virtuaalieuroa!"); } } } /** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 13, vaihtoehtoinen ratkaisu apumetodeja käyttäen */ import java.util.Scanner; public class UhkapeliApumetodein { private static Scanner lukija = new Scanner(System.in); /** * Tämä apumetodi pyytää käyttäjältä arvauksen. * Metodi tarkistaa syötteen. Jos syöte oli virheellinen, kysytään käyttäjältä uudestaan, * kunnes käyttäjä antaa kelvollisen syötteen. * * @param arvauskerta Käyttäjälle näytettävä tieto, monesko arvauskerta tämä on * @return Käyttäjän antama arvaus. */ private static int lueArvaus(int arvauskerta) { int arvaus = -1; // Alustetaan, jotta Java-kääntäjä on tyytyväinen boolean kelvollinen; // Luetaan syötteitä, kunnes saadaan kelvollinen do { kelvollinen = true; // Syöte on kelvollinen, kunnes toisin todistetaan System.out.print(arvauskerta + ". arvauksesi: "); // Onko syöte kokonaisluku? if (lukija.hasNextInt()) { arvaus = lukija.nextInt(); // Onko arvaus pyydetyltä väliltä? if (arvaus < 0 || arvaus > 9) { kelvollinen = false; System.out.println("Arvauksesi ei ollut väliltä 0-9."); } } else { kelvollinen = false; System.out.println("Arvauksesi ei ollut kokonaisluku."); } // Luetaan loppurivi pois syötepuskurista lukija.nextLine(); } while (!kelvollinen); // Toistetaan, jos kelvollinen != true return arvaus; } public static void main(String[] args) { // Arvotaan luku int onnenluku = (int)(10*Math.random()); int oikeinLkm = 0; // Pidetään kirjaa oideiden arvausten lukumäärästä int voittosumma = 0; System.out.println("Ajattelen lukua väliltä 0-9. Saat arvata kolme kertaa, mikä se on."); if (lueArvaus(1) == onnenluku) { ++oikeinLkm; voittosumma += 400; } if (lueArvaus(2) == onnenluku) { ++oikeinLkm; voittosumma += 200; } if (lueArvaus(3) == onnenluku) { ++oikeinLkm; voittosumma += 100; } if (oikeinLkm == 0) { voittosumma -= 100; } System.out.println("\nAjattelin lukua " + onnenluku + "."); if (voittosumma >= 0) { System.out.println("Onneksi olkoon, voitit juuri " + voittosumma + " virtuaalieuroa!"); } else { // Puhutaan häviämisestä, joten näytetään negatiivisen voittosumman käänteisluku System.out.println("Onneksi olkoon, hävisit juuri " + (0 - voittosumma) + " virtuaalieuroa!"); } } } /** * Ohjelmoinnin perusteet, syksy 2008 * Petri Vuorio / TKTL / HY * Tehtävä 14 */ import java.util.Scanner; public class Metodeja { private static Scanner lukija = new Scanner(System.in); /** * lukee yhden syöttörivin ja tulostaa tuon rivin kahteen kertaan yhdelle tulostusriville */ private static void kirjoitaLuettuRiviTuplana() { String rivi = lukija.nextLine(); System.out.println(rivi + rivi); // Metodin voisi kirjoittaa myös käyttäen hyväksi toista metodia: // System.out.println(luettuTuplanaa()); } /** * lukee yhden syöttörivin ja palauttaa arvonaan tuon rivin katenoituna (eli yhteenliitettynä) itsensä kanssa */ private static String luettuTuplanaa() { String rivi = lukija.nextLine(); return rivi + rivi; } /** * tulostaa parametrina annetun kokonaisluvun kerrottuna parametrina annetulla kertojalla */ private static void kirjoitaLukuKerrottuna(int luku, int kertoja) { System.out.println(luku * kertoja); // Metodin voisi kirjoittaa myös käyttäen hyväksi toista metodia: // 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 kumpi vain */ 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ääohjelma, joka havainnollistaa metodien käyttöä. */ public static void main(String[] args) { System.out.println("Kirjoita jotain ja paina Enter, tulostan sen tuplana."); kirjoitaLuettuRiviTuplana(); System.out.println("Kirjoita vielä jotain ja paina Enter, tulostan senkin tuplana."); System.out.println(luettuTuplanaa()); System.out.print("2 * 3 = "); kirjoitaLukuKerrottuna(2, 3); System.out.println("4 * 5 = " + kerro(4,5)); System.out.println("Luvuista 12345.67 ja 76543.21 pienempi on luku " + minimi(12345.67, 76543.21)); int a, b; a = 5; b = -5; if (suurempi(a, b)) { System.out.println(a + " on suurempi kuin " + b + "."); } else { System.out.println(a + " ei ole suurempi kuin " + b + "."); } a = 0; b = 1; if (suurempi(a, b)) { System.out.println(a + " on suurempi kuin " + b + "."); } else { System.out.println(a + " ei ole suurempi kuin " + b + "."); } } }