Skip to content
Snippets Groups Projects
Commit 8d52a414 authored by maikov's avatar maikov
Browse files

Merge remote-tracking branch 'origin/Kasutajaliides'

parents 8b6e8763 dd604dc9
No related branches found
No related tags found
No related merge requests found
/**
* Rühmatöö kasutajaliides
*
* 0: Avaleht
* 1: Mida soovid teha?
* 2: Maatriksi nimi
* 3: Tehte hub
* 4: Maatriksite vaatamine
* 5: Kas maatriks üle kirjutada?
* 6: Maatriksi mõõtmed
* 7: Maatriksi sisu
*/
// Praeguseks maatriksite asemel String[]
import java.util.Scanner;
import java.util.regex.Pattern;
import java.util.HashMap;
import java.util.Arrays;
import java.lang.Math;
public class Kasutajaliides{
/// Konstandid
// Width
static final int str_width = 70;
// Tekst, mida iga küsimuse alguses väljastatakse
static final String päis =
System.lineSeparator().repeat(10)
+ "-".repeat(str_width)+System.lineSeparator()
+ "%? - Abi | %A - Algusesse | %L - Lahku | %S - Sätesta muutujaid "
+System.lineSeparator().repeat(4);
// Tekst, mida abi küsimisel väljastatakse
static final String abitekst =
"Praegu ei ole veel asju kirjas"+"\n"
+ "%J - Hüppa kohta programmis";
// Tutvustus
static final String tutvustav_tekst = "Tere!";
// Suvaliste mõõtmetega maatriksi alam- ja ülempiir
private int[] suva_mõõtmed = {1,6};
// Info suvaliste mõõtmete kohta sõnena
private String suva_mõõtmed_teade(){
return "> Suvalised mõõtmed "
+ suva_mõõtmed[0]
+ "-"
+ suva_mõõtmed[1]
+ " (S)";
}
// Suvaliste elementide alam- ja ülempiir + samm
private double[] suva_elemendid = {-11,6,1};
// Info suvaliste mõõtmete kohta sõnena
private String suva_elemendid_teade(){
return "> Suvalised elemendid "
+ suva_elemendid[0]
+ "-"
+ suva_elemendid[1]
+ " sammuga "
+ suva_elemendid[2]
+ " (S)";
}
// List jaatustest (Mitte tõstutundlik)
static String[] jaatused = {"jah","j","y","yes"};
// List eitustest (Mitte tõstutundlik)
static String[] eitused = {"ei","e","n","no"};
// Maatriksite tabel
private HashMap<String,double[][]> maatriksid;
// Sisend
private Scanner scan;
// Järgmine küsimus
private int next;
// Loodava maatriksi nimi
private String loodav_nimi;
// Loodava maatriksi mõõtmed;
private int[] loodav_mõõtmed = new int[2];
// Loodava maatriksi elemendid
private double[][] loodav_maatriks;
public Kasutajaliides(){
scan = new Scanner(System.in);
next = 0;
maatriksid = new HashMap<String,double[][]>();
}
/**
* Läheb järgmise ekraanini
*/
public void küsi(int start){
while (true){
switch (next){
case -1: System.out.println("Head aega!"); return;
case 0: tere(); break;
case 1: algus(); break;
case 2: m_nimi(); break;
case 4: vaata(); break;
case 5: kirjuta_üle_p(); break;
case 6: mõõtmed(); break;
case 7: maatriksi_elemendid(); break;
default: viga();
}
}
}
/**
* Kuvab küsimuse
* Oskab tegeleda käskudega
*/
private String prompt(String tekst){
System.out.println(päis);
System.out.println(tekst);
System.out.print("> ");
String sisend = scan.nextLine();
switch (sisend){
case "%?": help(); return "%"; // Ava abi aken
case "%A": next = 1; return "%"; // Mine tagasi algusesse
case "%L": next = -1; return "%"; // Lahku programmist
case "%J": hüpe(); return "%";
default: return sisend;
}
}
/**
* Kuvab teate ja läheb kohta järg
*/
private void teade(int järg, String tekst){
String sisend = prompt(tekst+"\n".repeat(3)+"Vajuta ENTER, et jätkata");
switch(sisend){
case "%": break;
default: this.next = järg;
}
}
/**
* Kas sõne on jaatus(1), eitus(0), käsk(-2) või midagi muud(-1)
*/
private int jaatusP(String str){
str = str.toLowerCase();
if (str.equals("%")){ // Käsk
return -2;
} else if (Arrays.asList(jaatused).contains(str)){ // Jaatus
return 1;
} else if (Arrays.asList(eitused).contains(str)){ // Eitus
return 0;
} else { // Muu
return -1;
}
}
/**
* Tagastab 'true', kui tegu on naturaalarvuga, muidu 'false'
*/
public boolean naturaalArvP(String a){
return Pattern.matches("\\d*", a);
}
/**
* Kas on arv
*/
public boolean arvP(String a){
return Pattern.matches("-?\\d*[.]?\\d*", a);
}
/**
* Tagastab 'true', kui iga sõne on arv.
*/
public boolean arvudP(String[] arvud){
for (String a : arvud){
if (! arvP(a)){
return false;
}
}
return true;
}
/**
* Kas on juba selle nimega maatriks?
* Kuna pole maatrikseid implementeerinud, siis alati true
*/
public boolean olemasP(String maatriksi_nimi){
return (maatriksid.containsKey(maatriksi_nimi));
}
// Tagastab suvalise arvu vahemikust Algus,lõpp
public static double suva_arv(double algus, double lõpp){
return (algus + (Math.random() * (lõpp-algus)));
}
// Tagastab suvalise arvu vahemikust Algus, lõpp, astmega aste
public static double suva_arv(double algus, double lõpp,double aste){
return ((int)suva_arv(algus/aste,Math.floor(lõpp/aste)+1))*aste;
}
// Tagastab täisarvu vahemikust algus, lõpp
public static int suva_arv(int algus, int lõpp){
return (int)suva_arv(algus,lõpp,1);
}
/**
* Loob maatriksi objekti
*/
public void looMaatriks(){
maatriksid.put(loodav_nimi,loodav_maatriks);
}
// LEHED
/**
* Väljastab programmi juhendi ja läheb edasi algusesse
*/
private void tere(){teade(1,tutvustav_tekst);}
/**
* Väljastab infot süsteemi kohta
* Avaneb, kui kirjutada %?
*/
private void help(){teade(next,abitekst);}
/**
* Liigub valitud lehele
*/
private void hüpe(){
String sisend = prompt("> Mis lehele minna?");
if (sisend.equals("%")){
return;
} else if (naturaalArvP(sisend)){
next = Integer.parseInt(sisend);
} else {
teade(next,"> Sisend ei olnud naturaalarv");
hüpe();
}
}
/**
* Teatab, et olete sattunud lisamata lehele
*/
private void viga(){
teade(1,"Leht " + next
+ " ei ole veel implementeeritud");
}
/**
* Mida soovid järgmisena teha?
* 1
*/
private void algus(){
String sisend = prompt("> Loo uus maatriks(M)\n"
+ "> Soorita tehe(T)\n"
+ "> Vaata olemasolevaid maatrikse(V)");
sisend = sisend.toUpperCase();
switch(sisend){
case "%": break;
case "M": next = 2; break;
case "T": next = 3; break;
case "V": next = 4; break;
default: teade(1,"Ebasobiv sõne"); // Algusesse
}
}
/**
* Kas nimi sobib maatriksi nimeks?
*/
public static boolean sobivNimiP(String nimi){
return Pattern.matches("[a-zA-ZõäöõÕÄÖÜ]*", nimi);
}
/**
* Küsib loodavale maatriksile nime
* Kui nimi eksisteerib, küsib, kas asendada
* 2
*/
private void m_nimi(){
String sisend = prompt("> Sisesta loodava maatriksi nimi");
if (sisend.equals("%")){
return;
} else if (olemasP(sisend)){
loodav_nimi = sisend;
next = 5; // 5: Kas oled kindel?
} else if (! sobivNimiP(sisend)){
teade(next,"Nimi peab koosnema vaid tähtedest.");
} else {
loodav_nimi = sisend;
next = 6; // 6: Maatriksi mõõtmed
}
}
/**
* Laseb vaadata olemasolevaid maatrikse
* 4
*/
private void vaata(){
String sisend = prompt("> Sisesta maatriksi nimi, et seda vaadata\n"+
"> Sisesta '%N', et näha loetelu olemasolevatest maatriksitest");
if (sisend.equals("%")){
return;
} else if (sisend.equals("%N")){ // Loetelu nimedest
String nimed = "";
for (String nimi : maatriksid.keySet()){
nimed += (nimi + " ");
}
teade(next,nimed);
} else if (olemasP(sisend)){
// Loob sõne ja lisab maatriksi read
String väljund = "Nimi: " + sisend + System.lineSeparator();
for (double[] rida: maatriksid.get(sisend)){
väljund += Arrays.toString(rida) + System.lineSeparator();
}
teade(next,väljund);
} else {
teade(next, "Maatriksit nimega "+sisend+" ei ole olemas");
}
}
/**
* Sellenimeline maatriks juba olemas.
* 5
*/
private void kirjuta_üle_p(){
String sisend = prompt("> Maatriks nimega "
+ loodav_nimi
+ " on juba olemas"+"\n"
+ "> Kirjuta üle? Jah/Ei");
int vastus = jaatusP(sisend);
switch (vastus){
case -2:break; // Käsk
case 1: next = 6; break; // Jaatus
case 0: next = 2; break; // Eitus
default: teade(next,"Sisend ei olnud jaatus ega eitus");
}
}
/**
* Küsib maatriksi mõõtmeid
* Kui vastus on S, valib suvalised
* 6
*/
private void mõõtmed(){
String sisend = prompt("> Sisesta maatriksi mõõtmed formaadis 'm,n'"
+"\n" + suva_mõõtmed_teade()).toUpperCase();
if (sisend.equals("%")){
return;
} else if (sisend.equals("S")){ // Võtab maatriksile suvalised mõõtmed
loodav_mõõtmed[0] = suva_arv(suva_mõõtmed[0],suva_mõõtmed[1]);
loodav_mõõtmed[1] = suva_arv(suva_mõõtmed[0],suva_mõõtmed[1]);
teade(7,
"> Maatriksi mõõtmed on ["
+loodav_mõõtmed[0]+","
+loodav_mõõtmed[1]+"]");
} else { // Kontrollib sisendit
String[] mõõt_string = sisend.split(",");
if (mõõt_string.length == 2
&& naturaalArvP(mõõt_string[0])
&& naturaalArvP(mõõt_string[1])){
// Muudab mõõtmed
loodav_mõõtmed[0] = Integer.parseInt(mõõt_string[0]);
loodav_mõõtmed[1] = Integer.parseInt(mõõt_string[1]);
next = 7;
} else { // Sisend ei sobi
teade(next, "Sisend ei ole sobivas formaadis");
}
}
}
/**
* Küsib maatriksi elemente ridade kaupa
* Kui vastus on S, valib suvalised
* 7
*/
private void maatriksi_elemendid(){
loodav_maatriks = new double[loodav_mõõtmed[0]][loodav_mõõtmed[1]];
String sisend = prompt("| Sisestage maatriks"+"\n"
+ "| Pärast esimest rida ei ole võimalik käske kasutada\n"
+ "| Maatriksil on "+loodav_mõõtmed[0]
+ " rida.\n"
+ "| Maatriksil on "+loodav_mõõtmed[1]
+ " veergu.\n"
+ "| 4 veeruga rida oleks vormis n1,n2,n3,n4"+"\n"
+ suva_elemendid_teade()
).toUpperCase();
if (sisend.equals("%")){
return;
} else if (sisend.equals("S")){ // Võtab maatriksile suvalised mõõtmed
for (int rida = 0; rida < loodav_mõõtmed[0]; rida++){
for (int veerg = 0; veerg < loodav_mõõtmed[1]; veerg++){
loodav_maatriks[rida][veerg] = suva_arv(suva_elemendid[0],
suva_elemendid[1],
suva_elemendid[2]);
}
}
} else { // Sisendi küsimine toimub tsükli lõpus, et
int rida = 0;
do {
String[] mõõt_string = sisend.split(",");
if (mõõt_string.length == loodav_mõõtmed[1]
&& arvudP(mõõt_string)){
// Salvestab rea
for (int veerg = 0; veerg < loodav_mõõtmed[1]; veerg++){
loodav_maatriks[rida][veerg] =
Double.parseDouble(mõõt_string[veerg]);
}
rida++;
} else { // Sisend ei sobi
System.out.println("Sisend ei ole sobivas formaadis. Kirjuta rida uuesti");
}
// Kui pole läbi, küsi veel ridu
if (rida < loodav_mõõtmed[0]){
System.out.print("> ");
sisend = scan.nextLine();
}
} while (rida < loodav_mõõtmed[0]);
}
looMaatriks();
teade(1,
"Maatriks " + loodav_nimi + ": "
+ loodav_maatriks + " loodud");
}
// Testimispõhjustel
public static void main(String[] args){
Kasutajaliides liides = new Kasutajaliides();
liides.küsi(0);
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment