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

puschelemo21

Mitglied
huhu,
ich weis nicht was an meinem Code falsch is vll kann mich einer aufklären
Java:
 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[])
 
Zuletzt bearbeitet:

faetzminator

Gesperrter Benutzer
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].
 

faetzminator

Gesperrter Benutzer
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.
 
P

puschelchen

Gast
Java:
    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
 
P

puschelchen

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

SlaterB

Gast
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?
 
P

puschelchen

Gast
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()).
 
S

SlaterB

Gast
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
 
P

puschelchen

Gast
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?
 
S

SlaterB

Gast
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
 
P

puschelchen

Gast
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
 
P

puschelchen

Gast
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?
 
S

SlaterB

Gast
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

Top Contributor
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...
 
P

puschelchen

Gast
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.
 
P

puschelchen

Gast
Ansatz;
Java:
  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;
	  }
	  }
 
S

SlaterB

Gast
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,
 
Zuletzt bearbeitet von einem Moderator:
P

puschelchen

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

char CharArrayOps = varr;
}


}
 
S

SlaterB

Gast
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
 
P

puschelchen

Gast
Java:
	  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"
 
S

SlaterB

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

puschelchen

Gast
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
 
S

SlaterB

Gast
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
 
P

puschelchen

Gast
aber das Array ist doch schon definiert im Unterprogramm
Java:
 public static char[] chararrayops(char[]chararrayops) throws IOException {
Java:
  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.
 
S

SlaterB

Gast
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:
Java:
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));

    }
}
 
P

puschelchen

Gast
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
 

Neue Themen


Oben