# Fehlermeldung no suitable method found for read(char[])



## puschelemo21 (23. Nov 2011)

huhu,
ich weis nicht was an meinem Code falsch is vll kann mich einer aufklären

```
public class arrayein {

    public static void main(String[] args) throws Exception {
            /* lokale Variable, in der die
            Eingabe gespeichert werden soll (100 Zeichen lang) */
            char eingabe[] = new char[100];
            char eingelesen;
            //einlesen von der Komandozeile
            eingelesen = System.in.read(eingabe);
            System.out.println(einlesen);

}
```
Zeile an der gemeckert wird:
            eingelesen = System.in.read(eingabe);

Die Fehlermeldung:
 no suitable method found for read(char[])


----------



## faetzminator (23. Nov 2011)

Ein InputStreamReader kennt kein [c]read(char[])[/c] sondern nur [c]read(byte[])[/c]. Du kannst dazu einen [japi]InputStreamReader[/japi], auf Wunsch auch einen [japi]BufferedReader[/japi].


----------



## puschelemo21 (23. Nov 2011)

jetz mal langsam und auf deutsch o.o
also ich les das array ein was hat das mit dem inputstreamreader btw bufferedreader zu tun


----------



## faetzminator (23. Nov 2011)

Wenn du ein [c]char[][/c] willst, benötigst du einen Reader. Der Reader verwandelt die Bytes in einem gegebenen Encoding (UTF-8, ISO-8859-*, ...) in Zeichen.


----------



## puschelchen (25. Nov 2011)

```
public static char[] reverse(char[]reverse){

      //reverse z.b. ['a','b','c','d']
        char [] ret =System.in.read();
        char ret=new char[reverse.length];
     //ret=  reverse  ['','','','']
     for (int i = 0; i<reverse.length;i++){
     //i = 2
     //reverse.length-i = 2

        ret[reverse.length - i - 1] = reverse[i];
        // ret=reverse=['x','x','b','']
     }
     return ret;
}

   public static void main (String[] args){

    char[]arr={'a','b','c','d','e'};
    reverse(arr);
```
Fehlermeldung immer bei System.in.read();
Aufg6a.java:6:36: error: incompatible types


----------



## SlaterB (25. Nov 2011)

System.in.read(); liest kein char[] ein?!


----------



## puschelchen (25. Nov 2011)

das hat aber der MENSCH im Tutorium zu uns gesagt das das eben tut! -.-
ja kein Plan wie sonst?


----------



## SlaterB (25. Nov 2011)

warum willst du überhaupt was einlesen?
liefert der Parameter der Methode nicht das zu drehende char[], in der main-Methode mit 'a','b','c','d','e' vorgegeben?


----------



## puschelchen (25. Nov 2011)

weil das unten gelöscht wird vom code und die eingaben über konsole erfolgen sollen laut aufgabe a.
In dieser Aufgabe sollen elementare Methoden ausprobiert werden, die den Inhalt eines Texts "verheimlichen" sollen. Wir beschränken uns dabei auf einzeilige Texte (ohne Zeilenumbruchzeichen), die als Char-Arrays im Hauptspeicher vorgehalten werden (keine String-Objekte!).

    Zunächst definieren wir uns einige Grundfunktionen in Form von wiederverwendbaren Unterprogrammen.

    Schreiben Sie ein Klasse CharArrayOps, die wiederverwendbare statische Methoden für folgende Aufgaben beinhalten soll:
        Einlesen des Array-Inhalts als eine Zeile von der Standardeingabe (auf Basis von System.in.read()).


----------



## SlaterB (25. Nov 2011)

eine Untermethode fürs Einlesen wäre in der Tat angebracht,
na jedenfalls liest System.in.read() bestenfalls einen char, 
mit einer Schleife kannst du viele einlesen und sie im Array speichern


----------



## puschelchen (25. Nov 2011)

also ich les mit system.in.read() die sachen ein?!
und  sag dann
for(int i = 0; i<CharArrayOps.length;i++)
char [] variable;
die eingelesen variable= arrayvariable oder wie?


----------



## SlaterB (25. Nov 2011)

das Array deklarierst du vor der Schleife 
und in der Schleife liest du einzelne chars ein und speicherst diese im Array

wenn du diese Sätze nicht in Code übersetzen kannst, dann kann ich auch nicht helfen,
dann müsste ich ja noch mehr machen, gar den ganzen Code schreiben..

vielleicht hilft auch ein Lehrbuch mit Beispielen, was ein Array überhaupt ist
Galileo Computing :: Java ist auch eine Insel - 3 Klassen und Objekte
3.8 Arrays


----------



## puschelchen (25. Nov 2011)

achso jetzt hab ichs verstanden was du meinst. eigentlich müsste der Code aber funktionieren da er am mittwoch im Tutorium auch noch funktioniert hat


----------



## puschelchen (25. Nov 2011)

