Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
MatrixCalculator
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
maikov
MatrixCalculator
Commits
8d52a414
Commit
8d52a414
authored
1 month ago
by
maikov
Browse files
Options
Downloads
Plain Diff
Merge remote-tracking branch 'origin/Kasutajaliides'
parents
8b6e8763
dd604dc9
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
Kasutajaliides.java
+467
-0
467 additions, 0 deletions
Kasutajaliides.java
with
467 additions
and
0 deletions
Kasutajaliides.java
0 → 100644
+
467
−
0
View file @
8d52a414
/**
* 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
);
}
}
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment