Miten piirretään pisteen kautta suorat niin, että se muodostaa rastin. Rasti muodostetaan ykkösistä. Ohjelmassa valitaan suorien leikkauspiste.
import java.util.Scanner; public class Rasti_3 { public static void main(String[] args){ Scanner syote = new Scanner(System.in); int koko = 0; int xKohta = 0; int yKohta = 0; //Syötetään lähtötiedot. System.out.println("Anna koko."); koko = syote.nextInt(); System.out.println("Anna leikkauspisteen x ja y-koordinaatit."); xKohta = syote.nextInt(); yKohta = syote.nextInt(); int ruudukko[][] = new int[koko][koko]; //Muodostetaan rasti leikkauspisteiden läpi. //Rasti muodostetaan ykkösistä. for (int i = 0; i < koko; i++){ for (int j = 0; j < koko; j++){ ruudukko[j][i] = 0; } } ruudukko[yKohta][xKohta] = 1; //Näytetään rasti. for (int i = 0; i < koko; i++){ for (int j = 0; j < koko; j++){ System.out.print(ruudukko[i][j] + " "); } System.out.println(""); } } }
Rivi 24 on turha, koska ykkösten sijoitus ruudukkoon kannattaa tehdä noiden kahden for-loopin sisällä, jossa nyt alustat taulukon täyteen nollia.
Tehtävän pihvinä on löytää sopiva if-else-ehto, joka kertoo oletko joko oikealla rivillä (yKohta) tai oikeassa sarakkeessa (xKohta). Tämä ehto tulee sijoittaa for-looppien sisään, jotta ehto käydään läpi kullekin taulukon alkiolle. Huomaa myös mistä luvusta Javan indeksointi alkaa.
Ratkaisun löytymisessä voi auttaa, jos lasket paperille ykkösten (i,j)-koordinaattipisteitä ja pyri niiden pohjalta löytämään kaava jota voit käyttää.
Yksi vinoviiva tulee koordinaatteihin, joissa x+y pysyy vakiona (eli kun x kasvaa yhdellä, y pienenee yhdellä). Toinen vinoviiva tulee koordinaatteihin, joissa x-y pysyy vakiona (eli kun x kasvaa yhdellä, myös y kasvaa yhdellä). Yhtälöillä voi tarkastaa suoraan tulostuksen yhteydessä, pitääkö tulostaa ykkönen vai nolla; erillistä taulukkoa ei tarvita.
Taulukon kanssa ratkaisumallina voi olla myös, että annetuista koordinaateista lähtien piirretään viivaa silmukalla taulukon reunaan asti:
// Yksi neljästä piirtosuunnasta: for (int i = 0; x+i < koko && y+i < koko; ++i) // piirrä kohtaan x+i, y+i.
Äh. Mä lähdin ajattelemaan ristin piirtämistä, kun ilmeisesti haluttiinkin rasti. Eipä tuota taulukkoakaan tosiaan tarvitse, mutta voihan sen toiminnallisuuden noin pilkkoa.
Aihe on jo aika vanha, joten et voi enää vastata siihen.