Avatar billede mora Nybegynder
16. september 2002 - 19:46 Der er 17 kommentarer og
1 løsning

Forkort kode

Nogen der har nogle ideer til at korte denne kilde ned ?

Den virker som den er nu, men vil gerne omlægge noget af det gentagende til en eller flere lykker.

Kilden bruger ConsoleReader.java -=- http://mora.amok.dk/ConsoleReader.java


for overskuelighed har jeg valgt at lægge kilden op på http://mora.amok.dk/Lovecalc.java
Avatar billede disky Nybegynder
16. september 2002 - 19:51 #1
post din kode her, og fortæl hvad det skal
Avatar billede mora Nybegynder
16. september 2002 - 20:00 #2
det skal det samme som lovecalc.dk forklaret på http://www.lovecalc.dk/saadan.php

Som sagt virker det fint pt, vil bare gerne havde det gjort kortere...


#KILDE#

//Jan K. Nielsen - mora@ready.dk - As lovecalc.dk

public class Lovecalc {
    private static int Hvormange (char find, String instr) {
        int res=0;
        for(int i=0;i<instr.length();i++) {
            if (instr.charAt(i) == find) res++;
        }
        return res;
    }

    private static int Addr (int tal1, int tal2) {
        if (tal1+tal2>10) return tal1+tal2-10;   
        return tal1+tal2;
    }

    public static void main(String[] argv) {
        ConsoleReader console = new ConsoleReader(System.in);       
        System.out.print("Navn1? ");
        String navn1 = console.readLine();
        System.out.print("Navn2? ");
        String navn2 = console.readLine();
        String navne = navn1 + navn2;
        System.out.println(navne);
//ILOVEYOU
        int i1 = Hvormange('i', navne);
        int l1 = Hvormange('l', navne);
        int o1 = Hvormange('o', navne);
        int v1 = Hvormange('v', navne);
        int e1 = Hvormange('e', navne);
        int y1 = Hvormange('y', navne);
        int u1 = Hvormange('u', navne);

        System.out.println(i1 +" "+ l1 +" "+ o1 +" "+ v1 +" "+ e1 + " " + y1 +" "+ o1 +" "+ u1);
       
        int r1=Addr(i1, l1);
        int r2=Addr(l1, o1);
        int r3=Addr(o1, v1);
        int r4=Addr(v1, e1);
        int r5=Addr(e1, y1);
        int r6=Addr(y1, o1);
        int r7=Addr(o1, u1);
        System.out.println(" " + r1 +" "+ r2 +" "+ r3 +" "+ r4 +" "+ r5 + " " +r6 + " " +r7);
       
        int r21=Addr(r1, r2);
        int r22=Addr(r2, r3);
        int r23=Addr(r3, r4);
        int r24=Addr(r4, r5);
        int r25=Addr(r5, r6);
        int r26=Addr(r6, r7);
       
        System.out.println(" " + r21 +" "+ r22 +" "+ r23 +" "+ r24 +" "+ r25 + " " +r26);       
       
        int r31=Addr(r21, r22);
        int r32=Addr(r22, r23);
        int r33=Addr(r23, r24);
        int r34=Addr(r24, r25);
        int r35=Addr(r25, r26);

        System.out.println(" " + r31 +" "+ r32 +" "+ r33 +" "+ r34 +" "+ r35);
       
        int r41=Addr(r31, r32);
        int r42=Addr(r32, r33);
        int r43=Addr(r33, r34);
        int r44=Addr(r34, r35);
       
        System.out.println(" " + r41 +" "+ r42 +" "+ r43 +" "+ r44);
       
        int r51=Addr(r41, r42);
        int r52=Addr(r42, r43);
        int r53=Addr(r43, r44);

        System.out.println(" " + r51 +" "+ r52 +" "+ r53);       
       
        int r61=Addr(r51, r52);
        int r62=Addr(r52, r53);

        System.out.println(" " + r61 +""+ r62 +"%");
    }
}
Avatar billede disky Nybegynder
16. september 2002 - 20:14 #3
Hvis du vil printe de enkelte mellemregninger ud så er det lidt besværligt at korte det ned, men skal du bare have resultatet kan du godt.
Avatar billede mora Nybegynder
16. september 2002 - 20:22 #4
Hvad med arrays ?

int r21=Addr(r1, r2);
int r22=Addr(r2, r3);
int r23=Addr(r3, r4);
...

der gælder det for hver blok at resultatet er det Addr(i,i+1) retuner, såfremt at i=1 til 3.
(ved ikke hvordan man laver arrays i java endnu :/)
Avatar billede disky Nybegynder
16. september 2002 - 20:26 #5
jeg roder lige med den
Avatar billede jakoba Nybegynder
16. september 2002 - 20:27 #6
er denne ok? lidt hurtiger og lidt kortere.

//Jan K. Nielsen - mora@ready.dk - As lovecalc.dk

public class Lovecalc {
    private static int Hvormange (char find, String instr) {
        int res=0;
            int pos=-1;
            while ( 0 < ( pos = instr.indexOf( find, pos+1 ) ) ) res++;
        return res;
    }

    private static int Addr (int tal1, int tal2) {
        return (tal1+tal2-1)%10 +1;  // men jeg tror du mener (tal1+tal2)%10  (0..9)
    }

    private static blankJoin( int[] arr, int antal ) {
        String str = "";
            for int i=0; i<antal; i++ ) {
            str += arr[i].toString() +" ";
                  arr[i] = Addr( arr[i], arr[i+1] );
        }
            System.out.println( str + arr[i].toString() );
    }

    public static void main(String[] argv) {
        ConsoleReader console = new ConsoleReader(System.in);       
        System.out.print("Navn1? ");
        String navn1 = console.readLine();
        System.out.print("Navn2? ");
        String navn2 = console.readLine();
        String navne = navn1 + navn2;
        System.out.println(navne);
//ILOVEYOU
            String str = "iloveyou";
            int[] tal = new int[8];
            for (int i=0; i<8; i++) {
                tal[i] = Hvormange( str.charAt(i), navne );
            }
            for ( i=6; i>0; i-- ) blankJoin( tal, i );
    }
}
Avatar billede jakoba Nybegynder
16. september 2002 - 20:30 #7
Ups. sidste forløkke skal starte med 7
            for ( i=7; i>0; i-- ) blankJoin( tal, i );
Avatar billede disky Nybegynder
16. september 2002 - 20:33 #8
Her er løsningen:


public class Lovecalc
{
   
    private final static String text="iloveyou";
   
    private static int hvorMange(char find, String instr)
    {
        int res=0;
        for(int i=0;i<instr.length();i++)
        {
            if (instr.charAt(i) == find) res++;
        }
        return res;
    }
   
    private static int addr(int tal1, int tal2)
    {
        if (tal1+tal2>10) return tal1+tal2-10;
        return tal1+tal2;
    }
   
    private int data[]=new int[8];
   
    public Lovecalc()
    {
        /*
        ConsoleReader console = new ConsoleReader(System.in);
        System.out.print("Navn1? ");
        String navn1 = console.readLine();
        System.out.print("Navn2? ");
        String navn2 = console.readLine();
        */
       
        String navn1="Anders And";
        String navn2="Andersine Andemor";
       
        navn1=navn1.toLowerCase();
        navn2=navn2.toLowerCase();
       
        String navne = navn1 + navn2;
        System.out.println(navne);
        //ILOVEYOU
       
        for (int x=0;x<text.length();x++)
        {
            data[x]=hvorMange(text.charAt(x),navne);
        }
       
        for (int x=7;x>1;x--)
        {
            for(int y=0;y<x;y++)
            {
                data[y]=addr(data[y],data[y+1]);
                System.out.print(data[y]+" ");
            }
            System.out.println("");
        }
        int resultat=data[0]*10+data[1];
        System.out.println("Resultat = "+resultat+"%");
       
    }
   
   
    public static void main(String[] argv)
    {
        new Lovecalc();
    }
}
Avatar billede disky Nybegynder
16. september 2002 - 20:34 #9
ups

public class Lovecalc
{
   
    private final static String text="iloveyou";
   
    private static int hvorMange(char find, String instr)
    {
        int res=0;
        for(int i=0;i<instr.length();i++)
        {
            if (instr.charAt(i) == find) res++;
        }
        return res;
    }
   
    private static int addr(int tal1, int tal2)
    {
        if (tal1+tal2>10) return tal1+tal2-10;
        return tal1+tal2;
    }
   
    private int data[]=new int[8];
   
    public Lovecalc()
    {
        ConsoleReader console = new ConsoleReader(System.in);
        System.out.print("Navn1? ");
        String navn1 = console.readLine();
        System.out.print("Navn2? ");
        String navn2 = console.readLine();
       
        navn1=navn1.toLowerCase();
        navn2=navn2.toLowerCase();
       
        String navne = navn1 + navn2;
        System.out.println(navne);
        //ILOVEYOU
       
        for (int x=0;x<text.length();x++)
        {
            data[x]=hvorMange(text.charAt(x),navne);
        }
       
        for (int x=7;x>1;x--)
        {
            for(int y=0;y<x;y++)
            {
                data[y]=addr(data[y],data[y+1]);
                System.out.print(data[y]+" ");
            }
            System.out.println("");
        }
        int resultat=data[0]*10+data[1];
        System.out.println("Resultat = "+resultat+"%");
       
    }
   
   
    public static void main(String[] argv)
    {
        new Lovecalc();
    }
}
Avatar billede disky Nybegynder
16. september 2002 - 20:36 #10
fyyy jakoba, man laver ikke udregner på String's :)) men på StringBuffer
Avatar billede mora Nybegynder
16. september 2002 - 20:37 #11
disky .
C:\dat\1. sem\prgm\Lovecalc2.java:24: invalid method declaration; return type required
    public Lovecalc()
          ^
1 error


jakoba hvilken compiler bruger du ?
min giver et hav af fejl (bl.a. for uden () ? og blanktegn uden return)
Avatar billede disky Nybegynder
16. september 2002 - 20:40 #12
jeg tror nærmere du skal svare på hvilken du bruger,

JDK1.4 compiler det fint, med undtagelse af din Consol Reader som ikke er en standard java ting.

Men min første posting med løsning virker perfekt.
Avatar billede disky Nybegynder
16. september 2002 - 20:41 #13
Din java fil skal hedde 'Lovecalc.java'
Avatar billede jakoba Nybegynder
16. september 2002 - 20:43 #14
jeg har slet ikke kompileret, så det skal nok passe at der er masser af fejl. Jeg har også meget mere tillid til diskys.

disky >> for 8 Strings tror jeg ikke på gevinsten ved stringbuffer er ret stor.
Avatar billede disky Nybegynder
16. september 2002 - 20:44 #15
korrekt, men det andet er mere korrekt :)
Du sparer 7 gange .toString() :)
Avatar billede disky Nybegynder
16. september 2002 - 20:44 #16
ups mange tak for tilliden Jakoba :)
Avatar billede mora Nybegynder
16. september 2002 - 20:48 #17
Hmm :) gemte den som Lovecalc2 og ændrede kun public delen :)
nå virker nu ...
Avatar billede disky Nybegynder
16. september 2002 - 20:50 #18
:-)
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