Datentypen Warum findet er diese methoden nicht?

pisco

Bekanntes Mitglied
Hey Leute,

ich hab grad mehrere Fehler nur steh ich dabei ein bissl auf der Leitung wo diese sin:

Java:
import java.io.*;

public class UncompressedString {
	
	UncompressedString(String letter){
		letter = this.letter; 
		
	}
	
	
	public char count(char c){
		
		int counter;
		for(int i=0; i<letter.length; i++){
			
			if(c==charAt(i)){
				counter++;
			}
		}
	}
	
	public double ratio(){
		
		String abcFirst= "abcdefghijklm";
		double a_m =0;
		double m_z=0;
		double verhaeltnis = 0;
		
		for(int i=0; i<letter.length; i++){
			if(abcFirst.contains(charAt(i))){
				a_m++;
			} else {
				m_z++;
			}
		}
		verhaeltnis = a_m/m_z;
		return verhaeltnis;
	}
	//END
}

meine Fehler:
UncompressedString.java:6: cannot find symbol
symbol : variable letter
location: class UncompressedString
letter = this.letter;
^
UncompressedString.java:14: cannot find symbol
symbol : variable letter
location: class UncompressedString
for(int i=0; i<letter.length; i++){
^
UncompressedString.java:16: cannot find symbol
symbol : method charAt(int)
location: class UncompressedString
if(c==charAt(i)){
^
UncompressedString.java:29: cannot find symbol
symbol : variable letter
location: class UncompressedString
for(int i=0; i<letter.length; i++){
^
UncompressedString.java:30: cannot find symbol
symbol : method charAt(int)
location: class UncompressedString
if(abcFirst.contains(charAt(i))){
^
5 errors


was soll da bitte falsch sein bei den Methoden?

gruss und dank euch für eure Antwort...
 
Java:
import java.io.*;

public class UncompressedString {
	
	UncompressedString(String letter){
		this.letter = letter; 
		
	}
	
	
	public char count(char c){
		
		int counter;
		for(int i=0; i<letter.length; i++){
			
			if(c==letter.charAt(i)){
				counter++;
			}
		}
	}
	
	public double ratio(){
		
		String abcFirst= "abcdefghijklm";
		double a_m =0;
		double m_z=0;
		double verhaeltnis = 0;
		
		for(int i=0; i<letter.length; i++){
			if(abcFirst.contains(charAt(i))){
				a_m++;
			} else {
				m_z++;
			}
		}
		verhaeltnis = a_m/m_z;
		return verhaeltnis;
	}
	
	
	
	//END
}

so hab mal das this.letter geändert

also letter ist deklariert als String im Konstruktor also warum gehts dann ned?
Hätte mir das SO gedacht das ich in einer Main einfach den String übergebe, wollt aber nur vorab auf richtigkeit testen...

gruss
 
Java:
public class UncompressedString {
    private String letter;
    UncompressedString(String letter){
        this.letter = letter; 
        
    }
musst auch sagen dass es eine instanzvariable gibt...
 
Java:
UncompressedString.java:16: cannot find symbol
symbol  : variable length
location: class java.lang.String
		for(int i=0; i<letter.length; i++){
		                     ^
UncompressedString.java:31: cannot find symbol
symbol  : variable length
location: class java.lang.String
		for(int i=0; i<letter.length; i++){
		                     ^
UncompressedString.java:32: cannot find symbol
symbol  : method charAt(int)
location: class UncompressedString
			if(abcFirst.contains(charAt(i))){
			                     ^
3 errors

mhmmmmm also ich hab die Instanzvariable jetz hinzugefügt aber warum checkt er meine Methoden ned?

gruss
 
Code:
letter.length()

du wilslt ja die längenmethode aufrufen und nicht die längenvariable des strings

Code:
letter.charAt(i)

charAt muss an irgendwas dranhängen, ohne varaible hat er doch keine ahnung wo der den char herholen soll
 
Zuletzt bearbeitet von einem Moderator:
Nein.

charAt(i) braucht auch die instanz deines Strings. Also

Java:
String s = "blabla";
char c = s.charAt(1);

mmmhhhmmm um ehrlich zu sein check ich das grad ned, denn abcFirst wird doch instanziert mit diesem Alphabet, ich versteh einfach ned warun er dann ned die Methode zulässt...

Java:
public double ratio(){
		
		String abcFirst= "abcdefghijklm";//<= wird hier instanziert!!!!....
		double a_m =0;
		double m_z=0;
		double verhaeltnis = 0;
		
		for(int i=0; i<letter.length(); i++){
			if(abcFirst.contains(charAt(i)){
				a_m++;
			} else {
				m_z++;
			}
		}
		verhaeltnis = a_m/m_z;
		return verhaeltnis;
	}
 
jede methode, die nicht in der aktuellen Klasse vorkommt muss ueber eine instanz angesprochen werden. Allein schon - wenn du 2 Strings hast, welcher soll dann für charAt genommen werden ?
[c]if(abcFirst.contains(letter.charAt(i)){[/c] denk ich meinst du
 
[c]abcFirst.contains(charAt(i)[/c]

zeichen = zeichenAnStelle(i)
string enthält (zeichen)


er weiß doch nicht, zeichen an stelle i von was? du musst letter vor charAt setzen wenn ich deinen code verstehe
 

Neue Themen


Zurück
Oben