So hab nun Code geändert
  import java.io.IOException;

  public class Aufgabe6a {
    public static char[] CharArrayOps(char[]CharArrayOps) throws IOException {
    char varr= (char) System.in.read();
    for (int i = 0; i<CharArrayOps.length;i++);
        char[]CharArrayOps1= new char[CharArrayOps .length] ; 
        System.out.println(CharArrayOps);
        System.out.println(CharArrayOps .length );

    return CharArrayOps;
}
    public static void main (String[] args) throws IOException{

    	char[]arr={'a','b','c','d','e'};
    	CharArrayOps(arr);


}
Läuft ohne Fehler allerdings hab ich probleme mit dem char arr weil ich überdem werte und die werden übernommen statt standarteingabe kann mir vll jemand helfen?


----------



## SlaterB (25. Nov 2011)

Bestandsaufnahme:
- du unterläßt es, JAVA Tags zu verwenden, erschwerst jeden anderen den Code zu lesen
- Methoden/ Variablen/ Parameter immer klein schreiben
- das Einlesen steht NICHT in einer Schleife wie vorgeschlagen
- ein Semikolon direkt nach dem for beendet die Schleife immer sofort
- wenn du erst ein Array einlesen willst, dann streiche doch den Parameter
- du definierst ein Array CharArrayOps1, verwendest es aber nirgendwo

- was ist überhaupt dein Plan? 'Schreiben Sie ein Klasse CharArrayOps' heißt nicht dass du deine Methode so nennen sollst,
gib Methoden besser gute Namen, z.B. readCharArrayFromUser()


----------



## ARadauer (25. Nov 2011)

Rück den Code mal sauber ein
Verwende die Java Tags
Variablen schreibt man klein
hinter der for Schleife kein ; sondern eher {}
Was willst du eigentlich machen?

Warum sollen wir uns für dich bemühen, wenn du es nicht mal selber machst...


----------



## puschelchen (25. Nov 2011)

was heisst ich tu nichts? natürlich programmier ich grad dran?


----------



## puschelchen (25. Nov 2011)

also zur Schleife ich muss doch die Schleife so bauen das! variable geprüft wird ob sie gefüllt is. wenn sie gefüllt is dann geh ins Unterprogramm oder versteh grad falsch? ich kann die schleife nicht BAUEN ;__;
das Programm macht ja eig was ich will nur die Schleife bekomm ich nun nicht hin.


----------



## puschelchen (25. Nov 2011)

Ansatz;

```
import java.io.IOException;

  public class Aufgabe6a {
	  public static char[] CharArrayOps(char[]CharArrayOps) throws IOException {
	  for (int i = 0; i<CharArrayOps.length;i++);
	  char[]CharArrayOps1= new char[CharArrayOps .length] ;
	  System.out.println(CharArrayOps);
	  System.out.println(CharArrayOps .length );

	  return CharArrayOps;
	  }
	  public static void main (String[] args) throws IOException{

	  char varr= (char) System.in.read();
  if (varr ==" "){
		  //nothing to do
	  }
	  else{
	  CharArrayOps == varr;
	  }
	  }
```


----------



## SlaterB (25. Nov 2011)

bisher hast du überhaupt keine Schleife gepostet die irgendwas macht, 
auch hier bietet sich zunächst wieder ein Lehrbuch an um zu lernen was eine Schleife IST
Galileo Computing :: Java ist auch eine Insel - 2 Imperative Sprachkonzepte
2.6.3 Die for-Schleife

leider sind die Beispiele dort teils ohne Klammern ,
zu Beginn sollte man IMMER, bei jedem if und jeder Schleife {}-Klammern verwenden

edit:
und nach wie vor gilt: ein ; direkt hinter der Schleife in derselben Zeile beendet sie sofort!
wenn du solche Grundlagen außer acht läßt, selbst nach Hinweis, ist das nicht hilfreich

edit2:
selbst wenn es das ;-Problem nicht gäbe, was ist dann die nächste Zeile, die Array-Definition?
wieso sollte die Array-Definition mehrfach ausgeführt werden, auch da schon längst gesagt: 
nur EINMAL, VOR der Schleife

edit3:
was dagegen ganz logisch in die Schleife gehört ist das Befüllen des Arrays in Einzelschritten,
denn es sind ja mehrere Positionen zu befüllen, also eine sich wiederholende Tätigkeit,
idealerweise jeweils an andere Position im Array,


----------



## puschelchen (25. Nov 2011)

char varr= (char) System.in.read();
	  for ( int varr1 = 1; varr1 <= 5; varr1++ ){

		  char CharArrayOps = varr;
	  }


	  }


----------



## SlaterB (25. Nov 2011)

raten ohne Konzept bringt nichts, 
fürs Lesen des x-seitigen Kapitels zu Schleifen mit ausführlichen Beispielen hast du dir anscheinend entweder 45 sec Zeit genommen oder noch wahrscheinlicher gar nicht erst reingeschaut,
also ich werde dir nicht Java komplett beibringen


----------



## puschelchen (25. Nov 2011)

