Avatar billede tt25 Nybegynder
29. december 2000 - 03:58 Der er 13 kommentarer og
2 løsninger

char...

hvad gør jeg forkert? Der er to strings som skal sammenlignes og hvis der er to \'0\' på samme pladser i begge strings skal den returnere 0 ellers 1..?
public class Opgave7
{
    public static void main(String[] args)
    {
        String string1 = \"01101000\";
        String string2 = \"00101110\";
       
        String resultat = toStrings(string1, string2);
        System.out.println(resultat);
    }
   
    public static String toStrings(String a, String b)
    {
   
        for (int i = 0; i < a.length() && i < b.length(); i++)
        {
            char ch1 = a.charAt(i);
            char ch2 = b.charAt(i);
       
               
                if (ch1 == 0 && ch2 == 0)
                    {
                    ch1 =0;
                    }
                    else
                    {
                    ch1 =1;
                    }
        }
        return ch1;
       
    }
               
}   
Avatar billede cbp Nybegynder
29. december 2000 - 09:23 #1
Du glemmer at \'samle\' resultatet efter hver sammenligning og toStrings-funktionen returnerer derfor kun 0 eller 1 alt efter den sidste sammenligning. Desuden returnerer du en char i stedet for en String som du ellers har angivet returværdien for funktionen til at være. Nedenstående kode skulle rette fejlene (eller i hvert fald give dig en ide til løsningen, da jeg ikke har testet koden).


public class Opgave7
{
    public static void main(String[] args)
    {
        String string1 = \"01101000\";
        String string2 = \"00101110\";
       
        String resultat = toStrings(string1, string2);
        System.out.println(resultat);
    }
   
    public static String toStrings(String a, String b)
    {
        String result = \"\";
        for (int i = 0; i < a.length() && i < b.length(); i++)
        {
            char ch1 = a.charAt(i);
            char ch2 = b.charAt(i);
       
               
                if (ch1 == 0 && ch2 == 0)
                    {
                        result.concat(\"0\");
                    }
                    else
                    {
                        result.concat(\"1\");
                    }
        }
        return result;
       
    }
               
}   
Avatar billede kama Nybegynder
29. december 2000 - 10:15 #2
nedenstående løser problemet lidt bedre. du skal nok også lige køre et check på længden af de to strenge inden for-løkken - slut-betingelsen er ikke god. kan strengene have forskellig længde?
jeg er heller ikke sikker på, at jeg forstår opgaveformuleringen korrekt!

public class Opgave7
{
    public static void main(String[] øf)
    {
        String streng1 = \"01101000\";
        String streng2 = \"11101111\";
       
        System.out.println(undersøgStrenge(streng1, streng2));
    }
   
    /** En metode der fortæller om tallet 0 forekommer
        på samme plads i to strenge mindst én gang.
        @param a en streng indeholdende en kombination af tallene 0 og 1
        @param b en streng indeholdende en kombination af tallene 0 og 1
        @return et heltal, 0 hvis betingelsen er opfyldt ellers 1
    */
    public static int undersøgStrenge(String a, String b)
    {   
        for (int i = 0; i < a.length() && i < b.length(); i++)
        {
            if(a.charAt(i)==\'0\' && b.charAt(i)==\'0\') return 0;
        }
        return 1;
    }
}   
Avatar billede tt25 Nybegynder
29. december 2000 - 10:52 #3
der er ingen af de to løsninger der virker. cbp: hvad er concat? Det har jeg ikke set før.
kama: de har samme længde. Hvis jeg har to strenge som streng1 og streng2 i opgaven, skal den returnere 01101110
Avatar billede kama Nybegynder
29. december 2000 - 13:20 #4
så forstod jeg opgaven...

public class Opgave7
{
    public static void main(String[] øf)
    {
        String streng1 = \"01101000\";
        String streng2 = \"00101110\";
       
        System.out.println(undersøgStrenge(streng1, streng2));
    }

    public static String undersøgStrenge(String a, String b)
    { 
        String resultat = \"\"; 
       
        for (int i = 0; i < a.length(); i++)
        {
            if(a.charAt(i)==\'0\' && b.charAt(i)==\'0\')
            resultat+=0;
            else
            resultat+=1;
        }
        return resultat;
    }
}   
Avatar billede codemon Nybegynder
29. december 2000 - 18:51 #5
javas bitvise operatorer kan også bruges til at sammenligne bittene i to tal fx

~(~tal1 & ~tal2), hvor tal1 og tal2 er integers

eller i dit eksempel

int tal1 = Integer.parseInt (a,2);
int tal2 = Integer.parseInt (b,2);
resultat = Integer.toString (~(~tal1 & ~tal2), 2);

de foreste nuller udelades ligesom alm. tal.
Avatar billede codemon Nybegynder
29. december 2000 - 18:55 #6
lidt kringlet før:
resultat = Integer.toString (tal1 | tal2, 2);
er bedre.
Avatar billede tt25 Nybegynder
29. december 2000 - 23:49 #7
codemon, tak...men de første to er svar nok.....det var lige det jeg skal bruge. Kama og cbp mp vist dele point.:-)
Avatar billede pstric Nybegynder
30. december 2000 - 02:07 #8
codemon>> det var vel nok trist for tt25, at han ikke fattede dit elegante svar. Det var ellers lige hvad han havde brug for. Men ved at aflevere en stor styg algoritme, viser han jo den lærer der stillede opgave 7, at han kan programmere. Så må vi bare håbe, at læreren ikke kigger her på eksperten - eller beder ham om at forklare hvad der foregår ;-)
Avatar billede tt25 Nybegynder
30. december 2000 - 02:22 #9
pstric...sig mig, skal man kunne finde ud af alt det folk skriver tilbage til en for at kunne stille et spørgsmål her?
den store styge kode, er det jeg kan i øjeblikket og læreren skal nok blive mere end lykkelig...nu må jeg bare håbe at den tid hvor jeg også kan anvende codemans kode kommer snart. Man er vel her for at få lidt hjælp? og forresten, så er det en hun som havde brug for lidt hjælp til koden....:-)
Avatar billede pstric Nybegynder
30. december 2000 - 02:25 #10
tt25>> undskyld, jeg kan godt se at jeg var urimelig. Håber du kan tilgive mig.
Avatar billede tt25 Nybegynder
30. december 2000 - 02:29 #11
ja, det er helt i orden, men du gjorde mig godt nok sur....*ss*
Avatar billede pstric Nybegynder
30. december 2000 - 02:30 #12
Og med rette, desværre
Avatar billede codemon Nybegynder
30. december 2000 - 02:54 #13
Mit svar skulle nok have været en kommentar. Der var jo svaret på det.

Det er nok pstric\'s svar der er meningen med opgaven, men tak for at kalde den elegant.

Er der forresten nogen som kan give en god forklaring på hvorfor der ikke er binær konvertering i fx Byte-klassen, det burde da netop være for enkelte bytes der er brug for det.
Avatar billede codemon Nybegynder
30. december 2000 - 02:55 #14
hmm jeg mente kama\'s og cbp\'s svar
Avatar billede pstric Nybegynder
30. december 2000 - 03:16 #15
codemon>> mener du binær konvertering med decode? Så kan du da bare bruge parseByte(s, 2), men hvis du gerne ville have det i decode(), så har du nok en pointe der. Som så gælder for alle Number-klasser. Eller har jeg helt misforstået dit spørgsmål?
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester