Ahoj, jsem velký amatér v oblasti programování a do školy mám napsat program na hanojské věže.
To jak fungujou najdu všude, ale já potřebuju nějak vypisovat každý krok kde se jaký disk nachází a to sem nikde nenašel. Tady posílám kód, který sem horko těžko napsal, a mám tam problém s obrazováním nevim s rekurzí těch disků.
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package hanojskeuswa;
import java.io.BufferedReader;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.util.Scanner;
import java.util.Stack;
/**
*
* @author Celnik
*/
public class Hanojskeuswa {
/**
* @param args the command line arguments
*/
public static void main(String[] args) throws IOException {
try {
// vytvoreni promenne pocetDisku
BufferedReader fileOutReader = new BufferedReader(new InputStreamReader(System.in));
System.out.println("zadejte vystupni soubor");
String fileOut = fileOutReader.readLine(); //nacte vystup
Scanner sc = new Scanner(System.in); //deklarace Scanneru
System.out.println("zadejte pocet disku");
int pocetDisku = sc.nextInt(); //ze vstupu nacte cislo - pocetDisku a prepise
FileOutputStream vystup = new FileOutputStream(fileOut); //pracuje se souborem vystup.txt
try (PrintStream ps = new PrintStream(vystup)) {
Stack<Integer> A, B, C;
A = new Stack();
B = new Stack();
C = new Stack();
for (int i = pocetDisku; i > 0; i--) { //prida do stacku A pocet disku
A.push(i);
}
ps.println("Prvni jehla: " + A + " Druha jehla: " + B + " Treti jehla: " + C);
prenesVez(pocetDisku, A, B, C, ps);
}
System.out.println("hotovo");
} catch (IOException e) { //ochrana
System.out.println("Chyba");
}
}
private static void prenesVez(int pocetDisku, Stack<Integer> odkud, Stack<Integer> kam, Stack<Integer> pomoc, PrintStream ps) {
if (pocetDisku > 0) { // jestlize je pocetDisku > 0 provede cyklus
prenesVez(pocetDisku - 1, odkud, pomoc, kam, ps);
kam.push(odkud.pop());
ps.println("Prvni jehla: " + odkud + " Druha jehla: " + pomoc + " Treti jehla: " + kam);
prenesVez(pocetDisku - 1, pomoc, kam, odkud, ps);
}
}
}
Při spuštění se program zeptá jak se má jmenovat soubor do kterého se uloží umístění disků. (např. test.txt)
potom počet disků a když zadám třeba 3, tak se zobrazí toto:
Prvni jehla: [3, 2, 1] Druha jehla: [] Treti jehla: []
Prvni jehla: [3, 2] Druha jehla: [] Treti jehla: [1]
Prvni jehla: [3] Druha jehla: [1] Treti jehla: [2]
Prvni jehla: [] Druha jehla: [3] Treti jehla: [2, 1]
Prvni jehla: [] Druha jehla: [2, 1] Treti jehla: [3]
Prvni jehla: [2] Druha jehla: [3] Treti jehla: [1]
Prvni jehla: [] Druha jehla: [1] Treti jehla: [3, 2]
Prvni jehla: [] Druha jehla: [] Treti jehla: [3, 2, 1]
já potřebuju tohle:
Prvni jehla: [3, 2, 1] Druha jehla: [] Treti jehla: []
Prvni jehla: [3, 2] Druha jehla: [] Treti jehla: [1]
Prvni jehla: [3] Druha jehla: [2] Treti jehla: [1]
Prvni jehla: [3] Druha jehla: [2, 1] Treti jehla: []
Prvni jehla: [] Druha jehla: [2, 1] Treti jehla: [3]
Prvni jehla: [1] Druha jehla: [2] Treti jehla: [3]
Prvni jehla: [1] Druha jehla: [] Treti jehla: [3, 2]
Prvni jehla: [] Druha jehla: [] Treti jehla: [3, 2, 1]
Díky za každou pomoc.