# Bitte Bitte Hilfe!!



## Redridinghood (23. Dez 2011)

Hallo,
ich muss bis montag noch eine letzte Hausaufgabe für Informatik beenden.

Wir müssen für Java ein Barcode programm schreiben.

Und zwar  es sollen 13 Zahlen von dem Nutzer eingegeben werden. 
also z.b. x1=2 x2=9 x3=5 x4=7 x5=8 x6=1 x7=0 x8=3 x9=3 x10=5 x11=7 x12=9 x13=5

Dann sollen die ungraden x'zahlen also x1, x3, x5 x7, x9 und x11 addiert und mit 3 multipliziert werden.

x2,x4,x6,x8,x10 und x12 werden addiert. 

Dann werden die beiden Ergebnisse addiert und mit mod10 geteilt. 
das ergebmis was man dann bekommt soll x13 sein. Die check digit.

kann mir bitte jemand helfen. Ich schaffe es nicht. Weder zeitlich noch weiß ich wo ich anfagen soll....


----------



## ARadauer (23. Dez 2011)

Redridinghood hat gesagt.:


> noch weiß ich wo ich anfagen soll....


Beim Einlesen von Zahlen...


----------



## Landei (23. Dez 2011)

Das würde ich gerade *nicht *machen. Am besten ist es, wenn du schon ein Beispiel mit Lösung gegeben hast, ansonsten rechne eines per Hand durch. Dann schreibe das Programm mit diesen Zahlen fest einprogrammiert, und versuche es, zum Laufen zu bringen. Wenn es mit diesen Werten korrekt läuft, wäre es eine gute Idee, weitere Beispiele durchzuprobieren. Dann, und erst dann kümmere dich um die Eingabe. 

Der Grund ist einfach: Solange der Hauptteil noch irgendwo falsch ist, musst du das Programm öfters laufen lassen, und wenn du dann jedesmal die Zahlen von Hand eintippst, dauert das zu lange und du vermachst dich schnell einmal.


----------



## Redridinghood (23. Dez 2011)

Okay ich habe bis jetzt das hier



```
import java.util.Scanner;
public class barcode {
   public static void main (String [] args){
   
   Scanner klavye=new Scanner(System.in); 
   double [] barcode = new double[13];
   System.out.print("barcode=");
   double Barcode;
   Barcoderakamlari=klavye.nextDouble();
  
  }
}
```
 

Ist das denn soweit richtig? Ich wollte das das programm hier sagt das 13 zahlen eingegeben werden sollen.

Ja ich habe schon ein Beispiel mit der Hand ausgerechnet aber wir sollen keine fetsen Zahlen benutzen...


----------



## Marcinek (23. Dez 2011)

Was passiert, wenn du das ausführtst? 

Erhälst du das korrekte Ergebnis?


----------



## ARadauer (23. Dez 2011)

nein nicht richtig...

So ich bin weg... Frohe Weihnachten..

bis Montag ;-)


----------



## Redridinghood (23. Dez 2011)

ja ich habe es geändert.

Er fragt mich jetzt 13 mal nach den 13 verschiedenen Barcode zahlen.


```
import java.util.* ;
public class  barcode{
  
  public static void main (String [] args) {
  
  Scanner klavye = new Scanner (System.in);
  int barcode [] = new int [13];

  for (int i=0; i < barcode.length; i++) {
  
  System.out.println("barcode Ziffern");
  barcode [i] = klavye.nextInt();

  }
}
//}
```

Wie schaffe ich es jetzt das er die 1,3,5,7,9 Zahl addiert und mit 3 multipliziert?

danke


----------



## Marcinek (23. Dez 2011)

Auf ein ArrayElement kannst du mit x[1..2] zugreifen.

P.S., da Ardauer schon weg ist übernehme ich das mal.

Siehst du nicht diesen Hinweis beim posten?

Java™ Quelltext ist bitte in 
	
	
	
	





```
-Tags zu schreiben: [code=Java]hier Java Code einfügen
```

Da ist auch noch ein Ausrufezeichen davor.


----------



## Landei (23. Dez 2011)

Nur so am Rande: Java™ Quelltext ist bitte in 
	
	
	
	





