Avatar billede Javapain1 Nybegynder
05. oktober 2012 - 17:18 Der er 13 kommentarer

Indledende programmering med Eclipse. HJælp til en programmerings opgave.

Jeg skal løse nedenstående opgave og kan ikke rigtig få det til at passe.

Jeg har fået udleveret en testkode, som du kan se efter opgaven.

Helt til sidst har jeg prøvet at komme med et gæt til hvordan koden skal se ud.


Write a class SafeDivMult which contains methods
public static int safeIntDivide (int a, int b)
public static int safeIntMultiply (int a, int b)
This methods return the integer part of the division a=b respectively the product ab.
Both methods return 0 and write an error message in case that the respective operation
cannot be performed or would gives an incorrect result. Use exactly the names speci ed
above.

Test filen:
package aflop01_12;

public class SaveDivMultTest {
    public static int[][] testDataDiv = {{9,2,4},{2,9,0},{-23, -4,5}};
    public static int[][] testDataMul = {{-10,2,-20},{-7,-2,14},{1022333444, 2,2044666888}};
       
   
    public static void main(String[] args) {
        runTest();
    }

    private static void runTest() {
        int count = 0;
        for (int i = 0; i < testDataDiv.length; i++) {
            count += testDiv(testDataDiv[i]);
        }
        System.out.println(count+" out of "+testDataDiv.length+" tests for division passed.");
        System.out.println("---------------------------");
        count = 0;
        for (int i = 0; i < testDataMul.length; i++) {
            count += testMul(testDataMul[i]);
        }
        System.out.println(count+" out of "+testDataDiv.length+" tests for multiplication passed.");
       
       
       
        System.out.println();
       
    }

    private static int testDiv(int[] data) {
        try{
        int yourResult = SaveDivMult.safeIntDivide(data[0], data[1]);
        if(yourResult == data[2]){
            System.out.println("OK  : "+data[0]+" / "+data[1] +" = "+data[2] );
            return 1;
        } else {
            System.out.println("ERR : "+data[0]+" / "+data[1] +" = "+data[2]+"  you = "+yourResult );
            return 0;
        }
        }catch(Exception e){
            System.err.println("ERR: Your program cused a runtime error");
            return 0;
        }
       
    }
   
    private static int testMul(int[] data) {
        try{
        int yourResult = SaveDivMult.safeIntMultiply(data[0], data[1]);
        if(yourResult == data[2]){
            System.out.println("OK  : "+data[0]+" * "+data[1] +" = "+data[2] );
            return 1;
        } else {
            System.out.println("ERR : "+data[0]+" * "+data[1] +" = "+data[2]+"  you = "+yourResult );
            return 0;
        }
        }catch(Exception e){
            System.err.println("ERR: Your program cused a runtime error");
            return 0;
        }
       
    }

}




Selve koden jeg har prøvet at skrive i eclipse:


package aflop01_12;

public class SaveDivMult {
    public static int safeIntDivide (int a, int b) {
    if (b==1){
    return b;
} else {
        return a;
    }
    }

    public static int safeIntMultiply(int a, int b) {
        if (a==1){
            return a;
        } else {
                return b;

    }
}
}




Håber der er en der kan hjælpe med at svare på opgaven.
Avatar billede arne_v Ekspert
05. oktober 2012 - 17:41 #1
Dine safeIntDivide og safeIntMultiply ser meget forkerte ud.
Avatar billede arne_v Ekspert
05. oktober 2012 - 17:42 #2
Maa I bruge JUnit til at teste med?
Avatar billede Javapain1 Nybegynder
05. oktober 2012 - 20:46 #3
Nej det tror jeg ikke vi må.

Hvad har jeg skrevet forkert i koden?
Avatar billede arne_v Ekspert
06. oktober 2012 - 00:45 #4
safeIntMultiply(1,2) will return 1
safeIntMultiply(2,2) will return 2

jeg mener ikke at det er korrekt.

:-)
Avatar billede arne_v Ekspert
06. oktober 2012 - 00:45 #5
Test ville kunne laves meget paenere med JUnit.
Avatar billede Javapain1 Nybegynder
06. oktober 2012 - 10:46 #6
Da jeg lige startet på kurset, har vi desværre ikke lært noget om Junit.

Jeg synes ikke at jeg har skrevet:
safeIntMultiply(1,2) will return 1
safeIntMultiply(2,2) will return 2


Koden jeg har skrevet er:
public class SaveDivMult {
    public static int safeIntDivide (int a, int b) {
    if (b==1){
    return b;
} else {
        return a;
    }
    }

    public static int safeIntMultiply(int a, int b) {
        if (a==1){
            return a;
        } else {
                return b;

    }
}
}


Kan du prøve at forklare hvad opgaven helt præcist går ud på, hvordan jeg skal løse den og hvad fejlen er i den kode jeg har skrevet?
Avatar billede arne_v Ekspert
06. oktober 2012 - 13:04 #7
Hvis du smider de vaerdier ind i safeIntMultiply vil du se de resultater.
Avatar billede Javapain1 Nybegynder
06. oktober 2012 - 14:00 #8
mit output ser således ud:


ERR : 9 / 2 = 4  you = 9
ERR : 2 / 9 = 0  you = 2
ERR : -23 / -4 = 5  you = -23
0 out of 3 tests for division passed.
---------------------------
ERR : -10 * 2 = -20  you = 2
ERR : -7 * -2 = 14  you = -2
ERR : 1022333444 * 2 = 2044666888  you = 2
0 out of 3 tests for multiplication passed.


hvordan kan man få alle 3 test til at være passed i begge eksempler?
Avatar billede arne_v Ekspert
06. oktober 2012 - 14:42 #9
safeIntMultiply skal lave en gange operation (multiply)

det goer den ikke
Avatar billede Javapain1 Nybegynder
06. oktober 2012 - 16:30 #10
Hvad gør den så? hordan kan man få den til at lave en gange operation?
Avatar billede arne_v Ekspert
06. oktober 2012 - 17:14 #11
hvad ser det ud som om den goer:

public static int safeIntMultiply(int a, int b) {
        if (a==1){
            return a;
        } else {
                return b;

    }
Avatar billede Javapain1 Nybegynder
06. oktober 2012 - 17:17 #12
Jeg forstår ikke helt hvad du mener?
Avatar billede arne_v Ekspert
06. oktober 2012 - 17:25 #13
hvad goer det stykke kode?
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