Brauche Hilfe bei Modulo (Übungsaufgabe)

der-andyman

Mitglied
Hi Leute, bin seit 3 Tagen im Informatik Vorkurs an der Uni und heute war die erste Übung zu den Vorlesungen und wir habe eine Aufgabe gestellt bekommen, die ich schlicht nicht lösen kann.
Wir sollen gucken, ob eine bestimmte Anzahl an Zahlen, die in einem Array stehen, durch 5 teilbar sind. Also wenn auch nur eine Zahl bei "Zahl % 5 == 0" ist, sollte das Programm ein "true" ausspucken, wenn nicht, ein "false".
Mein Problem ist jedoch, dass er immer true sagt, auch wenn es eigentlich ungleich 0 ist, also einen Rest hat. Könnt ihr da bitte mal drüberschauen?
Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fuenfteiler;

/**
 *
 * @author Kivanc
 */
public class Fuenfteiler {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        float[] a = {11,2,4,13,16,9,8,17,32,68};
        float n = a.length;
        int i = 0;
        String b = null;
        boolean t;
        while (i < n ){
            if (a[i]%5 == 0)
                t=true;
            if (a[i]%5 != 0)
                t=false;
            //t= (a[i]%5 == 0);
            if (t=true)
                b = "Ja";
            if (t=false) 
                b= "Nein";
            i = i+1;
            System.out.println("Die Zahl an Stelle " +(i) +" ist:" +" "+a[i-1]);
        }   
        System.out.println();
        System.out.println("Ist mindestens eine davon durch 5 teilbar?: ");
        System.out.println(b);
    }
}
 
