23. april 2003 - 10:00Der er
16 kommentarer og 1 løsning
OrdTjekker Klasse - Virker den ?
Jeg har lavet følgende klasse :
public class ordTester { public static String ord = "datamatiker"; public static String bogstav = "ggdggaggtggaggmgagtggigkggeggr"; public static char[] bogstavliste = bogstav.toCharArray();
public static void main(String args[]) { tjekBogstaver(bogstavliste,ord); }
public static void tjekBogstaver(char[] bogstavArray, String ord) { char[] ordArray = ord.toCharArray(); int fundetBogstaver = 0;
for(int i = 0; i < bogstavArray.length;i++) { for(int x = 0; x < ordArray.length;x++) { if (bogstavArray[i]==ordArray[x]) { bogstavArray[i] = '@'; fundetBogstaver++; } } }
if (ordArray.length==fundetBogstaver) System.out.println("ordet kan dannes!!"); } }
Umiddelbart ser den ud til at virke, men er der nogle af jer der kan se nogle faldgrupper i den..?
Den skal tjekke at et ord kan laves ud fra et array af bogstaver... Og bogstaverne må kun bruges en gang, så er ordet = otto, skal der være 2 o´er og 2 t´er for den skal give svar tilbage....
public class OrdTester { public static String ord = "datamatiker"; public static String bogstav = "ggdggaggtggaggmgagtggigkggeggr"; public static char[] bogstavliste = bogstav.toCharArray();
public static void tjekBogstaver(String bogstav, String ord) { int fundetBogstaver = 0; for (int i = 0; i < bogstav.length(); i++) { for (int x = 0; x < ord.length(); x++) { if (bogstav.charAt(i) == ord.charAt(x)) { fundetBogstaver++; } } }
if (ord.length() <= fundetBogstaver) System.out.println("ordet kan dannes!!"); else System.out.println("ordet kan ikke dannes!!");
Det med flere kald er ikke et problem... Jeg har en klasse der danner en bogstavliste i constructoren.. Så der laver jeg bare en bogstaver.getListe(), som så returnere listen.... Men klart.... Hvis det bare er den klasse jeg har lavet som skal køre er det jo et problem..
Soreno..
Ordet kunne også være hundeprut ... Den tjekker så om det kan dannes ud fra det bogstavArray....
Jow, men bogstaverne i "public static String bogstav" skal komme i samme rækkefølge som i "public static String ord" ?
Ellers kunne du lave en anden løsning. Lav en struktur som har (key, antal) (kan ikke huske hvad strukturen hedder, men jeg er ret sikker på den ligger i java.util.???), hvor key er bogstavet og antal er antallet af forekomster i "bogstav". Så kan du teste om ordet kan dannes ved at teste om der er nok bogstaver i strukturen.
public static void tjekBogstaver(String bogstav, String ord) { boolean[] used = new boolean[bogstav.length()]; for(int i = 0; i < used.length; i++) used[i] = false; int fundetBogstaver = 0; for (int i = 0; i < bogstav.length(); i++) { for (int x = 0; x < ord.length(); x++) { if (!used[i] && (bogstav.charAt(i) == ord.charAt(x))) { fundetBogstaver++; used[i] = true; } } }
if (ord.length() <= fundetBogstaver) System.out.println("ordet kan dannes!!"); else System.out.println("ordet kan ikke dannes!!");
1) det med char arrayet der blev ændret og gav andet resultat anden gang er det man kalder en side effect - generelt bør man undgå den slags side effects - selvom det ikke er noget problem her og nu, så kan det give store problemer den dag en anden programmør genbruger koden i en anden sammenhæng
2) det med used i.s.f. @ er også noget som en future maintenance programmør vil sætte pris på - han har nok en fornemmelse af hvad used variablen gør mens @ vil gør ham lidt bekymret over om der nu er noget specielt med den @
public static void tjekBogstaver(String bogstav, String ord) { boolean[] used = new boolean[bogstav.length()]; for(int i = 0; i < used.length; i++) used[i] = false; int fundetBogstaver = 0; for (int i = 0; i < bogstav.length(); i++) { for (int x = 0; x < ord.length(); x++) { if (!used[i] && (bogstav.charAt(i) == ord.charAt(x))) { fundetBogstaver++; used[i] = true; } } }
if (ord.length() <= fundetBogstaver) System.out.println("ordet kan dannes!!"); else System.out.println("ordet kan ikke dannes!!");
public static void tjekBogstaver(String bogstav, String ord) { boolean[] used = new boolean[bogstav.length()]; for(int i = 0; i < used.length; i++) used[i] = false; int fundetBogstaver = 0; for (int x = 0; x < ord.length(); x++) { for (int i = 0; i < bogstav.length(); i++) { if (!used[i] && (bogstav.charAt(i) == ord.charAt(x))) { fundetBogstaver++; used[i] = true; break; } } }
if (ord.length() <= fundetBogstaver) System.out.println(ord + " : ordet kan dannes!!"); else System.out.println(ord + " : ordet kan ikke dannes!!");
}
synes at løse det problem.
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.