Array,Konstruktor und 3 Widerstande

  • Themenstarter Themenstarter apollo280278
  • Beginndatum Beginndatum
Status
Nicht offen für weitere Antworten.
A

apollo280278

Gast
Hallo,
ich habe so eine Aufgabe gekriegt:
Ein el. Widerstand wird im einfachsten Fall durch seinen ohmischen Widerstandwert und seiner el. Leistung als Kenngrössen bestimmt.
Ich muss eine Klasse schreiben, welche als Objekt die Daten eines Widerstanes aufnehmen kann. In dieser Klasse sollen die Kenngrößen als Attribute gespeichert werden. Diese Attribute werden über den Konstruktor initialisierd.
Die Klasse enthält im weiteren für jedes Attribut eine get- und set- Methode.

dann muss ich eine Java-Anwendung schreiben, welche Werte für Widerstandswert und Leistung eines el. Widerstandes einliest und in dem Widerstand Objekt speichert. Dann muss ich auch 3 Widerstande in einem Array speichern.Dafür muss ich eine Schleife zum Einlesen der Kenngroßen benutzen.
Die Anwendung liest danach die Daten aus den Widerstand Objekten aus, um sie dann auf den Bildschirm auszugeben.

also ich weis so ungefähr was die won mir wollen
1. muss ich ein "class Widerstand" bauen oder
 
Code:
public class Widerstand
{
     private double ohm;

     private double leistung;

     public Widerstand(double neuOhm, double neuLeistung)
     {

     }

  //  + getter und setter

}
 
und so muss das aussehen oder?
Code:
import javax.swing.*;
class Widerstand
{
	private double w1;
	private double p1;
	public Widerstand(double neww1,double newp1){
		w1=neww1;
		p1=newp1;
		
	}
	
	
	double getW1(){
		return w1;
	}
	double getP1(){
		return p1;
	}
	void setW1(double w1){
		this.w1=w1;
	}
	void setP1(double p1){
		this.p1=p1;
	}
}
 
ne
ich habe new Prog Angefangen
also hier habe ich nur fur einen Widerstand gemacht.
Ich weis nicht wie ich jetzt Array richtig machen kann, für 3 Widerstande???
Code:
import javax.swing.*;
class Widerstand
{
	double w1;
	double p1;
	
	double getW1(){
		return w1;
	}
	double getP1(){
		return p1;
	}
	void setW1(double w1){
		this.w1=w1;
	}
	void setP1(double p1){
		this.p1=p1;
	}
}
class WiderstandApp1{
	public static void main(String args[]){
		double w1,p1;
		Widerstand w; //Dekloration der Variable
		w=new Widerstand();//Ezeugung des Objektes
		
		String w2=JOptionPane.showInputDialog(null,"Geben Sie der Widerstand ein");
		w1=Double.parseDouble(w2);
		
		String p2=JOptionPane.showInputDialog(null,"Geben Sie die Leistung ein");
		p1=Double.parseDouble(p2);
		w.setW1(w1);
		w.setP1(p1);
		JOptionPane.showMessageDialog(null,"Widerstand W1="+w.getW1()+"Ohm"+"\n"+"Leistung P1= "
		+w.getP1()+"Watt");
                System.exit(0);
	}
	}
Und ich habe problemm mit dem Konstruktor.
Hier denke ich, benutze ich Standart Konstruktor oder denke ich falsch
 
Wenn du deine Klasse Wiederstand so schreibst wie angegeben machst du Gebrauch vom Standardkonstruktor:

Code:
Wiederstand()
{
}

Du solltest aber auch einen allgemeinen Konstruktor definieren, wie von Bleiglanz gezeigt. Dann musst du den oben beschriebenen Standard-Konstruktor aber auch selbst noch definieren, wenn du auf ihn zugreifst (dann wird der nicht automatisch vom Compiler "zur Verfügung gestellt").

Wo ist das Prob beim Prog ?

Für 3 Widerstände musst du ganz normal ein Array anlegen:

Code:
import javax.swing.*;

class WiederstandApp1
{
	public static void main(String args[])
	{
      double w1,p1;
      
      Wiederstand[] w=new Wiederstand[3];
      w[0] = new Wiederstand();
      w[1] = new Wiederstand();
      w[2] = new Wiederstand();      
      
      String w2=JOptionPane.showInputDialog(null,"Geben Sie der Wiederstand ein");
      w1=Double.parseDouble(w2);
      
      String p2=JOptionPane.showInputDialog(null,"Geben Sie die Leistung ein");
      p1=Double.parseDouble(p2);
      w[0].setW1(w1);
      w[0].setP1(p1);
      JOptionPane.showMessageDialog(null,"Wiederstand W1="+w[0].getW1()+"Ohm"+"\n"+"Leistung P1= "
      +w[0].getP1()+"Watt");
                System.exit(0);
   }
}

