Też właśnie przerabiam książkę Thinking in Java. Do problemu podszedłem w zupełnie inny sposób, najbardziej dla mnie logiczny. Jako, że dopiero się uczę javy kod nie wygląda zbyt pięknie - już teraz widzę, że mógł być napisany lepiej(bez tych obiektów itp). Ale działać działa ;-)
class sprawdzanie {
String kombinacje[] = { "abcd", "abdc", "bacd", "badc", "acbd", "acdb", "cabd", "cadb", "cbad", "cbda", " bcad", "bcda", "dabc", "dacb", "adbc", "adcb", "cdab", "cdba", "dcab", "cdba", "bdac", "bdca", "dbac", "dbca" };
sprawdzanie( int x ) {
testuj liczba = new testuj();
for( int y = 0; y < 24; ++y )
if( liczba.sprawdz( x , kombinacje[y] ) == true )
break;
}
}
class testuj {
boolean sprawdz( int dane, String kod ) {
int tab[] = new int[4];
int a = dane / 1000,
b = (dane % 1000) / 100,
c = (dane % 100) / 10,
d = dane % 10;
for( int y = 0; y < 4; ++y ) {
switch( kod.charAt(y) ) {
case 'a': tab[y] = a;
break;
case 'b': tab[y] = b;
break;
case 'c': tab[y] = c;
break;
case 'd': tab[y] = d;
break;
}
}
StringBuffer ab = new StringBuffer();
ab.append( tab[0] );
ab.append( tab[1] );
StringBuffer cd = new StringBuffer();
cd.append( tab[2] );
cd.append( tab[3] );
if( Integer.parseInt( ab.toString() ) * Integer.parseInt( cd.toString() ) == dane ) {
System.out.println( dane + ", bo " + Integer.parseInt( ab.toString() ) + " * " + Integer.parseInt( cd.toString() ) + " == " + Integer.parseInt( ab.toString() ) * Integer.parseInt( cd.toString() ) );
return true;
}
else
return false;
}
}
public class vampir {
public static void main(String[] args) {
System.out.println( "Liczby wampirze z przedzialu [1000...9999]: " );
for( int x = 1000; x < 9999; ++x )
new sprawdzanie( x );
}
}