Avatar billede renebmadsen Nybegynder
31. maj 2007 - 22:47 Der er 11 kommentarer og
1 løsning

String find et tal på ulige plads og gang med 2

jeg har en String hvor jeg skal tage tal på ulige plads og gang med 2. giver det feks 10 så skal jeg sige 1+0 =1 osv.
tallene på lige plads skal bare forblive som de er. det hele skal så smides i en ny string. hvordan gør jeg det?
Avatar billede mikkelbm Nybegynder
31. maj 2007 - 23:00 #1
Det kan muligvis gøres pænere, men her er da et forslag:

public class Test
{
    public static void main (String[] args)
    {
        String string = "0123456789";
        String newString = "";
        for (int i = 1; i<string.length(); i += 2)
        {
            int value = Integer.parseInt(String.valueOf(string.charAt(i)));
            value *= 2;
            String secondValue = String.valueOf(value);
            int newValue = 0;
            for (int j = 0; j<secondValue.length(); j++)
            {
                newValue += Integer.parseInt(String.valueOf(secondValue.charAt(j)));
            }
           
            newString += String.valueOf(newValue);
        }
       
        System.out.println ("Original string: "  + string);
        System.out.println ("New string: " + newString);
    }
}
Avatar billede renebmadsen Nybegynder
31. maj 2007 - 23:09 #2
det er super så mangler jeg bare lige talene på de ulige pladser for de skal jo stadig med på de ulige pladser
Avatar billede mikkelbm Nybegynder
31. maj 2007 - 23:11 #3
Der er jo ingen garanti for at de bliver ved med at stå på de ulige pladser, hvis det tal der lægges sammen giver over 9.

Men ellers er det vel bare:

newString += value + String.valueOf(newValue);
Avatar billede mikkelbm Nybegynder
31. maj 2007 - 23:13 #4
Eller nok nærmere:

newString += string.charAt(i) + String.valueOf(newValue);
Avatar billede renebmadsen Nybegynder
31. maj 2007 - 23:23 #5
ah jeg skal egentlig også bare have lagt alle de lige og de ulig tal sammen nu så det er egentlig lige meget hvor de står. hvordan vil koden se ud nå de er lagt sammen og jeg har en ny string med det samlede resultat. undskyld at jeg ikke lige havde fanget den med det samme.
Avatar billede mikkelbm Nybegynder
31. maj 2007 - 23:28 #6
Du mener ikke selv du kan gennemskue det :) ?

Det burde ellers være nemt at rette til...
Avatar billede mikkelbm Nybegynder
31. maj 2007 - 23:29 #7
Hvis alle tal skal lægges sammen skal for-løkken rettes:

for (int i = 1; i<string.length(); i += 2)

skal være:

for (int i = 0; i<string.length(); i++)

Og så burde det vel egentlig køre...
Avatar billede renebmadsen Nybegynder
31. maj 2007 - 23:34 #8
det skal være som det du lavede i starten, derefter skal alle de nye resultater lægges sammen + dem på de ulige pladser der ikke er ganget med 2
Avatar billede mikkelbm Nybegynder
31. maj 2007 - 23:40 #9
Prøv at se om følgende kan gøre det:

public class Test
{
    public static void main (String[] args)
    {
        String string = "0123456789";
        String newString = "";
        for (int i = 1; i<string.length(); i += 2)
        {
            int value = Integer.parseInt(String.valueOf(string.charAt(i)));
            int newValue = value;           
            value *= 2;
            String secondValue = String.valueOf(value);
            for (int j = 0; j<secondValue.length(); j++)
            {
                newValue += Integer.parseInt(String.valueOf(secondValue.charAt(j)));
            }
           
            newString += string.charAt(i) + String.valueOf(newValue);
        }
       
        System.out.println ("Original string: "  + string);
        System.out.println ("New string: " + newString);
    }
}
Avatar billede renebmadsen Nybegynder
01. juni 2007 - 00:03 #10
desværre slet ikke
øverste linie er den orginale string det sidste der giver 47 er det jeg skal stå med til sidst

0    1    2    3    4    5    6    7    8    9
0*2 + 1 + 2*2 + 3 + 4*2 + 5 + 6*2 + 7 + 8*2 + 9
0  + 1 +  4  + 3 +  8  + 5 + 12  + 7 +  16 + 9
0  + 1 +  4  + 3 +  8  + 5 +(1+2)+ 7 +(1+6)+ 9
0  + 1 +  4  + 3 +  8  + 5 +  3  + 7 +  7  + 9 = 47
Avatar billede mikkelbm Nybegynder
01. juni 2007 - 00:20 #11
Så er den der vist:

public class Test
{
    public static void main (String[] args)
    {
        String string = "0123456789";
        int totalValue = 0;
        for (int i = 0; i<string.length(); i++)
        {
            if (i % 2 == 0)
            {
                int value = Integer.parseInt(String.valueOf(string.charAt(i))) * 2;
                value = findValue (String.valueOf(value));
                System.out.println (string.charAt(i) + " --> " + value);
                totalValue += value;
            }
            else
            {
                totalValue += Integer.parseInt(String.valueOf(string.charAt(i)));
            }
        }
        System.out.println ("Original value: " + string);
        System.out.println ("New value: " + totalValue);
    }
   
    private static int findValue (String value)
    {
        if (value.length() > 1)
        {
            int newValue = 0;
            for (int i = 0; i<value.length(); i++)
            {
                newValue += Integer.parseInt(String.valueOf(value.charAt(i)));
            }
            return findValue (String.valueOf(newValue));
        }
        else if (value.length() == 1)
            return Integer.parseInt(value);
        else return 0;
    }
}
Avatar billede mikkelbm Nybegynder
01. juni 2007 - 00:25 #12
Og jeg tillader mig igen at smide at svar, da du afviste det andet.
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