Hier wurde nur für ein Objekt das ganze eingelesen, mit entspr. Schleife kannst das noch ändern..
 
Ich habe schon so wie du geschriebeb hast und anders versucht es zu machen
aber ich kriege immer ein Fehler von Compiler
C:\Java\Praktikum\Versuch5\WiderstandApp3.java:33: Widerstand(double,double) in Widerstand cannot be applied to ()

w[0] =new Widerstand();

^
wo ist Fehler?

Code:
class WiderstandApp3
{
   public static void main(String args[])
   {
      double w1,p1;
      
      
      Widerstand[] w=new Widerstand[3];
      w[0] =new Widerstand();
      w[1]=new Widerstand();
      w[2]=new Widerstand();    
     
      String w2=JOptionPane.showInputDialog(null,"Geben Sie der Widerstand ein");
      w1=Double.parseDouble(w2);
     
      String p2=JOptionPane.showInputDialog(null,"Geben Sie die Leistung ein");
      p1=Double.parseDouble(p2);
      w[0].setW1(w1);
      w[0].setP1(p1);
      JOptionPane.showMessageDialog(null,"Widerstand W1="+w[0].getW1()+"Ohm"+"\n"+"Leistung P1= "
      +w[0].getP1()+"Watt");
                System.exit(0);
            
   }
}
Also weiß ich nicht
auch für ein Widerstand funkzt nicht, ich denke ich bin zu blöd für....
 
Ah kann nicht sein wo habe ich "Wiederstand" geschrieben, das kann nur Tippfehler sein :lol: :lol: :lol: :lol:
 
Du nicht, aber mic_checker.... :noe:
Und Arrays sind wirklich ganz leicht zu erzeugen
(Datentyp ist ziemlich egal)

Code:
'Datentyp'[] 'Name'=new 'Datentyp'['Feldlaenge'];
'Name'['Position']=new 'Datentyp'('Parameter des Datentyps');

z.B.:

Code:
JButton[] MyB=new JButton[10];
for(int a=0;a<10;a++){
   MyB[a]=new JButton(a);
}
Damit erhaelst du 10 Buttons die mit 0-9 beschriftet sind....
 
Funktioniert aber nicht, weil JButtons einen Stringparameter erwarten :bae:
Korrekt wäre new JButton (String.valueOf (a)) 😉
 
Akimor hat gesagt.:
Du nicht, aber mic_checker.... .
Ich hab nur deswegen Wiederstand verwendet, um bei seinem Source zu bleiben. Ich weiss sehr wohl wie man Widerstand schreibt :!:

Nur wenn ich da jetzt was mit Widerstand gepostet hätte (die Klassen), dann wären weitere Postings gefolgt...

Btw. hier mal die Sources minimal abgeändert...

Code:
import javax.swing.*;

class WiderstandApp1
{
	public static void main(String args[])
	{
      double w1,p1;
      int num = 3;
      
      Widerstand[] w = new Widerstand[num];
           
      try
      {   
	      for(int i = 0;i < num;i++)
	      {   
		      String w2=JOptionPane.showInputDialog(null,"Geben Sie der Widerstand ein");
		      w1=Double.parseDouble(w2);      
		      String p2=JOptionPane.showInputDialog(null,"Geben Sie die Leistung ein");
		      p1=Double.parseDouble(p2);
		      
		      w[i] = new Widerstand(w1,p1);
		      
		      JOptionPane.showMessageDialog(null,"Widerstand W1="+w[i].getW1()+"Ohm"+"\n"+"Leistung P1= "
		      	+w[i].getP1()+"Watt");
		   }
		}
		catch(NumberFormatException nfe)
		{
			System.err.println("Ungültige Eingabe.");
			System.exit(-1);
		}	      
      
      System.exit(0);
   }
}

Code:
class Widerstand
{
   private double w1;
   private double p1;
   
   Widerstand()
   {
	   this(0,0);
	}
	
	Widerstand(double w1,double p1)
	{
		this.w1 = w1;
		this.p1 = p1;
	}
   
   double getW1()
   {
   	return w1;
   }
   
   double getP1()
   {
      return p1;
   }
   
   void setW1(double w1)
   {
      this.w1=w1;
   }
   
