Vench
28-12-2004, 02:37
Ich hab ein Programm, das beim Kompilieren folgende Meldung anzeigt:
Probe5.java:102: incompatible types
found : java.lang.Object
required: java.lang.String
punkt = b.get(i);
^
Probe5.java:129: incompatible types
found : java.lang.Object
required: java.lang.String
punkt = c.get(i);
^
Note: Probe5.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errorsKann mir jemand erklären, wie ich diese(n) Fehler beheben kann (es scheint ja 2mal das gleiche Problem zu sein)?
Wenn ich's richtig verstanden habe, ist das Problem, dass .get ein Object zurück gibt, punkt jedoch ein String ist. Könnte ich vielleicht mit parseString arbeiten (falls es das überhaupt gibt)?
Die Notes beachte ich einfach nicht weiter - Ist das ok?
Hier der vollständige Code:
(Ich erwarte allerdings nicht ernsthaft, dass jemand das alles wirklich liest ;) )
import eprog.*;
import java.util.*;
public class Probe5 {
//main-Methode: deklariert den String eingabe und gibt auf Bildschirm das aus, was
// sie aus der Methode (Umwandlung) erhaelt.
// Sie beinhaltet ausserdem den try-catch-Block
public static void main(String[] args) {
try {
String eingabe = new String();
EprogIO.println(Umwandlung(eingabe));
}
catch (Exception e) {
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
}
//Methode Umwandlung wandelt die ArrayList aus ... in einen String um.
static String Umwandlung(String eingabe) {
ArrayList al = entklammern(eingabe);
return(al.toString());
}
//Methode Einlesen fuellt eine ArrayList mit Eingabewerten(Strings), solange die
//Abbruchbedingung nicht erreicht ist.
//Anschließend entfernt sie en letzten Eintrag aus der ArrayList.
static ArrayList Einlesen(String eingabe) {
ArrayList punkte = new ArrayList();
String bedingung = new String();
do {
eingabe = EprogIO.readWord();
bedingung = eingabe;
punkte.add(eingabe);
} while(!AbbruchBedingung(eingabe));
int letztesElement = punkte.size() - 1;
punkte.remove(letztesElement);
return(punkte);
}
//AbbruchBedingung: hier wird überprüft, ob gerade ein Gleichheitszeichen eingelesen
//wurde; falls ja, wird die boolean Variable Abbruch auf true gesetzt.
static boolean AbbruchBedingung(String eingabe) {
boolean Abbruch = false;
if (eingabe.equals("=")) {
Abbruch = true;
}
return(Abbruch);
}
//passendePunktanzahl: Sind auch tatsaechlich zwischen 3 und 15 Punkte eingegeben worden?
//wenn nicht, so wird "FALSCHE EINGABE" ausgegeben und das Programm endet an dieser Stelle
static ArrayList passendePunktanzahl(String eingabe) {
ArrayList a = Einlesen(eingabe);
if(a.size()<3 || a.size()>15) {
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
return(a);
}
//korrekteKlammerung: gibt folgendes zuruck: true falls alles passt bzw. false falls
//irgendwelche ArrayList-Elemente nicht "umklammert" sind.
static boolean korrekteKlammerung(String eingabe) {
boolean klammersetzung;
ArrayList b = passendePunktanzahl(eingabe);
int count = b.size();
for (int i=0;i<count;i++) {
String punkt = b.get(i);
while(punkt.startsWith("(") && punkt.endsWith(")") && (punkt.length()>=5)) {
klammersetzung = true;
}
}
return klammersetzung;
}
// entklammern entfernt die Klammern um die Punkte (falls korrekt geklammert ist).
static ArrayList entklammern(String eingabe) {
ArrayList c = new ArrayList();
if (korrekteKlammerung(eingabe)) {
c = passendePunktanzahl(eingabe);
}
else {
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
int count = c.size();
for (int i=0;i<count;i++) {
String punkt = c.get(i);
punkt = punkt.substring(1, punkt.length()-1);
c.set(i, punkt);
}
return(c);
}
}
Keine Ahnung, wieso der Code hier so sonderbar formatiert ist - in meinem Editor wars noch anders.
lg, Vench
Probe5.java:102: incompatible types
found : java.lang.Object
required: java.lang.String
punkt = b.get(i);
^
Probe5.java:129: incompatible types
found : java.lang.Object
required: java.lang.String
punkt = c.get(i);
^
Note: Probe5.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errorsKann mir jemand erklären, wie ich diese(n) Fehler beheben kann (es scheint ja 2mal das gleiche Problem zu sein)?
Wenn ich's richtig verstanden habe, ist das Problem, dass .get ein Object zurück gibt, punkt jedoch ein String ist. Könnte ich vielleicht mit parseString arbeiten (falls es das überhaupt gibt)?
Die Notes beachte ich einfach nicht weiter - Ist das ok?
Hier der vollständige Code:
(Ich erwarte allerdings nicht ernsthaft, dass jemand das alles wirklich liest ;) )
import eprog.*;
import java.util.*;
public class Probe5 {
//main-Methode: deklariert den String eingabe und gibt auf Bildschirm das aus, was
// sie aus der Methode (Umwandlung) erhaelt.
// Sie beinhaltet ausserdem den try-catch-Block
public static void main(String[] args) {
try {
String eingabe = new String();
EprogIO.println(Umwandlung(eingabe));
}
catch (Exception e) {
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
}
//Methode Umwandlung wandelt die ArrayList aus ... in einen String um.
static String Umwandlung(String eingabe) {
ArrayList al = entklammern(eingabe);
return(al.toString());
}
//Methode Einlesen fuellt eine ArrayList mit Eingabewerten(Strings), solange die
//Abbruchbedingung nicht erreicht ist.
//Anschließend entfernt sie en letzten Eintrag aus der ArrayList.
static ArrayList Einlesen(String eingabe) {
ArrayList punkte = new ArrayList();
String bedingung = new String();
do {
eingabe = EprogIO.readWord();
bedingung = eingabe;
punkte.add(eingabe);
} while(!AbbruchBedingung(eingabe));
int letztesElement = punkte.size() - 1;
punkte.remove(letztesElement);
return(punkte);
}
//AbbruchBedingung: hier wird überprüft, ob gerade ein Gleichheitszeichen eingelesen
//wurde; falls ja, wird die boolean Variable Abbruch auf true gesetzt.
static boolean AbbruchBedingung(String eingabe) {
boolean Abbruch = false;
if (eingabe.equals("=")) {
Abbruch = true;
}
return(Abbruch);
}
//passendePunktanzahl: Sind auch tatsaechlich zwischen 3 und 15 Punkte eingegeben worden?
//wenn nicht, so wird "FALSCHE EINGABE" ausgegeben und das Programm endet an dieser Stelle
static ArrayList passendePunktanzahl(String eingabe) {
ArrayList a = Einlesen(eingabe);
if(a.size()<3 || a.size()>15) {
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
return(a);
}
//korrekteKlammerung: gibt folgendes zuruck: true falls alles passt bzw. false falls
//irgendwelche ArrayList-Elemente nicht "umklammert" sind.
static boolean korrekteKlammerung(String eingabe) {
boolean klammersetzung;
ArrayList b = passendePunktanzahl(eingabe);
int count = b.size();
for (int i=0;i<count;i++) {
String punkt = b.get(i);
while(punkt.startsWith("(") && punkt.endsWith(")") && (punkt.length()>=5)) {
klammersetzung = true;
}
}
return klammersetzung;
}
// entklammern entfernt die Klammern um die Punkte (falls korrekt geklammert ist).
static ArrayList entklammern(String eingabe) {
ArrayList c = new ArrayList();
if (korrekteKlammerung(eingabe)) {
c = passendePunktanzahl(eingabe);
}
else {
EprogIO.println("FALSCHE EINGABE");
System.exit(0);
}
int count = c.size();
for (int i=0;i<count;i++) {
String punkt = c.get(i);
punkt = punkt.substring(1, punkt.length()-1);
c.set(i, punkt);
}
return(c);
}
}
Keine Ahnung, wieso der Code hier so sonderbar formatiert ist - in meinem Editor wars noch anders.
lg, Vench