```
char varr= (char) System.in.read();
		  for ( int varr1 = 1; varr1 <= 5; varr1++ ){
			  System.out.println(chararrayops);  
		  }
```
nein ich hab den Text von dort kopiert geschaut was das tut und dann umgewandelt wie ichs brauch o.o
so nun hab ich das aber ich muss doch das ins Unterprogramm packen weil ich sonst nichts ans Unterprogramm übergeben kann.
Und dann halt sowas wie "array.add"


----------



## SlaterB (25. Nov 2011)

beschreibe doch erstmal in Worten was diese 3 Zeilen machen,
oder andersrum was du mit der Schleife vorhast


----------



## puschelchen (25. Nov 2011)

ich les variable varr ein über die Eingabe
dann tu ich ne int variable definieren die bis 5 hochzählt theoretisch für 5 zeichen praxis kann ichs bis unendlich machen dann hat das prog zwar kein algorithmus mehr aber mein gott soll sich mein Prof dann mit dem ärgern?!
und dann sag ich chardingsbla= varr und spring unterprogramm


----------



## SlaterB (25. Nov 2011)

tja, und eine meiner elementaren Aussagen seit langem ist, 
dass das Einlesen eines Zeichens aus der Eingabe IN die Schleife gehört, denn du willst das ja mehrmals machen um das große Array zu befüllen

ist dir das unverständlich?
das Array muss nur EINMAL deklariert werden, VOR der Schleife, 
das Einlesen passiert dagegen öfters, das muss IN die Schleife, neben weiteren komplizierten Dingen wie dann auch Speichern des Wertes im Array

über solche Dinge musst du nachdenken, dazu fehlt noch völlig irgendwelcher Code, ob Untermethode oder nicht ist zweitrangig


freilich gibt es dabei auch schwierige Fragen, z.B. die groß das Array sein soll


----------



## puschelchen (25. Nov 2011)

aber das Array ist doch schon definiert im Unterprogramm

```
public static char[] chararrayops(char[]chararrayops) throws IOException {
```


```
import java.io.IOException;

  public class Aufgabe6a {
	  public static char[] chararrayops(char[]chararrayops) throws IOException { 
	//i erhält wert 0 und wird geprüft ob es kleiner ist als die Länge des array und hochgezählt
	  for (int i = 0; i<chararrayops.length;i++);

	  char[]Chararrayops1= new char[chararrayops .length] ;
//ausgabe von array
	  System.out.println(chararrayops);
//ausgabe von array-länge	  
          System.out.println(chararrayops .length );
//Rückgabe von array
	  return chararrayops;
	  }
	  public static void main (String[] args) throws IOException{
//varr1 geht von 1 bis 100
		  for ( int varr1 = 1; varr1 <= 100; varr1++ ){
			//einlesen von wert
                          char varr= (char) System.in.read();
//Übergabe von wert an chararrayops
			  chararrayops(varr);
//Ausgabe vom Array
			  System.out.println(chararrayops);  
		  }
```
muss ich etwa das chararrayops  nochmal deklariern? weils beim übergeben meckert aber wenn ichs halt "array" definier passts ja auch net wirklich.


----------



## SlaterB (25. Nov 2011)

ein Parameter ist kein 'reales' Array-Objekt

der Methodenaufruf
> chararrayops(varr);
passt mal wieder gar nicht, varr ist ein einzelner char, die Methode verlangt aber ein char[] als Parameter?,
vielleicht meinst du es ja ganz anders als du es in Syntax hinschreibst, eine Methode 
> public static char[] chararrayops(char[]chararrayops) 
in der der Parameter exakt wie die Methode heißt kann dabei zur Verwirrung beitragen,
besser unterscheiden

wie schon erwähnt nenne die Methode lieber readCharArrayFromUser(), falls diese Methode das tun soll,
und dann eher ohne Parameter, 

die Schleife gehört in die Untermethode, nicht in die main wenn die Untermethode was machen soll (wenn die Untermethode einlesen soll)

ach, da gibt es ja kein Ende 
zum Glück für mich muss ich jetzt weg

für deine nicht wenige investierte Zeit ist eine Art Lösung denkbar,
muss nicht perfekt sein, überlege ob du was davon lernst:

```
import java.util.Arrays;

public class Aufgabe6a {
    public static char[] readCharArrayFromUser()    throws IOException  {
        char[] c = new char[5];

        System.out.println("jetzt bitte " + c.length + " Zeichen eingeben, dann Enter:");
        for (int i = 0; i < c.length; i++)     {
            char v = (char)System.in.read();
            c[i] = v;
        }
        return c;
    }

    public static void main(String[] args)
        throws IOException
    {
        char[] x = readCharArrayFromUser();
        System.out.println(Arrays.toString(x));

    }
}
```


----------



## puschelchen (25. Nov 2011)

Danke ja ich versteh was der Code macht mein Problem is ja immer die Umsetzung... 
aber es folgen eh noch viele Aufgaben.... grob geschätzt werden das ca 150 zeilen


----------