   void setP1(double p1)
   {
      this.p1=p1;
   }
}
 
mic_checker hat gesagt.:
Akimor hat gesagt.:
Du nicht, aber mic_checker.... .
Ich hab nur deswegen Wiederstand verwendet, um bei seinem Source zu bleiben. Ich weiss sehr wohl wie man Widerstand schreibt :!:

Nur wenn ich da jetzt was mit Widerstand gepostet hätte (die Klassen), dann wären weitere Postings gefolgt...
Du nicht, aber mic_checker.... noe.gif

Hallo Leute,
ich wollte nichts böses machen.
Ich habe einfech meine Fragen redaktiert und dass wars.

mic_checker & Illuvatar
😳 😳
sorry

to mac_checker

muss was immer in Klammern stehen wie heir
w = new Widerstand(w1,p1)
oder das steht nur dann, wenn ich in Konstruktor auch in Klammern was definiere???
 
Wenn du meinen Source verwendest kannst du den Konstruktor aufrufen wie im Programm gezeigt:

Code:
w[i] = new Widerstand(w1,p1);

Guck mal in die Widerstand.java - da sind zwei Konstruktoren definiert. Wenn du :

Code:
w[i] = new Widerstand();

aufrufst - dann werden die Werte mit 0 initialisiert.
Mit dem andern Konstruktor kannst du die Werte direkt auf best. Wert setzen....
 
ja gut danke.

Kann ich mein Programm 😳 so umschreiben, dass ich z.B. 3 Arrays reserwiere und Ausgabe nicht sofort mache,
sondern nachdem ich alle 3 Parametern für meine Widerstände eingebe und nur dann werden alle 3 ausgegeben.???
1. Reserwierung 3 Arrays=>Eingabe des Wertes(alle 3)=>Ausgabe(alle 3 zusammen)??
 
Klar, da musst du nur die Schleife umändern.

Les erst alle werte mit z.B. ner for ein, danach geb sie aus (da brauchst keine for , falls du sie alle auf einmal ausgeben willst).

probier einfach rum,ist nicht schwer.
 
ungefähr so
Code:
import javax.swing.*;
class Widerstand
{
   private double widerstand1;
   private double leistung1;
   
   
   
   Widerstand(double widerstand1,double leistung1)
   {
      this.widerstand1 = widerstand1;
      this.leistung1 = leistung1;
   }
   
   double getWiderstand1()
   {
      return widerstand1;
   }
   
   double getLeistung1()
   {
      return leistung1;
   }
   
   void setWiderstand1(double widerstand1)
   {
      this.widerstand1=widerstand1;
   }
   
   void setLeistung1(double leistung1)
   {
      this.leistung1=leistung1;
   }
} 
class WiderstandApp5
{
   public static void main(String args[])
   {
      double widerstand1,leistung1;
      int num = 3;
     
      Widerstand[] widerstand = new Widerstand[num];
           
      
         
         for(int i = 0;i < num;i++)
         {   
            String widerstand2=JOptionPane.showInputDialog(null,"Geben Sie der "
            +(i+1)+"en "+"Widerstand ein");
            widerstand1=Double.parseDouble(widerstand2);     
            String leistung2=JOptionPane.showInputDialog(null,"Geben Sie die "
            +(i+1)+"e "+"Leistung ein");
            leistung1=Double.parseDouble(leistung2);
           
            widerstand[i] = new Widerstand(widerstand1,leistung1);
          }
          for(int i=0;i<3;i++){
            JOptionPane.showMessageDialog(null,"Widerstand W"+(i+1)+"="+widerstand[i].getWiderstand1()+"Ohm"+"\n"+"Leistung P"+(i+1)+"= "
               +widerstand[i].getLeistung1()+"Watt");
      }
      
      
      System.exit(0);
   }
}

okey
danke für eure Hilfe
 
