Advertisement
Guest User

Untitled

a guest
Dec 16th, 2019
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.14 KB | None | 0 0
  1. // Lausekielinen ohjelmointi 2, harjoitustyö
  2. //clara.reichert@tuni.fi
  3.  
  4.  
  5. import java.util.Scanner;
  6. import java.io.File;
  7.  
  8.  
  9. public class BimEdit {
  10. public static char[][] loader(String tiedostonNimi, char[] merkit) {
  11. //Metodi lataa kuvan saamastaan tiedostosta matriisitaulukkoon.
  12. boolean jatketaan = true;
  13. Scanner tiedostonLukija = null;
  14. try {
  15. //Tarkastetaan asetettuja ehtoja.
  16. if (merkit.length == 2 && merkit != null && tiedostonNimi != null){
  17. File tiedosto = new File(tiedostonNimi);
  18. tiedostonLukija = new Scanner(tiedostonNimi);
  19.  
  20.  
  21. int i = Integer.parseInt(tiedostonLukija.nextLine());
  22. int j = Integer.parseInt(tiedostonLukija.nextLine());
  23. char merkki1 = tiedostonLukija.nextLine().charAt(0);
  24. char merkki2 = tiedostonLukija.nextLine().charAt(0);
  25.  
  26. //Alustetaan tiedostosta löytyvät merkit pääohjelmassa luotuun taulukkoon.
  27. merkit[0] = merkki1;
  28. merkit[1] = merkki2;
  29.  
  30. //Tarkistetaan kuvan koko.
  31. if (i < 3 || j < 3) {
  32. jatketaan = false;
  33.  
  34. }else {
  35.  
  36. //Luodaan uusi palautettava taulukko, johon lisätään tietoa tiedoston mukaisesti.
  37. char [][] ladattuTaulukko = new char[i][j];
  38. for (int rivi = 0; rivi < i; rivi++) {
  39. String sijoitettava = tiedostonLukija.nextLine();
  40. for (int sarake = 0; sarake < j; sarake++) {
  41.  
  42. char merkki = sijoitettava.charAt(sarake);
  43. if (merkki == merkki1 || merkki == merkki2) {
  44. ladattuTaulukko[rivi][sarake] = merkki;
  45.  
  46. }else {
  47. jatketaan = false;
  48. }
  49. }
  50. }
  51. tiedostonLukija.close();
  52. return ladattuTaulukko;
  53.  
  54. }
  55. }
  56. else {
  57. //Palautetaan null, jos ehdot eivät täyty.
  58. return null;
  59.  
  60. }
  61. }
  62. catch (Exception e) {
  63. if (tiedostonLukija != null) {
  64. tiedostonLukija.close();
  65. }
  66. return null;
  67.  
  68. }
  69. return null;
  70. }
  71.  
  72.  
  73.  
  74. public static char[][] inverter(char[][] taulukko, char[] merkit) {
  75. //Vaihdetaan merkit päikseen, kun käyttäjä syöttää "invert".
  76. //Palautetaan taulukko vaihdetuilla merkeillä tai "väreillä", jos ehdot täyttyvät.
  77. char merkki_eka = merkit[0];
  78. char merkki_toka = merkit[1];
  79. if (taulukko != null && taulukko.length > 0 && taulukko[0].length > 0) {
  80. for(int i = 0; i < taulukko.length; i++) {
  81. for(int j = 0; j < taulukko[0].length; j++) {
  82. if (taulukko [i][j] == merkki_eka) {
  83. taulukko [i][j] = merkki_toka;
  84.  
  85. }else if (taulukko[i][j] == merkki_toka) {
  86. taulukko [i][j] = merkki_eka;
  87. }
  88. }
  89. }
  90.  
  91. return taulukko;
  92. }
  93. return null;
  94. }
  95.  
  96.  
  97. public static void info(char[][] taulukko, char[] merkit) {
  98. /*Tulostetaan näytölle koon sekä edusta- ja taustavärejä
  99. symboloivien merkkien lukumäärät käyttäjän kirjoittaessa "info".
  100. */
  101. int rivit = taulukko.length;
  102. int sarakkeet = 0;
  103. char edustaMerkki = merkit[0];
  104. char taustaMerkki = merkit[1];
  105. int edustaMaara = 0;
  106. int taustaMaara = 0;
  107.  
  108. for (int i = 0; i < taulukko.length; i++) {
  109. for (int j = 0; j < taulukko[i].length; j++)
  110. if (taulukko[i][j] == edustaMerkki) {
  111. // Kasvatetaan merkin lukumäärää yhdellä.
  112. edustaMaara++;
  113. } else if (taulukko[i][j] == taustaMerkki) {
  114. // Kasvatetaan merkin lukumäärää yhdellä.
  115. taustaMaara++;
  116. }
  117.  
  118. }
  119.  
  120. System.out.println(rivit + " x " + sarakkeet);
  121. System.out.println(taustaMerkki + " " + taustaMaara);
  122. System.out.println(edustaMerkki + " " + edustaMaara);
  123. }
  124.  
  125.  
  126. public static void printer2D(char[][] taulu) {
  127. //Tulostetaan kaksiulotteinen taulukko, kun käyttäjä syöttää "print".
  128. if (taulu != null) {
  129. for (int i = 0; i < taulu.length; i++) {
  130. for (int j = 0; j < taulu[0].length; j++) {
  131. System.out.print(taulu[i][j]);
  132. }
  133. System.out.println();
  134. }
  135. }
  136. }
  137.  
  138. /*
  139. public static char[][] biggerOrSmaller() {
  140. //KESKEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEN
  141. public static char[][] kopioi2dTaulukko(char[][] taulukko) {
  142. //Kopioidaan parametrina saatu taulukko uuteen taulukkoon
  143. if (taulukko != null && taulukko.length >= 1 && taulukko[0].length >= 1) {
  144. int taulukon_pituus = taulukko.length;
  145. char [][] tulostettava_taulukko = new char[taulukon_pituus][taulukko[0].length];
  146. for (int i = 0; i < taulukko.length; i++) {
  147. for (int j = 0; j < taulukko[i].length; j++) {
  148. tulostettava_taulukko[i][j] = taulukko[i][j];
  149. }
  150. }
  151. return tulostettava_taulukko;
  152. } else {
  153. return null;
  154. }
  155.  
  156. */
  157.  
  158. /*
  159. public static char[][] checkup() {
  160.  
  161.  
  162. }
  163.  
  164. */
  165. public static String questions(String[] args, char[] merkkiTaulukko, char[][] taulukko, String tiedostonNimi) {
  166. Scanner lukija = new Scanner(System.in);
  167. //Pyydetään käyttäjältä komentoa.
  168.  
  169. String kasky = lukija.nextLine();
  170. //Tarkistetaan, että komento on OK, muussa tapauksessa virheilmoitus.
  171.  
  172. if (args.length == 1) {
  173.  
  174. if (kasky != "print" && kasky != "info" && kasky != "invert" && kasky !=
  175. "dilate" && kasky != "load" && kasky != "erode") {
  176. System.out.println("Invalid command!");
  177. } else {
  178. if (kasky.equals("quit")) {
  179. return null;
  180. }else if (kasky.equals("print")) {
  181. printer2D(taulukko);
  182. }else if (kasky.equals("info")) {
  183. info(taulukko, merkkiTaulukko);
  184. }else if (kasky.equals("invert")) {
  185. char [][] vaihdettuTaulukko = inverter(taulukko, merkkiTaulukko);
  186. //}else if (kasky.equals("dilate")) {
  187. // biggerOrSmaller();
  188. }else if (kasky.equals("load")) {
  189. loader(tiedostonNimi, merkkiTaulukko);
  190. //}else if (kasky.equals("erode")) {
  191. // biggerOrSmaller();
  192. }
  193. else {
  194. System.out.println(kasky);
  195. }
  196. }
  197. }
  198. return kasky;
  199. }
  200.  
  201. public static void greeting() {
  202. //Tulosteaan kehystetty otsikko.
  203. System.out.println("-----------------------");
  204. System.out.println("| Binary image editor |");
  205. System.out.println("-----------------------");
  206. }
  207.  
  208.  
  209. public static void main (String [] args) {
  210. //Tulostetaan tervehdys.
  211. greeting();
  212. //Ladataan kuva tekstitiedostosta ohjelman käynnistyessä ja tarkistetaan se.
  213. if (args.length == 1 || (args.length == 2 && args[1].equals("echo"))) {
  214.  
  215. String tiedostonNimi = args[0];
  216. char[] merkkiTaulukko = new char [2];
  217. char[][] taulukko = loader(tiedostonNimi, merkkiTaulukko);
  218.  
  219. if (taulukko == null) {
  220. System.out.println("Invalid image file.");
  221.  
  222. }else {
  223. /*Otsikon ja jokaisen komennon jälkeen tulostetaan ohjerivi, kunnes
  224. *kunnes käyttäjä syöttää "quit".
  225. */
  226. boolean jatketaan = true;
  227. while(true) {
  228. System.out.println("print/info/invert/dilate/erode/load/quit");
  229. //Pyydetään käsky käyttäjältä.
  230. String kasky = questions(args, merkkiTaulukko, taulukko, tiedostonNimi);
  231.  
  232. //Tarkisteaan komento.
  233. if (kasky == null) {
  234. jatketaan = false;
  235. }
  236. }
  237. }
  238. //Tulostetaan hyvästit ennen ohjelman lopetusta.
  239. System.out.println("Bye, see you soon.");
  240.  
  241.  
  242.  
  243.  
  244.  
  245. }else {
  246. System.out.println("Invalid command-line argument!");
  247. }
  248. }
  249. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement