Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: Rastin piirtäminen

JRokka [20.11.2019 10:21:28]

#

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("");
        }
    }
}

Spyro [20.11.2019 11:38:36]

#

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ää.

Metabolix [20.11.2019 20:52:34]

#

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.

Spyro [21.11.2019 12:14:45]

#

Äh. Mä lähdin ajattelemaan ristin piirtämistä, kun ilmeisesti haluttiinkin rasti. Eipä tuota taulukkoakaan tosiaan tarvitse, mutta voihan sen toiminnallisuuden noin pilkkoa.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta