09. juni 2005 - 21:55Der er
12 kommentarer og 2 løsninger
Problemer med en metode til bogstav kombinationer
Jeg vil lave en metode som udskriver de forskellige mulige bogstav kombinationer med eksempelvis a, b, c, d. Indtil videre har jeg lavet forsøget i en main. Koden er som følger:
import java.util.*;
public class Ord { public static void main(String[] args) { String s1 = ""; String s2 = ""; String s3 = ""; String s4 = ""; Vector start = new Vector(); start.addElement((String)"a"); start.addElement((String)"b"); start.addElement((String)"c"); start.addElement((String)"d"); Vector v1 = new Vector(); Vector v2 = new Vector(); Vector v3 = new Vector();
Problemet er at i den sidste forløkke lykkedes det på, for mig ubegribelig vis, også at reducere indholdet af v2. Som jeg ser det bør indholdet af v2 i den sidste forløkke hele tiden være 2 da det kun er i v3 jeg remover et element og når så løkken igen kører sætter v3 = v2. Med her er indholdet af v2 også blevet reduceret og jeg ender ud med en ArrayIndexOutOfBoundsException.
Kommentarerne er bare for at følge med i løkkernes gennemløb og vectorenes størrelser.
Håber der er nogen der har et forslag til hvad der kan være galt eller måske en meget nemmere måde at løse problemet på...
public class Comb { public static void process(char[] b) { for (int j = 0; j < b.length; j++) { System.out.print(" " + b[j]); } System.out.println(); } public static void allcomb(char[] a, int len, char[] b, int ix, int start) { if (ix < b.length) { for (int i = start; i < a.length; i++) { b[ix] = a[i]; allcomb(a, len, b, ix + 1, i + 1); } } else { process(b); } } public static void allcomb(char[] a, int len) { char[] b = new char[len]; allcomb(a, len, b, 0, 0); } public static void allcomb(char[] a) { for (int len = 1; len <= a.length; len++) { allcomb(a, len); } } public static void main(String[] args) { char[] a = { 'a', 'b', 'c', 'd' }; allcomb(a); } }
Arne_v's løsning er klart nemmere (hvis man kan gennemskue rekursion). Der hvor du har dit problem, er at JAVA behandler alle variabler som referencer. Dvs. i dit program har du faktisk kun en vektor du køre det hele på, nemlig v1. Fordi når du skriver v2 = v1 betyder det ikke at indholdet af v1 bliver flyttet over i v2! men, at v2 nu pejer på samme data som v1. osv. mht. v3. For at løse problemet skal du erstatte v2 = v1 med v2 = new Vector(v1) dermed laver du et nyt object som v2 pejer på med værdierne fra v1.
soreno - jeg vil gerne lige vide en ting. Hvis man gransker din kode så kan man se at man i starten har med værdierne a og a at gøre godt med. Bagefter er det b og b. Men hvordan hopper den så pludselig over til c og b ????
Jeg forstår ikke dit spørgsmål, men gætter på det er swap funktionen der er svaret.. :-) Dette kode er jo bare swap af 2 elementer i arrayet: char temp = array[index]; array[index] = array[i]; array[i] = temp;
I øvrigt, burde jeg ikke få en mail når der er nye indlæg i spørgsmålet ?
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.