Zuletzt bearbeitet:
Java:
if (t = true) {

Hier muss ein doppeltes Gleichheitszeichen für einen Vergleich stehen.
Da t aber schon ein boolscher Wert ist kannst du vereinfacht folgendes schreiben:

Java:
if (t) {
 
Zuletzt bearbeitet:
Ich habe es nun wie folgt geändert, klappt immer noch nicht 🙁 Er sagt nun immer "Nein"

Java:
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fuenfteiler;

/**
 *
 * @author Kivanc
 */
public class Fuenfteiler {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        int[] a = {10,2,4,13,16,9,8,17,32,68};
        int n = a.length;
        int i = 0;
        String b = null;
        boolean t;
        while (i < n ){
            if (a[i]%5 == 0)
                t=true;
            else
                t=false;
            //t= (a[i]%5 == 0);
            if (t) 
                b = "Ja";
            if (t ==false) 
                b= "Nein";
            i = i+1;
            System.out.println("Die Zahl an Stelle " +(i) +" ist:" +" "+a[i-1]);
        }   
        System.out.println();
        System.out.println("Ist mindestens eine davon durch 5 teilbar?: ");
        System.out.println(b);
    }
}

PS: Ich bin echt ein totaler angänger, hatte noch nie Java, nur Delphi!
 
Zuletzt bearbeitet:
Das nur Nein kommt liegt daran, dass du b in jeder Iteration überschreibst.
Nach der 10 steht b auf Ja, aber nach der 2 wieder auf Nein.
Du musst die Schleife also nach einen Ja durchbrechen.
Dies geht mit break.

Du kannst das deutlich einfacher in einer Methode lösen:

Java:
public static String fuenf(int[] feld) {
  for (i=0;i<feld.length;i++) {
    if (feld[i] %5 == 0)
     return "Ja";
  }
  return "Nein";
}

public static void main(String[] args) {
   int[] a = {10,2,4,13,16,9,8,17,32,68};
   System.out.println(fuenf(a));
 
Das nur Nein kommt liegt daran, dass du b in jeder Iteration überschreibst.
Nach der 10 steht b auf Ja, aber nach der 2 wieder auf Nein.
Du musst die Schleife also nach einen Ja durchbrechen.
Dies geht mit break.

Du kannst das deutlich einfacher in einer Methode lösen:

Java:
public static String fuenf(int[] feld) {
  for (i=0;i<feld.length;i++) {
    if (feld[i] %5 == 0)
     return "Ja";
  }
  return "Nein";
}

public static void main(String[] args) {
   int[] a = {10,2,4,13,16,9,8,17,32,68};
   System.out.println(fuenf(a));

Du schreibst das zwar, aber ich weiß garnicht, was diese Begriffe alles bedeuten ... und wo genau soll dieses
Java:
public static String fuenf(int[] feld) {
  for (i=0;i<feld.length;i++) {
    if (feld[i] %5 == 0)
     return "Ja";
  }
  return "Nein";
}
stehen?

Ich habe jetzt eine für mich akzeptable lösung gefunden mit:
Java:
    public static void main(String[] args) {
        // TODO code application logic here
        int[] a = {10,2,4,13,16,9,8,17,32,68};
        int n = a.length;
        int i = 0;
        String b = null;
        boolean t;
        while (i < n ){
            if (a[i]%5 == 0)
                t=true;
            else
                t=false;
            //t= (a[i]%5 == 0);
            if (t)
                b = "Ja";
            if (t ==false) 
                b= "Nein";
            i = i+1;
            System.out.println("Die Zahl an Stelle " +(i) +" ist:" +" "+a[i-1]);
            System.out.println("Ist diese Zahl durch 5 teilbar?:" +" "+b);
        }   
        System.out.println();
        System.out.println("Ist mindestens eine davon durch 5 teilbar?: ");
        System.out.println(b);
    }
}

Ich danke vielmals für die Unterstützung!
 
Java:
Die Zahl an Stelle 1 ist: 10
Ist diese Zahl durch 5 teilbar?: Ja
Die Zahl an Stelle 2 ist: 2
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 3 ist: 4
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 4 ist: 13
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 5 ist: 16
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 6 ist: 9
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 7 ist: 8
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 8 ist: 17
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 9 ist: 32
Ist diese Zahl durch 5 teilbar?: Nein
Die Zahl an Stelle 10 ist: 68
Ist diese Zahl durch 5 teilbar?: Nein

Ist mindestens eine davon durch 5 teilbar?: 
Nein

dir ist aber schon klar, dass da was falsches bei rauskommt oder?
 
Eine einfache Lösung wäre folgende:

Java:
	public static void main(String[] args) {
		// TODO code application logic here
		int[] a = { 10, 2, 4, 13, 16, 9, 8, 17, 32, 68 };
		int n = a.length;
		int i = 0;
		boolean t;
		boolean b = false;
		while (i < n) {
			if (a[i] % 5 == 0)
				t = true;
			else
				t = false;
			// t= (a[i]%5 == 0);
			if (!b)
				b = t;

			i = i + 1;
			System.out.println("Die Zahl an Stelle " + (i) + " ist:" + " "
					+ a[i - 1]);
			System.out.println("Ist diese Zahl durch 5 teilbar?:" + " " + b);
		}
		System.out.println();
		System.out.println("Ist mindestens eine davon durch 5 teilbar?: ");
		System.out.println(b ? "Ja" : "Nein");
	}
 
Leute um die schafft mich ;-)

Ich weiß, dass es nicht direkt erfüllt ist, aber ich finde es so eigentlich besser... Außerdem weiß ich ja jetzt, wo mein Fehler lag, das Programm aus der eigentlichen Aufgabenstellung kann ich auch selber machen, kein Problem mehr 🙂
 
Eine einfache Lösung wäre folgende:

Java:
	public static void main(String[] args) {
		// TODO code application logic here
		int[] a = { 10, 2, 4, 13, 16, 9, 8, 17, 32, 68 };
		int n = a.length;
		int i = 0;
		boolean t;
		boolean b = false;
		while (i < n) {
			if (a[i] % 5 == 0)
				t = true;
			else
				t = false;
			// t= (a[i]%5 == 0);
			if (!b)
				b = t;

			i = i + 1;
			System.out.println("Die Zahl an Stelle " + (i) + " ist:" + " "
					+ a[i - 1]);
			System.out.println("Ist diese Zahl durch 5 teilbar?:" + " " + b);
		}
		System.out.println();
		System.out.println("Ist mindestens eine davon durch 5 teilbar?: ");
		System.out.println(b ? "Ja" : "Nein");
	}

Ich habe das jetzt mal so gemacht, aber was genau bewirkt die letzte Zeile?
Java:
System.out.println(b ? "Ja" : "Nein");
??
Also, warum gibt er damit die richtige Lösung, könntest du das bitte kurz erläutern?

Java:
if (!b)
    b = t;
habe ich verstanden 😀
 
Zuletzt bearbeitet:
Also ist dieses ? eine Frage nach "If b == true" ... hm, kompliziert 😀

Und eine Sache noch:
Das nur Nein kommt liegt daran, dass du b in jeder Iteration überschreibst.
Nach der 10 steht b auf Ja, aber nach der 2 wieder auf Nein.
Du musst die Schleife also nach einen Ja durchbrechen.
Dies geht mit break.

Du kannst das deutlich einfacher in einer Methode lösen:

Java:
public static String fuenf(int[] feld) {
  for (i=0;i<feld.length;i++) {
    if (feld[i] %5 == 0)
     return "Ja";
  }
  return "Nein";
}

public static void main(String[] args) {
   int[] a = {10,2,4,13,16,9,8,17,32,68};
   System.out.println(fuenf(a));
Könnte mir das nochmal einer kurz erklären? Ich verstehe wirklich garnicht, warum das klappt... ist das ne Rekursion?
 
hast den Code überhaupt mal ausprobiert? er funktioniert gar nicht, kein Plan was so ein Schmarn soll, aber er prüft immer nur den ersten Wert und bricht dann natürlich die Schleife mit dem return ab.
 

Zurück
Oben