A tady je ten upravený kód:
import java.io.*;
import java.util.*;
public class B06_NasobeniMaticInt {
class Matice {
final int [] matice;
final int velikost;
public Matice(int v) {
velikost = v;
matice = new int[velikost*velikost];
}
final public int get(int i, int j) {
return matice[i*velikost+j];
}
final public void set(int i, int j, int v) {
matice[i*velikost+j] = v;
}
final public void trans() {
for(int i = 0; i < velikost; i ++)
for(int j = 0; j < i; j ++) {
int val = matice[i*velikost+j];
matice[i*velikost+j] = matice[j*velikost+i];
matice[j*velikost+i] = val;
}
}
}
@SuppressWarnings("resource")
private String nacteniNazvu() {
Scanner key = new Scanner(System.in);
System.out.print("Vlozte Nazev souboru :");
String jmeno = key.nextLine();
return jmeno; }
private Matice nacteniMatice(String s) {
File NazevSoub = new File(s);
FileReader CteciSoubor=null;
BufferedReader Soubor=null;
int velikost;
try { //Zkousime otevrit pripojeni k souboru
CteciSoubor = new FileReader(NazevSoub);
Soubor = new BufferedReader(CteciSoubor); }
catch (IOException e) {
System.out.println("Nepodarilo se otevri soubor pro cteni");
e.printStackTrace(); }
Matice matice = null;
try { // Zkusime nacist hodnoty
String retezec = Soubor.readLine(); // nacteme prvni radek kde je pouze velikost matice
velikost = Integer.valueOf(retezec).intValue(); // prevedem velikost na integer
matice = new Matice(velikost);
for(int i=0;i<velikost;i++) { // nacitani hodnot do matice z klavesnice
retezec = Soubor.readLine(); // nacteme do stringu cely radek
String [] podretezce = retezec.split(" "); // vytvorime pole hodnot
for(int j=0;j<velikost;j++) {
matice.set(i,j, Integer.valueOf(podretezce[j]).intValue()); } } } // Prevedeme jednotlive prvky pole stringu na integer do jednotlivych casti poli
catch (Exception e) {System.out.println("Nepodarilo se provest zapis matice"); }
try { // Zkusime uzavrit pripojeni k souboru
CteciSoubor.close();
Soubor.close(); }
catch (IOException e) {
System.out.println("Nepodarilo se ukoncit napojeni na soubor ");
e.printStackTrace(); } // uzavreme soubor
return matice; }
@SuppressWarnings("unused")
private void tiskMatice(Matice matice) {
System.out.println("Zde je vypsana matice");
for (int i = 0; i < matice.velikost; i++) {
for (int j = 0; j < matice.velikost; j++) {
System.out.format("%d ", matice.get(i,j)); }
System.out.println(); } }
private Matice nasobeniMatic(Matice maticeA,Matice maticeB) {
maticeB.trans();
Matice maticeNasob=new Matice(maticeA.velikost); // u vysledne matice rozhoduji sloupce a pak radky
for(int i=0;i<maticeNasob.velikost;i++) { // cyklus pro nasobeni matic
for(int j=0;j<maticeNasob.velikost;j++) {
int val = 0;
for(int k=0;k<maticeNasob.velikost;k++) {
val+= maticeA.get(i,k) * maticeB.get(j,k); }
maticeNasob.set(i,j, val);
} }
return maticeNasob; }
private void ulozeniMatice(String s, Matice matice) {
File NazevSoub = new File(s);
FileWriter ZapisovaciSoubor = null;
String radek = System.getProperty("line.separator"); // do promene radek ulozime systemem definovany radek
try {
ZapisovaciSoubor = new FileWriter(NazevSoub); }
catch (IOException e) {
System.out.println("Nepodarilo se vytvorit soubor ");
e.printStackTrace(); }
try {
ZapisovaciSoubor.write(matice.velikost+radek);
for(int i=0;i<matice.velikost;i++) { // nacitani hodnot do matice z klavesnice
for(int j=0;j<matice.velikost;j++) {
ZapisovaciSoubor.write(matice.get(i,j)+" "); }
ZapisovaciSoubor.write(radek); } }
catch (Exception e) {System.out.println("Nepodarilo se provest zapis matice"); }
try {
ZapisovaciSoubor.close(); }
catch (IOException e) {
System.out.println("Nepodarilo se ukoncit napojeni na soubor ");
e.printStackTrace(); } } // uzavreme soubor
@SuppressWarnings("unused")
public static void main(String [] args) {
B06_NasobeniMaticInt objekt = new B06_NasobeniMaticInt();
System.out.println("Program pro nasobeni matic integeru pro nacitani ze souboru");
String jmenoSouboru1,jmenoSouboru2,jmenoSouboru3;
String radek = System.getProperty("line.separator"); // do promene radek ulozime systemem definovany radek
System.out.println("Vlozte prosim jmeno souboru ze ktereho chcete nacit matici cislo 1");
while(true) { // nekonecna smycka
try {
jmenoSouboru1 = objekt.nacteniNazvu(); break; }
catch(RuntimeException E) { System.err.print("Nejedna se o retezec");} }
System.out.println("Vlozte prosim jmeno souboru ze ktereho chcete nacit matici cislo 2");
while(true) { // nekonecna smycka
try {
jmenoSouboru2 = objekt.nacteniNazvu(); break; }
catch(RuntimeException E) { System.err.print("Nejedna se o retezec");} }
System.out.println("Provedem nacteni matice do pole :");
Matice MaticeA,MaticeB,MaticeZnasobena;
long nacteni1 = System.currentTimeMillis();
MaticeA = objekt.nacteniMatice(jmenoSouboru1);
//tiskMatice(MaticeA); // pro kontrolu
long nacteni2 = System.currentTimeMillis();
MaticeB = objekt.nacteniMatice(jmenoSouboru2);
long nactenikonec = System.currentTimeMillis();
System.out.println("Nacitani matice prvni :\t"+(nactenikonec-nacteni2)+" milisekund\nNacteni matice druhe :\t"+(nacteni2-nacteni1)+" milisekund");
long zacatekNasobeni = System.currentTimeMillis();
MaticeZnasobena = objekt.nasobeniMatic(MaticeA,MaticeB);
long konecNasobeni = System.currentTimeMillis();
System.out.println("Nasobeni matic trvalo :\t"+(konecNasobeni-zacatekNasobeni)+" milisekund\nVelikost Matice :"+MaticeZnasobena.velikost);
//tiskMatice(MaticeZnasobena); // pro kontrolu
System.out.println("Vlozte prosim jmeno souboru do ktereho chcete ulozit vyslednou matici");
while(true) { // nekonecna smycka
try {
jmenoSouboru3 = objekt.nacteniNazvu(); break; }
catch(RuntimeException E) { System.err.print("Nejedna se o retezec");} }
long ulozeni1 = System.currentTimeMillis();
objekt.ulozeniMatice(jmenoSouboru3,MaticeZnasobena);
long ulozeni2 = System.currentTimeMillis();
System.out.println("Ulozeni matice trvalo :\t"+(ulozeni2-ulozeni1)); }
}