# Anfänger Problem: SimpleIO.readint()



## joule (30. Sep 2010)

Schönen guten Abend,

zunächst möchte ich sagen, dass ich mit Programmieren und mit Java bis vor 2 Tagen noch nie was am Hut hatte, daher mein Kenntnisstand noch sehr sehr gering ist  und daher Antworten bitte möglichst simpel verfassen! 

hier der quellcode um den es geht:


```
public class Division
{
    public static void main(String args[])
    {
        int zahl;
        int erg;
        
        System.out.println("Ganze Zahl eingeben:");
        zahl = SimpleIO.readInt();
        erg = zahl / (zahl-5);
        System.out.println(erg);
        
    }
}
```

Wenn ich das compile (sagt man das so? =]) bekomme ich in der Zeile:

[JAVA=9]zahl = SimpleIO.readInt();[/code]

die Fehlermeldung: non-static method readInt() cannot be referenced from a static context


Ist bestimmt irgendwas triviales, aber ich erkenne sowas leider noch nicht, daher bitte ich euch um eure aufklärung!


----------



## Haave (30. Sep 2010)

So wie es aussieht, ist die Methode readInt() nicht static, du brauchst also eine Instanz der Klasse SimpleIO (was auch immer das für eine Klasse ist), um die Methode benutzen zu können. Mach mal folgendes:

```
SimpleIO eingabedings = new SimpleIO(); //erzeugt eine Instanz der Klasse SimpleIO
zahl = eingabedings.readInt(); //die Instanz benutzt die Methode
```


----------



## nrg (30. Sep 2010)

readInt ist keine statische Methode. D.h. du musst erst eine Instanz von der Klasse SimpleIO erzeugen, um diese Methode auszuführen. Nachdem man nicht weiß, was das für eine Klasse ist, kann man den Code imho nur vermuten:

SimpleIO io = new SimpleIO();
zahl = io.readInt();

Könnte natürlich auch sein, dass SimpleIO keinen parameterlosen Konstruktor besitzt. Aber das wirst du dann schon sehen .

Kannst es aber auch lassen und Scanner oder einen BufferedReader instanziiert mit einem InputStreamReader nehmen.


----------



## joule (30. Sep 2010)

nrg hat gesagt.:


> readInt ist keine statische Methode. D.h. du musst erst eine Instanz von der Klasse SimpleIO erzeugen, um diese Methode auszuführen. Nachdem man nicht weiß, was das für eine Klasse ist, kann man den Code imho nur vermuten


 den quellcode von SimpleIO habe ich, und habe die datei SimpleIO.java in mein verzeichnis, wo der quellcode des oben aufgeführten programms ist kopiert - war das richtig? :autsch:


----------



## Haave (30. Sep 2010)

joule hat gesagt.:


> den quellcode von SimpleIO habe ich, und habe die datei SimpleIO.java in mein verzeichnis, wo der quellcode des oben aufgeführten programms ist kopiert - war das richtig? :autsch:


Das sollte stimmen.  (auch wenn ich nicht ganz verstehe, warum man eine Instanz von dieser Klasse erzeugen muss, wenn das Ding doch "simple" sein soll)


----------



## joule (30. Sep 2010)

hm, kriege leider immer noch den selben fehler


----------



## nrg (30. Sep 2010)

zeig mal deinen jetzigen code und die Klasse SimpleIO (zumindest die Konstruktoren). so kann man nur raten


----------



## joule (30. Sep 2010)

das ist der quellcode von SimpleIO:


```
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;

public final class SimpleIO {
    /* BufferedReader fuer den InputStream aus der */
    /* der Konsole, verwendet fuer die Eingabe */
    private static BufferedReader konsole = new BufferedReader(
            new InputStreamReader(System.in));

    /* Konstanten fuer Fehlermeldungen */
    private static final String IOError = "FEHLER: bei der Eingabe!";
    private static final String ChError = "FEHLER: leere Char-Eingabe!";
    private static final String NFError = "FEHLER: keine Zahl oder Zahl im falschen Format eingegeben!";

    /* allgemeine Methoden */

    public static int[] getRandomIntArray() {
        Random r = new Random();
        int[] randomArray = new int[(r.nextInt() % 10)];
        for (int i = 0; i < randomArray.length; i++) {
            randomArray[i] = (r.nextInt() % 100);
        }
        return randomArray;
    }

    public static int getInt() {
        /* Liest einen Int-Wert von der Konsole ein und gibt */
        /* diesen an die aufrufende Klasse/Methode zurueck */
        /* Im Falle einer fehlerhaften Eingabe wird die Zahl 0 */
        /* zurueckgeliefert und eine Fehlermeldung ausgegeben. */

        int zahl = 0;
        try {
            zahl = java.lang.Integer.parseInt(konsole.readLine());
        }
        // Faengt die IO-Fehler der Methode readLine() auf
        catch (IOException e) {
            System.out.println(IOError);
        }
        // Faengt die Exception der Methode parseInt auf;
        // es wurden keine als Integer interpretierbaren
        // Werte eingegeben
        catch (NumberFormatException e) {
            System.out.println(NFError);
        }
        return zahl;
    }

    public static double getDouble() {
        /* Liest einen Double-Wert von der Konsole ein und gibt */
        /* diesen an die aufrufende Klasse/Methode zurueck */
        /* Im Falle einer fehlerhaften Eingabe wird die Zahl 0 */
        /* zurueckgeliefert und eine Fehlermeldung ausgegeben. */

        double zahl = 0;
        try {
            zahl = java.lang.Double.parseDouble(konsole.readLine());
        }
        // Faengt die IO-Fehler der Methode readLine() auf
        catch (IOException e) {
            System.out.println(IOError);
        }
        // Faengt die Exception der Methode parseInt auf;
        // es wurden keine als Double interpretierbaren
        // Werte eingegeben
        catch (NumberFormatException e) {
            System.out.println(NFError);
        }
        return zahl;

    }

    public static String getString() {
        /* Liest einen String von der Konsole ein und gibt */
        /* diesen an die aufrufende Klasse/Methode zurueck. */
        /* Im Falle einer fehlerhaften Eingabe, wird der */
        /* leere String zurueck gegeben. */

        String zeile = "";
        try {
            zeile = konsole.readLine();
        }
        // Faengt die IO-Fehler der Methode readLine() auf
        catch (IOException e) {
            System.out.println(IOError);
        }
        return zeile;
    }

    public static char getChar() {
        /* Liest ein Character von der Konsole ein und gibt */
        /* diesen an die aufrufende Klasse/Methode zurueck. */
        /* Im Falle einer fehlerhaften Eingabe wird das leere */
        /* Character zurueckgegeben. */
        /* Wird mehr, als nur ein Zeichen eingegeben, so wird */
        /* nur das erste Zeichen beruecksichtigt. */

        char zeichen = '\u0000';
        String zeile = "";
        try {
            zeile = konsole.readLine();
            if (zeile.length() > 0) {
                zeichen = zeile.charAt(0);
            } else {
                System.out.println(ChError);
            }
        }
        // Faengt die IO-Fehler der Methode readLine() auf
        catch (IOException e) {
            System.out.println(IOError);
        }
        return zeichen;
    }
}
```


----------



## nrg (30. Sep 2010)

die Klasse besitzt die Methode readInt() nicht... Sollte wohl getInt() heissen.

Allerdings ist dann deine Fehlermeldung widersprüchlich. Müsste dann eher sowas in der Art sein: "cannot find symbol..."


----------



## joule (30. Sep 2010)

wenn ich statt readInt() getInt() schreibe 
kommt die fehlermeldung cannot find symbol >.<


----------



## Haave (30. Sep 2010)

joule hat gesagt.:


> wenn ich statt readInt() getInt() schreibe
> kommt die fehlermeldung cannot find symbol >.<


Zeig bitte mal deinen jetzigen Quelltext. Hast du nun nur 
	
	
	
	





```
getInt()
```
 geschrieben oder wie oben beschrieben mit einem Objekt und Punktoperator (also 
	
	
	
	





```
eingabedings.getInt()
```
)?

Edit: Sorry, hab überlesen, dass getInt() static ist. Hier sollte also eigentlich 
	
	
	
	





```
SimpleIO.getInt()
```
  funktionieren! :bahnhof:


----------



## nrg (30. Sep 2010)

ja.. das muss funktionieren .

hast du sicher die selbe Klasse, die du uns auch gepostet hast? Anhand der Fehlermeldungen kann das nämlich garnicht sein.


----------



## joule (1. Okt 2010)

mein code sieht jetzt so aus 

```
public class Division
{
    public static void main(String args[])
    {
        int zahl;
        int erg;
        
        System.out.println("Bitte eine ganze Zahl eingeben:");
        zahl = SimpleIO.getInt();
        erg = zahl / (zahl-2);
        System.out.println(erg);
        
    }
}
```

Und ich bekomme in der zeile

[JAVA=9]zahl = SimpleIO.getInt();[/code] cannot find symbol


----------



## jgh (1. Okt 2010)

wenn deine Klassen [c]Division[/c] und [c]SimpleIO[/c] im selben, oder im gleichen^^ Package liegen, sollte das eigentlich nicht passieren.

Ich kann dein Programm ohne Probleme ausführen, wobei das Ergebnis natürlich merkwürdig ist...aber so willst du das wahrscheinlich haben, oder?


----------



## VfL_Freak (1. Okt 2010)

Moin,

importierst Du denn die Klasse "SimpleIO" in "Division" ???:L

Als Tipp:
links in der Spalte mit den Zeilennummern sollte bei dem Fehler ein kleines rotes Symbol stehen!
Wenn Du dort mit der rechten Maustaste drauf klickst, geht ein Kontextmenu auf, in dem Du sowas wie "Quick Fix" findest (Tastenkürzel Ctrl+1)!
Hiermit bekommt Du Vorschläge zu Fehlerbehebung, die meist weiterhelfen !

Gruß
Klaus


----------



## nrg (1. Okt 2010)

VfL_Freak hat gesagt.:


> Moin,
> 
> importierst Du denn die Klasse "SimpleIO" in "Division" ???:L





joule hat gesagt.:


> habe die datei SimpleIO.java in mein verzeichnis, wo der quellcode des oben aufgeführten programms ist kopiert





VfL_Freak hat gesagt.:


> links in der Spalte mit den Zeilennummern sollte bei dem Fehler ein kleines rotes Symbol stehen!



glaube nicht, dass er eine IDE benutzt.

@to nachdem nichts bei dir geholfen hat, hab ichs sogar gestern noch selbst ausprobiert. funktioniert wunderbar. entweder hast du die falsche SimpleIO oder noch eine andere oder ka..


----------



## ARadauer (1. Okt 2010)

btw:

```
float erg; //ein ergebnis einer division soll wirklich ein int sein?      
      System.out.println("Bitte eine ganze Zahl eingeben:");
      zahl = SimpleIO.getInt();
      erg = zahl / (float)(zahl-2); //dividend auf float kasten, sonst kommt als ergebnis immer int raus int/int = int
      System.out.println(erg);
```


----------

