# The import In cannot be resolved



## Torsten77D (12. Aug 2009)

Hallo, habe ein kleines Problem.
Ich versuche die Klasse In für eine Übung zu nutzen, ich möchte einen Integer-Wert einlesen lassen. Ich versuche das das ganze nach einer Beschreibung aus "Sprechen sie Java ?" :rtfm: von Hans Peter  Mössenbröck. Ich habe mir die Klasse runtergeladen, im gleichen Verzeichniss wie die Übung gespeichert, aber es funktioniert nicht. Auch nicht nachdem ich die Klasse In neu kompiliert habe. Die Klasse kann nicht importiert werden. Wo liegt der Fehler ? Über Google war nicht hilfreiches zu finden.
(PS.: nutze Kubuntu 9.04, kein Windows)


----------



## maki (12. Aug 2009)

> Wo liegt der Fehler ?


Welcher denn ? Oder sollen wir raten? Ist das ein Quiz, oder willst du Hilfe?


----------



## bygones (12. Aug 2009)

auja... raten ... ich fang mal an 

ist das eine klasse ? liegt sie im selben Verzeichnis ... -> dann brauchst du kein import
ist es eine Klasse in einem eigenen package -> auf ordnerstruktur achten und importieren
ist es ein jar -> in den classpath aufnehmen.

mhm ... hab ich was vergessen ?


----------



## Torsten77D (12. Aug 2009)

Wieso raten ? Steht doch alles da. In dem Buch wird die Klasse "In" zum einlesen von der Tastatur verwendet. Die soll man sich runterladen und in das gleiche Verzeichnis legen, wo die Klasse liegt, in der man sie verwenden will. Ausserdem soll man sie dann mit dem Befehl import  importieren. Funktioniert nur leider nicht...

In einer Übung für Datenstrukturen und Algorithmen ist ein Algorithmus in Pseudocode angegeben, den man erklären soll, bzw herausfinden, was er macht. Das geht am besten, indem man ihn in Java implementiert und sich das ganze mal ansieht. Wenn es denn funktioniert...


```
import In;

public class pipapo {
	
	static void algor(){
		
		int x = 1;
		int y = 1;
		int z;
		
		System.out.println("Bitte geben sie einen ganzzahligen Wert ein.");
		
		z = In.readInt();
	
		while (x < z){
			y = y + 2;
			x = x + y;
			
		}
		
		if (x == z){
			System.out.println("True");
			
		}		
			
			else{
				
			System.out.println("False");
			
			
		}
	}
	
	public static void main(String[]arg){
		
		algor();
	}
}
```


----------



## maki (12. Aug 2009)

> Wieso raten ? Steht doch alles da


Na wenn du meinst...


----------



## Torsten77D (12. Aug 2009)

Ich will doch einfach nur einen Integer einlesen und in einer Variable speichern. Habe wieder vergessen, wie ich das funktioniert...
Es gibt doch bestimmt eine bessere Methode, als die, die das Buch zu bieten hat.


----------



## tfa (12. Aug 2009)

Ja, wo ist denn jetzt der Fehler? 
"funktioniert nicht" reicht nicht.


----------



## Torsten77D (12. Aug 2009)

Ja hallo ? Steht doch da, was nicht funktioniert.


----------



## maki (12. Aug 2009)

Torsten77D hat gesagt.:


> Ja hallo ? Steht doch da, was nicht funktioniert.


Wenn du damit meinst, "der import funktioniert nicht", dann fällt mir eigentlich bygones Post ein, hast du das denn schon mal probiert?


----------



## Torsten77D (12. Aug 2009)

bygones hat gesagt.:


> auja... raten ... ich fang mal an
> 
> ist das eine klasse ? liegt sie im selben Verzeichnis ... -> dann brauchst du kein import
> ist es eine Klasse in einem eigenen package -> auf ordnerstruktur achten und importieren
> ...



Wie gesagt, es ist eine Klasse, liegt im selben Verzeichniss, ich soll sie aber importieren. Dies Klasse soll man sich hier runterladen: Sprechen Sie Java? 
und in das entsprechende Verzeichniss legen. 
Und was das mit dem Classpath soll, wurde in der Uni leider auch nie vernünftig erklärt. Und was ist ein jar ?


----------



## maki (12. Aug 2009)

Du kannst keine Klasse importieren die im default package liegt 
Sie ist aber auch so verfügbar, ohne import.

Eine jar ist ein Zip Archiv nach ein Konvention welches zB. Klassen enthält, jars können auch ausführbar sein, das Java Pendant zu Exe Dateien.


----------



## Opnox (12. Aug 2009)

Torsten77D hat gesagt.:


> Wie gesagt, es ist eine Klasse, liegt im selben Verzeichniss, *ich soll* sie aber importieren.


Solltest du besser nicht.


----------



## Torsten77D (12. Aug 2009)

OK, habe "Import In;" wieder entfernt. 
Eclipse aber mit der Zeile z = In.readInt();  immer noch nichts anfangen.
--> In cannot be resolved. Was muß ich denn jetzt machen, damit die Klasse "In" zum einlesen verwendet werden kann ?


----------



## eRaaaa (12. Aug 2009)

bei mir läufts ohne probleme
scheint ja so, als wäre deine In.java nicht im gleichen package?! kannst ja mal nen screen von deinem package in eclipse machen


----------



## Torsten77D (12. Aug 2009)

Ich habe eclipse nicht installiert, da ich damit noch mehr Probleme hatte (Vers. 3.2). So wie man mir auch hier im Forum sagte, gibt es da häufig Probleme, besonders mit dem importieren. Habe mir 3.5 runtergeladen und starte das ganze dann immer über eine ausführbare Datei.
Wüsste jetzt auch gar nicht, wie ich den Screen machen soll, ich vergesse immer die Befehle...


----------



## eRaaaa (12. Aug 2009)

Torsten77D hat gesagt.:


> Ich habe eclipse nicht installiert, da ich damit noch mehr Probleme hatte (Vers. 3.2). So wie man mir auch hier im Forum sagte, gibt es da häufig Probleme, besonders mit dem importieren. Habe mir 3.5 runtergeladen und starte das ganze dann immer über eine ausführbare Datei.
> Wüsste jetzt auch gar nicht, wie ich den Screen machen soll, ich vergesse immer die Befehle...



also jetzt bin ich confused, hätte schwören können im ersten beitrag von dir gelesen zu haben dass du eclipse nutzt ! (daher auch mein post)..naja, ich sollte vllt besser ins bett gehen =)

zu deinem problem...liegt denn die In.java im gleichen verzeichnis oder nicht? (screenshot macht man z.b. mit der print/druck-taste :bae: )


----------



## Torsten77D (12. Aug 2009)

Ja, ich benutze eclipse, aber es ist nicht über aptitude installiert. Ich habe es mir runtergeladen und starte es über eine ausführbare Datei, aber es ist nicht installiert...

Die Klasse "In" liegt im workspace, also im gleichen Verzeichniss, wie die Klasse für die Übung.


----------



## maki (12. Aug 2009)

Zeig doch mal die Klasse in...


----------



## Torsten77D (12. Aug 2009)

```
import java.io.*;
import java.util.LinkedList;

/** Simple input from the keyboard or from a file.
<p>Copyright (c) 2005 Hanspeter Moessenboeck, University of Linz</p>

<p>This class is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any
later version.</p>

<p>This class is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
or FITNESS FOR A PARTICULAR PURPOSE.  See the <a href="http://www.gnu.org/copyleft/gpl.html">
GNU General Public License</a> for more details.</p>
<hr>

<p>This class allows reading formatted data either from the keyboard
or from a file. It is intended to be used in an introductory
programming course when classes, packages and exceptions are unknown
at the beginning. To use it, simply copy In.class into the
source file directory. </p>

<p>All input comes from the current input file, which is initially
the keyboard. Opening a file with open() makes it the new current
input file. Closing a file with close() switches back to the previous
input file.</p>

<p>When reading from the keyboard, reading blocks until the user has entered
a sequence of characters terminated by the return key. All methods read
from this input buffer (including the terminating '\r' and '\n') until the
buffer is fully consumed. When a method tries to read beyond the end
of the buffer, it blocks again waiting for the next buffer.</p>

<p>End of file detection: When reading from the keyboard, eof can be
signaled as ctrl-Z at the beginning of a new line. When reading from a file,
eof occurs when an attempt is made to read beyond the end of the file.
In either case In.done() returns false if the requested data could not
be read because of eof. </p>
*/
public class In {

/** End of file indicator returned by read() or peek() when no more
characters can be read.
*/
public  static final char eof   = '\uffff';

private static final int empty = '\ufffe';

private static final char eofChar = '\u0005';  // ctrl E
private static InputStream in;
private static LinkedList inputStack, bufferStack;
private static boolean done; // true if recent operation was successful
private static char buf;     // last read character
private static char[] LS;    // line separator (eol)

private static char charAfterWhiteSpace() {
  char c;
  do c = read(); while (done && c <= ' ');
  return c;
}

private static String readDigits() {
  StringBuffer b = new StringBuffer();
  char c = charAfterWhiteSpace();
  if (done && c == '-') {
    b.append(c);
    c = read();
  }
  while (done && Character.isDigit(c)) {
    b.append(c);
    c = read();
  }
  buf = c;
  return b.toString();
}

private static String readFloatDigits() {
  StringBuffer b = new StringBuffer();
  char c = charAfterWhiteSpace();
  if (done && (c == '+' || c == '-')) {
    b.append(c);
    c = read();
  }
  while (done && Character.isDigit(c)) {
    b.append(c);
    c = read();
  }
  if (done && (c == '.')) {
    b.append(c);
    c = read();
    while (done && Character.isDigit(c)) {
      b.append(c);
      c = read();
    }
  }
  if (done && (c == 'e' || c == 'E')) {
    b.append(c);
    c = read();
    if (done && (c == '+' || c == '-')) {
      b.append(c);
      c = read();
    }
    while (done && Character.isDigit(c)) {
      b.append(c);
      c = read();
    }
  }
  buf = c;
  return b.toString();
}


/** Read a raw character (byte).
If an attempt is made to read beyond the end of the file,
eof is returned and done() yields false. Otherwise the read byte
is in the range 0..255.
*/
public static char read() {
  char c;
  if (buf != empty) {
    c = buf;
    if (buf != eof) buf = empty;
  } else {
    try {
      c = (char)in.read();
    } catch (IOException e) {
      done = false;
      c = eof; buf = eof;
    }
  }
  if (c == eofChar && inputStack.size() == 0) { c = eof; buf = eof; }
  done = c != eof;
  return c;
}

/** Current available raw characters.
In case of an error 0 is returned and done() yields false.
*/
public static int available() {
  int avail;

  try {
    avail = in.available();
  } catch(IOException exc) {
    avail = 0;
    done = false;
  }

  return avail;
}

/** Read a character, but skip white spaces (byte).
If an attempt is made to read beyond the end of the file,
eof is returned and done() yields false. Otherwise the read byte
is in the range 0..255.
*/
public static char readChar() {
  return charAfterWhiteSpace();
}

/** Read a boolean value.
This method skips white space and tries to read an identifier. If its value
is "true" the method returns true otherwise false. If the identifier is neither
"true" nor "false" done() yields false.
*/
public static boolean readBoolean() {
  String s = readIdentifier();
  done = true;
  if (s.equals("true")) return true;
  else { done = s.equals("false"); return false; }
}

/** Read an identifier.
This method skips white space and tries to read an identifier starting
with a letter and continuing with letters or digits. If a token of this
structure could be read, it is returned otherwise the empty string is
returned and done() yields false.
*/
public static String readIdentifier() {
  StringBuffer b = new StringBuffer();
  char c = charAfterWhiteSpace();
  if (done && Character.isLetter(c)) {
    b.append(c);
    c = read();
    while (done && (Character.isLetter(c) || Character.isDigit(c))) {
      b.append(c);
      c = read();
    }
  }
  buf = c;
  done = b.length() > 0;
  return b.toString();
}

/** Read a word.
This method skips white space and tries to read a word consisting of
all characters up to the next white space or to the end of the file.
If a token of this structure could be read, it is returned otherwise
an empty string is returned and done() yields false.
*/
public static String readWord() {
  StringBuffer b = new StringBuffer();
  char c = charAfterWhiteSpace();
  while (done && c > ' ') {
    b.append(c);
    c = read();
  }
  buf = c;
  done = b.length() > 0;
  return b.toString();
}

/** Read a line of text.
This method reads the rest of the current line (including eol) and
returns it (excluding eol). A line may be empty.
*/
public static String readLine() {
  StringBuffer b = new StringBuffer();
  char c = read();
  while (done && c != LS[0]) {
    b.append(c);
    c = read();
  }

  int i = 0;
  while (c == LS[i]) {
    ++i;
    if (i >= LS.length) { break; }
    c = read();
  }

  if (i < LS.length) {
    buf = c;
  } else {
    buf = empty;
  }
  if (b.length() > 0) done = true;
  return b.toString();
}

/** Read the whole file.
This method reads from the current position to the end of the
file and returns its text in a single large string. done() yields
always true.
*/
public static String readFile() {
  StringBuffer b = new StringBuffer();
  char c = charAfterWhiteSpace();
  while (done) {
    b.append(c);
    c = read();
  }
  buf = eof;
  done = true;
  return b.toString();
}

/** Read a quote-delimited string.
This method skips white space and tries to read a string in the form "...".
It can be used to read pieces of text that contain white space.
*/
public static String readString() {
  StringBuffer b = new StringBuffer();
  char c = charAfterWhiteSpace();
  if (done && c == '"') {
    c = read();
    while (done && c != '"') {
      b.append(c);
      c = read();
    }
    if (c == '"') { c = read(); done = true; } else done = false;
  } else done = false;
  buf = c;
  return b.toString();
}

/** Read an integer.
This method skips white space and tries to read an integer. If the
text does not contain an integer or if the number is too big, the
value 0 is returned and the subsequent call of done() yields false.
An integer is a sequence of digits, possibly preceded by '-'.
*/
public static int readInt() {
  String s = readDigits();
  try {
    done = true;
    return Integer.parseInt(s);
  } catch (Exception e) {
    done = false; return 0;
  }
}

/** Read a long integer.
This method skips white space and tries to read a long integer. If the
text does not contain a number or if the number is too big, the
value 0 is returned and the subsequent call of done() yields false.
A long integer is a sequence of digits, possibly preceded by '-'.
*/
public static long readLong() {
  String s = readDigits();
  try {
    done = true;
    return Long.parseLong(s);
  } catch (Exception e) {
    done = false; return 0;
  }
}

/** Read a float value.
This method skips white space and tries to read a float value. If the
text does not contain a float value or if the number is not well-formed,
the value 0f is returned and the subsequent call of done() yields false.
An float value is as specified in the Java language description. It may
be preceded by a '+' or a '-'.
*/
public static float readFloat() {
  String s = readFloatDigits();
  try {
    done = true;
    return Float.parseFloat(s);
  } catch (Exception e) {
    done = false; return 0f;
  }
}

/** Read a double value.
This method skips white space and tries to read a double value. If the
text does not contain a double value or if the number is not well-formed,
the value 0.0 is returned and the subsequent call of done() yields false.
An double value is as specified in the Java language description. It may
be preceded by a '+' or a '-'.
*/
public static double readDouble() {
  String s = readFloatDigits();
  try {
    done = true;
    return Double.parseDouble(s);
  } catch (Exception e) {
    done = false; return 0.0;
  }
}

/** Peek at the next character.
This method skips white space and returns the next character without removing
it from the input stream. It can be used to find out, what token comes next
in the input stream.
*/
public static char peek() {
  char c = charAfterWhiteSpace();
  buf = c;
  return c;
}

/** Open a text file for reading
The text file with the name fn is opened as the new current input
file. When it is closed again, the previous input file is restored.
*/
public static void open(String fn) {
  try {
    InputStream s = new FileInputStream(fn);
    bufferStack.add(new Character(buf));
    inputStack.add(in);
    in = s;
    done = true;
  } catch (FileNotFoundException e) {
    done = false;
  }
  buf = empty;
}

/** Close the current input file.
The current input file is closed and the previous input file is
restored. Closing the keyboard input has no effect but causes
done() to yield false.
*/
public static void close() {
  try {
    if (inputStack.size() > 0) {
      in.close();
      in = (InputStream) inputStack.removeLast();
      buf = ((Character) bufferStack.removeLast()).charValue();
      done = true;
    } else {
      done = false; buf = empty;
    }
  } catch (IOException e) {
    done = false; buf = empty;
  }
}

/** Check if the previous operation was successful.
This method returns true if the previous read operation was able
to read a token of the requested structure. It can also be called
after open() and close() to check if these operations were successful.
If done() is called before any other operation it yields true.
*/
public static boolean done() {
  return done;
}

static { // initializer
  done = true;
  in = System.in;
  buf = empty;
  inputStack = new LinkedList();
  bufferStack = new LinkedList();
  LS = System.getProperty("line.separator").toCharArray();
  if (LS == null || LS.length == 0) {
    LS = new char[] { '\n' };
  }
}

}
```


----------



## maki (12. Aug 2009)

Werden da Fehler angezeigt bei dir?


----------



## Torsten77D (12. Aug 2009)

Nein, werden keine angezeigt, eclipse hat nichts zu mäkeln...


----------



## ARadauer (12. Aug 2009)

Torsten77D hat gesagt.:


> Ja, ich benutze eclipse, aber es ist nicht über aptitude installiert. Ich habe es mir runtergeladen und starte es über eine ausführbare Datei, aber es ist nicht installiert...
> 
> Die Klasse "In" liegt im workspace, also im gleichen Verzeichniss, wie die Klasse für die Übung.



ja passt schon, eclipse muss man nicht installieren...

hast du ein projekt erstellt?
eine klasse direkt in den workspace? geht das?

Zeig mal einen Screenshot


----------



## ARadauer (12. Aug 2009)

aha... na dann


----------



## Torsten77D (12. Aug 2009)

Ich habe nur ein Projekt für pipapo erstellt (den Namen hat sich der Übungsleiter ausgedacht). In.java habe ich einfach reinkopiert und zur Fehlerkontrolle einfach mit eclipse geöffnet.

Wie kann ich einen screenshot einfügen ?


----------



## ARadauer (12. Aug 2009)

also raus mit dem import In;
das ist dien Problem, du musst Klasse In nicht importieren, wenn sie sich im selben Verzeichnis befindet...

wie kompilierst du eigentlich? auf der kommandozeile?


----------



## Torsten77D (12. Aug 2009)

Import In ist ja raus. Aber z = In.readInt();  funktioniert nicht. Ist der letzte Fehler. --> In cannot be resolved. Das kompilieren übernimmt eclipse ja automatisch. Nur In habe ich über die Konsole kompiliert. Dabei kommen 2 Meldungen:
	
	
	
	





```
torsten@kubuntu:~$ cd ~/workspace/SS09
torsten@kubuntu:~/workspace/SS09$ javac In.java
Note: In.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
torsten@kubuntu:~/workspace/SS09$
```


----------



## maki (12. Aug 2009)

Dann gib doch mal folgendes ein:

```
javac -Xlint:unchecked In.java
```
Was sagt er jetzt?

Nebenbei gefragt, den Tab "Problems" kennst du in Eclipse?


----------



## Torsten77D (13. Aug 2009)

maki hat gesagt.:


> Nebenbei gefragt, den Tab "Problems" kennst du in Eclipse?



Ja, natürlich. In fast jedem Programm gibt es sowas. Nur dass das für Anfänger meist völlig unverständlich und somit nutzlos ist...


```
torsten@kubuntu:~$ cd ~/workspace/SS09
torsten@kubuntu:~/workspace/SS09$ javac -Xlint:unchecked In.java
In.java:362: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.LinkedList
    bufferStack.add(new Character(buf));
                   ^
In.java:363: warning: [unchecked] unchecked call to add(E) as a member of the raw type java.util.LinkedList
    inputStack.add(in);
                  ^
2 warnings
torsten@kubuntu:~/workspace/SS09$
```


----------



## maki (13. Aug 2009)

Scheint ok zu sein bis auf 2 Warnungen, jetzt Kompilier doch mal deine Klasse.


----------



## ARadauer (13. Aug 2009)

ich wird beide compilieren javac *.java

den * gibts aber bei linux oder?


----------



## maki (13. Aug 2009)

Ach so... naja, javac hab ich das letzte mal benutzt... hmm.. wird wohl noch Java 1.2 gewesen sein


----------



## Torsten77D (13. Aug 2009)

OK, habe pipapo.java nochmal kompiliert, jetzt geht es.
Danke...

Habe gerade gesehen, eclipse zeigt immer noch einen Fehler an. In der Konsole läuft ales bestens. Seltsam. Ich verlasse mich wohl ab sofort auf die Konsole und codiere am besten über einen Editor. Eclipse macht mir zuviele Faxen...


----------

