Zahlenüberprüfung

Status
Nicht offen für weitere Antworten.

dklueh

Mitglied
Guten Morgen und Frohe Ostern!

Zuersteinmal:
Ich bin neu in diesem Forum, aber begeistert, wie viele Leute hier aktiv sind!

Zu meinem Problem:
Ich bin noch ein JAVA-Neuling und will folgendes Code-Fragment abändern,

Code:
public boolean testNumber(int number)
{
for (int i=2; i<number-1; i++)
{
if (number % i == 0)
{
return false;
}
}
return true;
}
damit er für alle Eingaben des möglichen Wertebereichs
das richtige Ergebnis liefert! Klappt aber irgendwie nicht richtig, wenn man gesamt R benutzen möchte...
Kann mir jemand sagen, wo der Fehler liegt?

Viele Grüße,
Daniel
 

mic_checker

Top Contributor
Das liegt schon daran das du ints benutzt, damit kannst du einen Teil der natürlichen und ganzen Zahlen darstellen, aber um die reellen Zahlen darzustellen reicht es nicht....
 
G

Guest

Gast
Kann es daran liegen, dass die Schleife in der Funktion bei kleinen bzw. negativen Zahlen nicht durchlaufen wird. Dadurch kann der false Part niemals erreicht werden?

Wenn ich damit richtig liege, wie kann ich das dann erreichen?
 

mic_checker

Top Contributor
Das ist natürlich noch ein anderer Grund:

Code:
for (int i=2; i<number-1; i++)
number muss >= 4 sein damit er in die Schleife geht, aber selbst wenn du gesamten Wertebereich von int abdeckst kannst du noch nicht ganz R darstellen!
 

dklueh

Mitglied
Jo, leuchtet mir ein...aber wie implementiert man es, dass z.B . der Def-Bereich [3..25] abgedeckt wird und der daraus resultierende Wertebereich das richtige Ergebnis liefert?
Prinzipiell geht es ja nur um die 3, weil kleiner als 4....
 

mic_checker

Top Contributor
Kommt noch drauf an was genau du machen willst. In der Schleife der Methode gibst du ja false zurück wenn number % i == 0 ist.
Wie soll das Programm bei i = 5 und number = 25 reagieren? Ausgeben das 5 ein Teiler von 25? Und dann weiter oder false zurückgeben?

Wenn du false zurückgeben willst lass es wie bisher, ansonsten ersetz die Anweisung durch eine Ausgabe.

Beide zahlen sollen wahrscheinlich beliebig aus dem Wertebereich bestimmbar sein oder?
 

dklueh

Mitglied
Ja genau, es soll dann ausgeben, dass 5 ein Teiler von 25 ist! Kann man dort dann einfach statt return false eine Ausgabe wie
Code:
System.out.println(number);
einfügen?
Oder wie muss das dann aussehen? Du weißt ja...bin absoluter Newbie und habe noch nicht viel durchblick... :oops:
 

mic_checker

Top Contributor
Klar , du kannst anstatt return false einfach eine Ausgabe schreiben, doch dann solltest du auch den Rückgabewert der Methode ändern, da du dann keinen booleschen Wert mehr zurück willst. In etwa so:

Code:
public void testNumber(int number) {
	for (int i=3; i<26; i++) {
		if (number % i == 0) {
			System.out.println(i+" ist ein Teiler von "+number);
		}
	}
}
wobei number != 0.
 

dklueh

Mitglied
Hmmm...ich habe gerade mal versucht, das Ganze zu kompilieren...ich bekomme immer Fehler...

Ich wollte mal versuchen, welche Ein und Ausgaben in [3..25] möglich sind...bzw. was ich für Zahlen erhalte, bei einer Eingabe von Zahlen des obigen Intervalls...
 

dklueh

Mitglied
Ah so...jo, das habe ich gemacht...aber bei NetBeans bekomme ich immer den Fehler:
Exception in thread "main"
 

Wildcard

Top Contributor
Die Exceptions haben recht eindeutige Namen. Da muss schon dazusagen welche Exception du bekommst!
 

dklueh

Mitglied
Hmmm...komisch ist nur, dass BlueJ mir keinen Fehler ausgibt, nur NetBeans...seltsam. Die Klasse sieht nun so aus:
Code:
/**
 * Write a description of class calculate here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public class calculate
{
public long lcd(long a, long b) 
{ 
// long statt int
  long ggt,kgv; 
  if (a>b){long h=a;a=b;b=h;} 
  long r; 
// lokal
  while (a>0) {r=b%a; b=a; a=r;} 
  ggt=b; 
  kgv=(a*b)/ggt; 
return kgv;  

} 

}

Habe ich schon wieder etwas falsch gemacht???
 

Wildcard

Top Contributor
Weil BlueJ ein lernProg ist das so etwas zulässt.
Du brauchst wie mic_checker geschrieben hat eine main Methode:

Code:
public class calculate 
{ 
public long lcd(long a, long b) 
{ 
// long statt int 
  long ggt,kgv; 
  if (a>b){long h=a;a=b;b=h;} 
  long r; 
// lokal 
  while (a>0) {r=b%a; b=a; a=r;} 
  ggt=b; 
  kgv=(a*b)/ggt; 
return kgv;  

} 

public static void main(String[] args)
{
    calculate c = new calculate();
    c.lcd(10l,50l);
}
}
oder lcd static machen und einfach aus der main aufrufen...
 

mic_checker

Top Contributor
Ich habe deine Methode lcd nicht mehr überprüft, aber wo ist noch das Prob?

Schreib ne eigene Klasse, da erzeugst du ein Objekt vom Typ deiner Klasse, dann rufst du die Methode auf mit den Testwerten....ganz einfach.

Btw. Klassennamen schreibt man groß.

edit: oder du machst es so wie wildcard gerade beschrieben hat - ist eigentlich jacke wie hose ;)
 

dklueh

Mitglied
So Leute...nun habe ich die Aufgabe wenigstens mit eurer Hilfe hinbekommen! Vielen Dank erstmal für die große Hilfe!!!
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben