# Variablen zwischen Methoden übergeben



## chorris (25. Mai 2009)

Hallo,
Wie kann ich variablen und deren Werte zwischen verschiedenen Methoden übergeben?
Hier ein Beispiel:
Ich will a und b und deren Werte von Methode eingabe() nach Methode ausgabe() übergeben.
Wie geht das? 

```
public class abc{

    public static void main(String args[]){
       eingabe();
       ausgabe();
    }

    public static void eingabe(){
       String a = "hallo";
       double b = 12.1;
    }

    public static void ausgabe(){
       System.out.println(a);
       System.out.println(b);
    }
}
```

Hier meckert der Compiler natürlich: 

```
abc.java:12: cannot find symbol                                         
symbol  : variable a
location: class abc
    System.out.println(a);
                       ^
abc.java:13: cannot find symbol
symbol  : variable b
location: class abc
    System.out.println(b);
                       ^
2 errors
```

mfg,


----------



## tfa (25. Mai 2009)

Gib deinen Methoden Parameter und übergib die Variablen dann als Argumente.


```
public void ausgabe(String a, double b) {....}
```


----------



## chorris (25. Mai 2009)

Danke für die Antwort.
Leider bekomme ich immer noch Fehler. Wie muss ich die Methoden in der Startmethode main() genau aufrufen?
Und ich habe gesehen, dass du "static" weggelassen hast. Warum?


----------



## xhi2018 (25. Mai 2009)

Hallo,

so vielleicht?
	
	
	
	





```
public class Abc {

	public static void main(String[] args) {
		eingabe();
	}
	
	public static void  eingabe() {
		String a = "hallo";
		double b = 12.1;
		ausgabe(a, b);
	}
	
	public static void ausgabe(String a, double b) {
		System.out.println(a);
		System.out.println(b);
	}
}
```
 Den Aufruf der Methode "eingabe()" in "main(...)" bzw. der Methode "ausgabe(...) in "eingabe()" hab ich nur deshalb aufgenommen, damit das Programm überhaupt etwas macht und die Variablen ausgegeben werden.

Wenn Du es "nur" compilieren willst, dann reicht es eigentlich die Zeile 

```
public static void ausgabe(){
...
```
nach 
	
	
	
	





```
public static void ausgabe(String a, double b) {
...
```
 zu ändern.


----------



## chorris (25. Mai 2009)

Danke, genau so wollt ichs haben. 

Noch eine kleine Frage:
Wenn ich die Methode ausgabe() in der Methode main() aufrufen (starten) will, muss ich die Variablen a und b dann auch in main() deklarieren? Oder gibt es da einen anderen Weg? Ich finde es nämlich am besten wenn alle Methoden aus main() aufgerufen werden. Sonst wirds meiner Meinung nach unübersichtlich.


----------



## xhi2018 (25. Mai 2009)

Hallo,
möglicherweise so in der Art:
	
	
	
	





```
public class Abc {

	private static String a;
	private static double b;
	
	public static void main(String[] args) {
		eingabe();
		ausgabe(a, b);
	}
	
	public static void  eingabe() {
		a = "hallo";
		b = 12.1;
	}
	
	public static void ausgabe(String a, double b) {
		System.out.println(a);
		System.out.println(b);
	}
}
```
Gruß & noch viel Spaß ...


----------



## ARadauer (25. Mai 2009)

du kannst sie einfach als static variablen der klasse defineren, 
du bewegst dich hier aber ziehmlich weit von der objektorientieren progrmmierung weg... das ist ziehmlich unschön was du hier aufführst...


```
public class Abc {
   public static String a;
   public static double b;
 
    public static void main(String[] args) {
        eingabe();
    }
    
    public static void  eingabe() {
        a = "hallo";
         b = 12.1;
        ausgabe();
    }
    
    public static void ausgabe() {
        System.out.println(a);
        System.out.println(b);
    }
}
```
das ist nicht sauber...


----------



## ARadauer (25. Mai 2009)

besser


```
public class Abc {
   private String a;
   private double b;

   public static void main(String[] args) {
      Abc test = new Abc();
      test.eingabe();
      test.ausgabe();
   }

   public void  eingabe() {
      a = "hallo";
      b = 12.1;
   }

   public void ausgabe() {
      System.out.println(a);
      System.out.println(b);
   }
}
```


----------



## Spacerat (25. Mai 2009)

In diesem Fall müssten die Variablen entweder Klassen-Member werden[highlight=java]class SomeClass
{
  private static String a;
  private static double b;

  public static void main(String ... args)
  {
    eingabe();
    ausgabe();
  }

  private static void eingabe()
  {
    a = "hallo";
    b = 12.1;
  }

  private static void ausgabe()
  {
    System.out.println(a);
    System.out.println(b);
  }
}[/highlight]oder man muss eine Objektliste (z.B. ein Array) als Argumente an die Methoden übergeben[highlight=java]class SomeOtherClass
{
  public static void main(String ... args)
  {
    ArrayList<Object> vars = new ArrayList<Object>();
    eingabe(vars);
    ausgabe(vars);
  }

  private static void eingabe(List<Object> args)
  {
    args.add("hallo");
    args.add(12.1); // Autoboxing -> Double
  }

  private static void ausgabe(List<Object> args)
  {
    Iterator<Object> i = args.iterator();
    while(i.hasNext()) System.out.println(i.next());
  }
}[/highlight]
@Edit: Ok, mein erstes Beispiel kam wohl ein wenig spät...


----------



## chorris (25. Mai 2009)

danke für die Antworten


----------