Code:
for(int i=0;i<3;i++){ 
...

Etwas allgemeiner:

Code:
for(int i=0;i<num;i++){ 
...

Kleinigkeit...ich weiss 😉

Ansonsten: Denk dran noch NumberFormatException abzufangen, da sonst das Parsen nicht funzt.
 
Hallo Leute,

ich habe nur Heute gemerkt, dass ich dei setMethode gar nicht benutze.
Was könnte ich ändern, damit diese Methode wird benutzt???

to mic_checker

habe mein Programm bisschen verändert:
Code:
import javax.swing.*;
class Widerstand
{
   private double widerstand1;
   private double leistung1;
   
   
   
   Widerstand(double widerstand1,double leistung1)
   {
      this.widerstand1 = widerstand1;
      this.leistung1 = leistung1;
   }
   
   double getWiderstand1()
   {
      return widerstand1;
   }
   
   double getLeistung1()
   {
      return leistung1;
   }
   
   void setWiderstand1(double widerstand1)
   {
      this.widerstand1=widerstand1;
   }
   
   void setLeistung1(double leistung1)
   {
      this.leistung1=leistung1;
   }
} 
class WiderstandApp5
{
   public static void main(String args[])
   {
      double widerstand1,leistung1;
      int num = 3;
     
      Widerstand[] widerstand = new Widerstand[num];
           
      
         
         for(int i = 0;i < num;i++)
         {   
            String widerstand2=JOptionPane.showInputDialog(null,"Geben Sie der "
            +(i+1)+"en "+"Widerstand ein");
            widerstand1=Double.parseDouble(widerstand2);     
            String leistung2=JOptionPane.showInputDialog(null,"Geben Sie die "
            +(i+1)+"e "+"Leistung ein");
            leistung1=Double.parseDouble(leistung2);
           
            widerstand[i] = new Widerstand(widerstand1,leistung1);
          }
          for(int i=0;i<3;i++)
          {
            JOptionPane.showMessageDialog(null,"Widerstand W"+(i+1)+"="+widerstand[i].getWiderstand1()+"Ohm"+"\n"+"Leistung P"+(i+1)+"= "
               +widerstand[i].getLeistung1()+"Watt");
      }
      
      
      System.exit(0);
   }
} 
//Apollo 24.01.2005

die setMethode brauche ich nur eigentlich, weil in Aufgabestellung die steht.
 
Du catchst ja immer noch keine Exceptions *arg* 😉

Wenn du unbedingt set benutzen willst, dann verwende den Konstruktor so:

Code:
widerstand[i] = new Widerstand(0,0);

Anschließend rufst du die beiden set Methoden auf und übergibst ihnen widerstand1, bzw. leistung1.

Ich finde die bisherige Variante (über Konstruktor) aber schöner 😉
 
Wie meinst du das?
einfach so:
Code:
widerstand[i] = new Widerstand(0,0); 
          widerstand.setWiderstand(widerstand1);
          widerstand.setLeistung(leistung);

aber geht nicht, weil widerstand gar nicht deff. ist.
Oder?
 
Code:
widerstand[i].setWiderstand(widerstand1);
widerstand[i].setLeistung(leistung);

Dann fehlt halt noch Exception Handling
 
Code:
   public static void main(String args[])
   {
      double widerstand1,leistung1;
      final int NUM = 3;
     
      Widerstand[] widerstand= new Widerstand[NUM];//liegt ein Array-Objekt
                                                    // mit "num" Komponenten
           
      
         
         for(int i = 0;i < NUM;i++)
         {   
            String widerstand2=JOptionPane.showInputDialog(null,"Geben Sie der "
            +(i+1)+"en "+"Widerstand ein");
            widerstand1=Double.parseDouble(widerstand2);     
            String leistung2=JOptionPane.showInputDialog(null,"Geben Sie die "
            +(i+1)+"e "+"Leistung ein");
            leistung1=Double.parseDouble(leistung2);
           
            widerstand[i] = new Widerstand(0,0);//uebergibt dem Konstruktor 2 Attribute 
            widerstand[i].setWiderstand(widerstand1);     <-----------------------------------------------
            widerstand[i].setLeistung(leistung1);              <-----------------------------------------------                                       
          }
          for(int i=0;i<3;i++)
          {
            JOptionPane.showMessageDialog(null,"Widerstand W"+(i+1)+"="+widerstand[i].getWiderstand1()+"Ohm"+"\n"+"Leistung P"+(i+1)+"= "
               +widerstand[i].getLeistung1()+"Watt");
      }
      
      
      System.exit(0);
   }
}

Meinst du so.
Aber geht nicht. :cry:
 
Vielleicht weil deine Methoden nicht setWiderstand und setLeistung heissen, sondern setWiderstand1 u. setLeistung1 ? 😉 Hab das gerad erst gesehen, weil du in dem Post vorher das geschrieben hast, ging ich davon aus das die so heissen.....oben steht aber ne 1 dahinner.
 
:autsch:
:applaus: :applaus: :applaus: :applaus: :applaus: :applaus: :applaus: :applaus: :applaus:
ich bin ein alter blinder Fox,
Danke
ich gehe schlafen.
chao
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben