Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Habe folgendens Programm zur Primfaktorenzerlegung geschrieben, allerdings bekomme ich bei Eingabe irgendeiner Zahl als Ausgabe immer nur Unsinn, nämlich 02020Null2Null etc.... woran könnte es liegen???
DANKE!
Code:
import java.awt.*;
import java.applet.Applet;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class zerleg extends Applet{
Label inputPrompt;
TextField input;
TextArea output;
String str;
public void init()
{
setLayout(new FlowLayout( FlowLayout.LEFT));
setFont(new Font("Arial", Font.PLAIN, 18));
setSize(500,500);
output = new TextArea(15, 30);
inputPrompt = new Label("Geben Sie eine Nummer ein: ");
input = new TextField(10);
input.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int nummer = Integer.parseInt( input.getText() ) ;
String str = findPrimeFactors( nummer ) ;
output.append(str) ;
}
}
);
add(inputPrompt);
add(input);
add(output);
}
public String findPrimeFactors(int number){
long number;
long teiler=2;
if (number<=1)
{
str="Nur ganze positive Zahlen eingeben!";
return str;
}
while (!isPrime(number)) {
if ((number%teiler == 0)&&(isPrime(teiler)))
{
str = str + "/n"+ teiler;
number=number/teiler;
}
else
teiler++;
}
return str;
}
public boolean isPrime(long zahl) {
if (number == 2){
return true;
}
if (number < 2){
return false;
}
long z=2;
while(z*z <= number){
if (number%z==0){
return false;
}
if (z==2){
z=3;
}else {
z= z+2;
}
}
return true;
}
}
Das hast du doch nie im leben compilierern können???
nimm den String str als Klassenvariable raus, initialisier ihn in jeder Methode neu mit
String str = "";
du kannst number nicht zweimal initialisieren
wenn du jetzt noch den letzten teiler an den string anhängst bevor du
zurückgibst sollte es eigentlich passen:
Code:
public String findPrimeFactors(long number){
long teiler=2;
if (number<=1)
{
str="Nur ganze positive Zahlen eingeben!";
return str;
}
while (!isPrime(number)) {
if ((number%teiler == 0)&&(isPrime(teiler)))
{
str = str + "/n"+ teiler;
number=number/teiler;
}
else
teiler++;
}
str = str+ "/n" + teiler;
return str;
}
Wenn du den String richtig mit String str = ""; initalisierst kann da kein null mehr rauskommen.
das /n machst du je selbst rein.
für einen zeilenumbruch muss man glaub ich sowas benutzen:
hab jetzt den string ganz einfach geschrieben, allerdings hängt sich das programm irgendwie auf, und es lässt sich kein textfeld mehr editieren und man kann auch keine zahl mehr eingeben..... :-(
Code:
input.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int nummer = Integer.parseInt( input.getText() ) ;
String str = findPrimeFactors( nummer ) ;
output.append(str) ;
}
}
);
// add labels and textfields to the applet
add(inputPrompt);
add(input);
add(output);
}
public String findPrimeFactors(long number){
long teiler=2;
if (number<=1)
{
str="Nur ganze positive Zahlen eingeben!";
return str;
}
while (!isPrime(number)) {
if ((number%teiler == 0)&&(isPrime(teiler)))
{
str = str+ " " + teiler;
number=number/teiler;
}
else
teiler++;
}
str = str+ " " + teiler;
return str;
}
// method which tests a number of beeing a prime
public boolean isPrime(long zahl){
if (zahl<2)
return false;
if (zahl == 2)
return true;
if (zahl % 2 == 0)
return false;
for (int i=3; i <=zahl; i+=2 )
if (zahl % i == 0)
return false;
return true;
}
}
ich versteh immer noch nicht wie du das überhaupt compilieren kannst.
so wie das jetzt da steht ist str eine klassenvariable weil er sonst in der
findPrimeFactors() methode nicht sichtbar ist.
Wie kann dann in Zeile 6 das hier stehen?
String str = findPrimeFactors( nummer ) ;
Das darf normal gar nicht gehen.
Schau dir das nochmal an und wenn du nichts findest poste den ganzen code nochmal
Also ich hab dir jetzt mal den ganzen Code gepostet, das Programm lässt sich fehlerfrei compilieren (mit Xemacs) und startet , wenn ich 4 eingebe, gibt er mir aus "null 2 2 " und dann friert quasi alles ein.....
Also,ich will, dass die Methode findPrimeFactors eine Zahl übergeben bekommt, dann halt die Operationen durchführt und die Zahlen in einem String zurückgibt.
Code:
import java.awt.*;
import java.applet.Applet;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
public class zerleg extends Applet{
// objects for the graphical user interface
Label inputPrompt;
TextField input;
TextArea output;
String str;
// setup the graphical user interface components
// and initialize labels and text fields
public void init()
{
// define font and applet size
setLayout(new FlowLayout( FlowLayout.LEFT));
setFont(new Font("Arial", Font.PLAIN, 18));
setSize(500,500);
// define labels and textfields
output = new TextArea(15, 30);
inputPrompt = new Label("Geben Sie eine Nummer ein: ");
input = new TextField(10);
input.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int nummer = Integer.parseInt( input.getText() ) ;
String str1 = findPrimeFactors( nummer ) ;
output.append(str1) ;
}
}
);
// add labels and textfields to the applet
add(inputPrompt);
add(input);
add(output);
}
public String findPrimeFactors(long number){
long teiler=2;
if (number<=1)
{
str="Nur ganze positive Zahlen eingeben!";
return str;
}
while (!isPrime(number)) {
if ((number%teiler == 0)&&(isPrime(teiler)))
{
str = str+ " " + teiler;
number=number/teiler;
}
else
teiler++;
}
str = str+ " " + teiler;
return str;
}
// method which tests a number of beeing a prime
public boolean isPrime(long zahl){
if (zahl<2)
return false;
if (zahl == 2)
return true;
if (zahl % 2 == 0)
return false;
for (int i=3; i <=zahl; i+=2 )
if (zahl % i == 0)
return false;
return true;
}
}
hattest eine endlosschleife drin.
geht jetzt, ist aber nicht schön.
das musst du selbst machen, ist bei dem programm aber auch nicht so dramatisch
Code:
import java.applet.Applet;
import java.awt.FlowLayout;
import java.awt.Font;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JLabel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class zerleg extends Applet{
// objects for the graphical user interface
JLabel inputPrompt;
JTextField input;
JTextArea output;
//String str;
// setup the graphical user interface components
// and initialize labels and text fields
public void init()
{
// define font and applet size
setLayout(new FlowLayout( FlowLayout.LEFT));
setFont(new Font("Arial", Font.PLAIN, 18));
setSize(500,500);
// define labels and textfields
output = new JTextArea(15, 30);
inputPrompt = new JLabel("Geben Sie eine Nummer ein: ");
input = new JTextField(10);
input.addActionListener( new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
int nummer = Integer.parseInt( input.getText() ) ;
String str1 = findPrimeFactors( nummer ) ;
output.setText(str1);
}
}
);
// add labels and textfields to the applet
add(inputPrompt);
add(input);
add(output);
}
public String findPrimeFactors(long number){
String str="";
long teiler=2;
if (number<=1)
{
str="Nur ganze positive Zahlen eingeben!";
return str;
}
if (isPrime(number))
return ""+number;
while (teiler<number)
{
if (isPrime(teiler)&&number%teiler==0)
{
str=str+" "+teiler;
number=number/teiler;
teiler=2;
}
else
teiler++;
}
return str+number;
}
// method which tests a number of beeing a prime
public boolean isPrime(long zahl)
{
for (int i=2;i<zahl;i++)
{
if (zahl%i==0)
return false;
}
return true;
}
}