```
-Tags zu schreiben: [noparse][code=Java]hier Java Code einfügen
```
[/noparse]

Wie man mit einer Schleife alle Elemente eines Arrays durchgeht, weisst du ja schon: [c]for (int i=0; i < barcode.length; i++)[/c] Das [c]i++[/c] ist für die Erhöhung der Schleifenvariable um 1 gedacht, man könnte aber auch [c]i += 1[/c] oder [c]i = i + 1[/c] schreiben. Wie könnte man wohl erreichen, dass die Schleife immer eine Zahl überspringt? Und wie kann man erreichen, dass [c]i[/c] nicht bei 0, sondern bei 1 anfängt? Wenn du das weißt, kannst du die Aufgabe lösen.


----------



## jboesche (24. Dez 2011)

? 13 zahlen sollen vom Nutzer willkürlich eingeben werden dann werden die ersten nur die ungraden x zahlen außer die x13 addier und mal drei genommen und die geraden werden addiert und dann wird das Produkt und die Summe zusammen addiert und Mod 10 genommen was dann x13 ergibt? Ähm da ist irgendein fehler. Die Zahlen haben gar kein bezug zu x13.


x13 =(((x1+x3+x5+x7+x9+x11)*3) + (x2+x4+x6+x8+x10+x12)) % 10)

wären die eingaben 2,3,5,6,7,2,1,5,3,3,5,7,9,9

wäre x13 nach zuweisung 9 das ergebnis von der berechnung aber 5.

oder hab ich da was falsch verstanden?


----------



## Kiri (24. Dez 2011)

So, weil wir nun Weihnachten haben, schenke ich dir einen Code der funktioniert. Verbesserungen sind natürlich immer möglich! Frohe Weihnachten!!!


```
import java.util.Scanner;

/**
 *
 * @author Kiri
 */
public class Barcode {
    public static void main (String [] args){
        int sumGerade, sumUngerade, ergPruefsumme;
        String barcode;
        boolean checkOK = false;
        int[] barcodeArr;
        barcode = eingabe();
        barcodeArr = setBarcodeArr(barcode);
        sumGerade = berechneGerade(barcodeArr);
        sumUngerade = berechneUngerade(barcodeArr);
        ergPruefsumme = berechnePruefsumme(sumGerade, sumUngerade);
//        System.out.println("gerade: " + sumGerade);
//        System.out.println("ungerade: " + sumUngerade);
//        System.out.println("Pruefsumme " + ergPruefsumme);
        checkOK = checkBarcode(ergPruefsumme, barcodeArr);
        if(checkOK){
            System.out.println("Der Barcode ist OK!");
        }else{
            System.out.println("Der Barcode ist falsch!");
        }
    }
    
    public static String eingabe(){
        String barcode = "";
        boolean eingabe13 = false;
        Scanner klavye = new Scanner(System.in);
        while(!eingabe13){
            System.out.println("Bitte geben Sie einen 13-stelligen Barcode ein:");
            barcode = klavye.next();
            if(barcode.length() == 13){
                eingabe13 = true;
            }else{
                System.out.println("Deine Eingabe (" + barcode + ") hat keine 13 Zeichen!");
            }
        }
        return barcode;
    }
    
    public static int[] setBarcodeArr(String barcode){
        int[] barcodeArr = new int[13];
        for(int i = 0; i < 13; i++){
            barcodeArr[i] = Integer.parseInt(barcode.substring(i, i+1));
        }
        return barcodeArr;
    }
    
    public static int berechneGerade(int[] arr)
    {//x2,x4,x6,x8,x10 und x12 werden addiert. 
        int sum = 0;
        for(int i = 1; i < 12; i+=2){
           sum += arr[i]; 
        }
        return sum;
    }
    
    public static int berechneUngerade(int[] arr){
        /*Dann sollen die ungraden x'zahlen 
        also x1, x3, x5 x7, x9 und x11 addiert und mit 3 multipliziert werden.*/
        int sum = 0;
        for(int i = 0; i < 11; i+=2){
           sum += arr[i]; 
        }
        return sum * 3;
    }
    
    public static int berechnePruefsumme(int a, int b){/*Dann werden die beiden Ergebnisse addiert und mit mod10 geteilt.*/
        int sum;
        sum = (a+b)%10;
        return sum;
    }
    
    public static boolean checkBarcode(int a, int[] arr){
        /*das ergebmis was man dann bekommt soll x13 sein. Die check digit.*/   
        boolean checkOK = false;
        if(a == arr[12]){
            checkOK = true;
        }
        return checkOK;
    }
}
```

Einfach nach Aufforderung 13-stelligen Barcode eingeben!

Barcodebeispiele:
2957810335799 --> OK
2957810335795 --> nicht OK


----------



## Kiri (24. Dez 2011)

Habe noch ne Kleinigkeit geändert, damit falsche Benutzereingaben abgefangen werden!


```
import java.util.Scanner;

public class Barcode {
    public static void main (String [] args){
        int sumGerade, sumUngerade, ergPruefsumme;
        String barcode;
        boolean checkOK = false;
        int[] barcodeArr;
        barcode = eingabe();
        barcodeArr = setBarcodeArr(barcode);
        sumGerade = berechneGerade(barcodeArr);
        sumUngerade = berechneUngerade(barcodeArr);
        ergPruefsumme = berechnePruefsumme(sumGerade, sumUngerade);
        checkOK = checkBarcode(ergPruefsumme, barcodeArr);
        ausgabe(checkOK);
    }
    
    public static String eingabe(){
        String barcode = "";
        boolean eingabe13 = false;
        Scanner klavye = new Scanner(System.in);
        while(!eingabe13){
            System.out.println("Bitte geben Sie einen 13-stelligen Barcode ein:");
            barcode = klavye.next();
            if(barcode.length() == 13){
                try{
                long a = Long.parseLong(barcode);
                eingabe13 = true;
                }catch(Exception e){
                    System.out.println("Deine Eingabe (" + barcode + ") enthält nicht nur Ziffern!");
                }
            }else{
                System.out.println("Deine Eingabe (" + barcode + ") besteht nicht aus 13 Ziffern!");
            }
        }
        return barcode;
    }
    
    public static int[] setBarcodeArr(String barcode){
        int[] barcodeArr = new int[13];
        for(int i = 0; i < 13; i++){
            barcodeArr[i] = Integer.parseInt(barcode.substring(i, i+1));
        }
        return barcodeArr;
    }
    
    public static int berechneGerade(int[] arr)
    {//x2,x4,x6,x8,x10 und x12 werden addiert. 
        int sum = 0;
        for(int i = 1; i < 12; i+=2){
           sum += arr[i]; 
        }
        return sum;
    }
    
    public static int berechneUngerade(int[] arr){
        /*Dann sollen die ungraden x'zahlen 
        also x1, x3, x5 x7, x9 und x11 addiert und mit 3 multipliziert werden.*/
        int sum = 0;
        for(int i = 0; i < 11; i+=2){
           sum += arr[i]; 
        }
        return sum * 3;
    }
    
    public static int berechnePruefsumme(int a, int b){//Dann werden die beiden Ergebnisse addiert und mit mod10 geteilt.
        int sum;
        sum = (a+b)%10;
        return sum;
    }
    
    public static boolean checkBarcode(int a, int[] arr){
        //das ergebmis was man dann bekommt soll x13 sein. Die check digit.   
        boolean checkOK = false;
        if(a == arr[12]){
            checkOK = true;
        }
        return checkOK;
    }
    
    public static void ausgabe(boolean check){
        if(check){
            System.out.println("Der Barcode ist OK!");
        }else{
            System.out.println("Der Barcode ist falsch!");
        }
    }
}
```

Barcodebeispiele:
2957810335799 --> OK
2957810335795 --> nicht OK


----------



## Redridinghood (28. Dez 2011)

@Kiri
Danke, danke, danke dankeeeee!! Du hast mich gerettet. 

Ein bisschen zu Spät für Weihnachtswünsche, aebr ich wünsche einen Guten Rutsch )


----------



## Redridinghood (28. Dez 2011)

@Kiri
danke danke danke dankeeeeeeeeeee
Du hast mich gerettet!!
Ein bisschen zu spät für Weihnachtswünsche, aber ich wünsche einen Guten Rutsch )


----------

