Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Lausekielinen ohjelmointi 2, harjoitustyö
- //clara.reichert@tuni.fi
- import java.util.Scanner;
- import java.io.File;
- public class BimEdit {
- public static char[][] loader(String tiedostonNimi, char[] merkit) {
- //Metodi lataa kuvan saamastaan tiedostosta matriisitaulukkoon.
- boolean jatketaan = true;
- Scanner tiedostonLukija = null;
- try {
- //Tarkastetaan asetettuja ehtoja.
- if (merkit.length == 2 && merkit != null && tiedostonNimi != null){
- File tiedosto = new File(tiedostonNimi);
- tiedostonLukija = new Scanner(tiedostonNimi);
- int i = Integer.parseInt(tiedostonLukija.nextLine());
- int j = Integer.parseInt(tiedostonLukija.nextLine());
- char merkki1 = tiedostonLukija.nextLine().charAt(0);
- char merkki2 = tiedostonLukija.nextLine().charAt(0);
- //Alustetaan tiedostosta löytyvät merkit pääohjelmassa luotuun taulukkoon.
- merkit[0] = merkki1;
- merkit[1] = merkki2;
- //Tarkistetaan kuvan koko.
- if (i < 3 || j < 3) {
- jatketaan = false;
- }else {
- //Luodaan uusi palautettava taulukko, johon lisätään tietoa tiedoston mukaisesti.
- char [][] ladattuTaulukko = new char[i][j];
- for (int rivi = 0; rivi < i; rivi++) {
- String sijoitettava = tiedostonLukija.nextLine();
- for (int sarake = 0; sarake < j; sarake++) {
- char merkki = sijoitettava.charAt(sarake);
- if (merkki == merkki1 || merkki == merkki2) {
- ladattuTaulukko[rivi][sarake] = merkki;
- }else {
- jatketaan = false;
- }
- }
- }
- tiedostonLukija.close();
- return ladattuTaulukko;
- }
- }
- else {
- //Palautetaan null, jos ehdot eivät täyty.
- return null;
- }
- }
- catch (Exception e) {
- if (tiedostonLukija != null) {
- tiedostonLukija.close();
- }
- return null;
- }
- return null;
- }
- public static char[][] inverter(char[][] taulukko, char[] merkit) {
- //Vaihdetaan merkit päikseen, kun käyttäjä syöttää "invert".
- //Palautetaan taulukko vaihdetuilla merkeillä tai "väreillä", jos ehdot täyttyvät.
- char merkki_eka = merkit[0];
- char merkki_toka = merkit[1];
- if (taulukko != null && taulukko.length > 0 && taulukko[0].length > 0) {
- for(int i = 0; i < taulukko.length; i++) {
- for(int j = 0; j < taulukko[0].length; j++) {
- if (taulukko [i][j] == merkki_eka) {
- taulukko [i][j] = merkki_toka;
- }else if (taulukko[i][j] == merkki_toka) {
- taulukko [i][j] = merkki_eka;
- }
- }
- }
- return taulukko;
- }
- return null;
- }
- public static void info(char[][] taulukko, char[] merkit) {
- /*Tulostetaan näytölle koon sekä edusta- ja taustavärejä
- symboloivien merkkien lukumäärät käyttäjän kirjoittaessa "info".
- */
- int rivit = taulukko.length;
- int sarakkeet = 0;
- char edustaMerkki = merkit[0];
- char taustaMerkki = merkit[1];
- int edustaMaara = 0;
- int taustaMaara = 0;
- for (int i = 0; i < taulukko.length; i++) {
- for (int j = 0; j < taulukko[i].length; j++)
- if (taulukko[i][j] == edustaMerkki) {
- // Kasvatetaan merkin lukumäärää yhdellä.
- edustaMaara++;
- } else if (taulukko[i][j] == taustaMerkki) {
- // Kasvatetaan merkin lukumäärää yhdellä.
- taustaMaara++;
- }
- }
- System.out.println(rivit + " x " + sarakkeet);
- System.out.println(taustaMerkki + " " + taustaMaara);
- System.out.println(edustaMerkki + " " + edustaMaara);
- }
- public static void printer2D(char[][] taulu) {
- //Tulostetaan kaksiulotteinen taulukko, kun käyttäjä syöttää "print".
- if (taulu != null) {
- for (int i = 0; i < taulu.length; i++) {
- for (int j = 0; j < taulu[0].length; j++) {
- System.out.print(taulu[i][j]);
- }
- System.out.println();
- }
- }
- }
- /*
- public static char[][] biggerOrSmaller() {
- //KESKEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEN
- public static char[][] kopioi2dTaulukko(char[][] taulukko) {
- //Kopioidaan parametrina saatu taulukko uuteen taulukkoon
- if (taulukko != null && taulukko.length >= 1 && taulukko[0].length >= 1) {
- int taulukon_pituus = taulukko.length;
- char [][] tulostettava_taulukko = new char[taulukon_pituus][taulukko[0].length];
- for (int i = 0; i < taulukko.length; i++) {
- for (int j = 0; j < taulukko[i].length; j++) {
- tulostettava_taulukko[i][j] = taulukko[i][j];
- }
- }
- return tulostettava_taulukko;
- } else {
- return null;
- }
- */
- /*
- public static char[][] checkup() {
- }
- */
- public static String questions(String[] args, char[] merkkiTaulukko, char[][] taulukko, String tiedostonNimi) {
- Scanner lukija = new Scanner(System.in);
- //Pyydetään käyttäjältä komentoa.
- String kasky = lukija.nextLine();
- //Tarkistetaan, että komento on OK, muussa tapauksessa virheilmoitus.
- if (args.length == 1) {
- if (kasky != "print" && kasky != "info" && kasky != "invert" && kasky !=
- "dilate" && kasky != "load" && kasky != "erode") {
- System.out.println("Invalid command!");
- } else {
- if (kasky.equals("quit")) {
- return null;
- }else if (kasky.equals("print")) {
- printer2D(taulukko);
- }else if (kasky.equals("info")) {
- info(taulukko, merkkiTaulukko);
- }else if (kasky.equals("invert")) {
- char [][] vaihdettuTaulukko = inverter(taulukko, merkkiTaulukko);
- //}else if (kasky.equals("dilate")) {
- // biggerOrSmaller();
- }else if (kasky.equals("load")) {
- loader(tiedostonNimi, merkkiTaulukko);
- //}else if (kasky.equals("erode")) {
- // biggerOrSmaller();
- }
- else {
- System.out.println(kasky);
- }
- }
- }
- return kasky;
- }
- public static void greeting() {
- //Tulosteaan kehystetty otsikko.
- System.out.println("-----------------------");
- System.out.println("| Binary image editor |");
- System.out.println("-----------------------");
- }
- public static void main (String [] args) {
- //Tulostetaan tervehdys.
- greeting();
- //Ladataan kuva tekstitiedostosta ohjelman käynnistyessä ja tarkistetaan se.
- if (args.length == 1 || (args.length == 2 && args[1].equals("echo"))) {
- String tiedostonNimi = args[0];
- char[] merkkiTaulukko = new char [2];
- char[][] taulukko = loader(tiedostonNimi, merkkiTaulukko);
- if (taulukko == null) {
- System.out.println("Invalid image file.");
- }else {
- /*Otsikon ja jokaisen komennon jälkeen tulostetaan ohjerivi, kunnes
- *kunnes käyttäjä syöttää "quit".
- */
- boolean jatketaan = true;
- while(true) {
- System.out.println("print/info/invert/dilate/erode/load/quit");
- //Pyydetään käsky käyttäjältä.
- String kasky = questions(args, merkkiTaulukko, taulukko, tiedostonNimi);
- //Tarkisteaan komento.
- if (kasky == null) {
- jatketaan = false;
- }
- }
- }
- //Tulostetaan hyvästit ennen ohjelman lopetusta.
- System.out.println("Bye, see you soon.");
- }else {
- System.out.println("Invalid command-line argument!");
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement