/*********************************** * FIGUREN.JAVA * * ================================ * * Peter Lukezic, Matr.nr.: 0002887 * ***********************************/ package Intersec; import eprog.*; import java.util.*; public class figuren { public figuren() { } public boolean vergleich(short ax1, short ay1, short ax2, short ay2, short bx1, short by1, short bx2, short by2) { //vergleicht 2 Geometrische Objekte if((ax1<=bx2) && (ax2>=bx1) && (by1<=ay2) && (by2>=ay1)) { return true; } else { return false; } } public static String pruefen() throws EprogException { figuren Figuren = new figuren(); //Klasse instantiieren String ausgabe = ""; //Ausgabestring der am Schluss zurückgegeben wird short objekta,objektb; //ObjektIDs short[][] objekt = new short[99][4]; //Array[ObjektID][x1][y1][x2][y2] String[] eingabe = new String[99]; //Array[ObjektID][z.b. "R(1,1;1,1)"] int i=1,j=1,k,l,zeichen1,zeichen2,zeichen3; //div Hilfsvariablen boolean fehler = false; //um mehrere Objekte einzulesen, muss eine Endlosschleife gemacht werden, //die abgebrochen wird, wenn das 1. Zeichen des Strings ein ? oder das 2. Zeichen ein < ist do { eingabe[i]=EprogIO.readWord(); if((eingabe[i].equals("?")) || (eingabe[i].indexOf("<")>0)) { break; } i++; } while (1==1); try { //Schleife um alle Objekte außer dem letzten Operator-String zu bearbeiten //es sollen nun alle Arten von geometrischen Objekten auf die gleiche Form gebracht werden x1,y1,x2,y2 for(j=1;j Rechteck if(eingabe[j].substring(0,1).equals("R")) { if(eingabe[j].indexOf(";")!=-1) { //Variante 1: x1,y1;x2,y1 zeichen1=eingabe[j].indexOf(","); zeichen2=eingabe[j].indexOf(";"); zeichen3=eingabe[j].indexOf(",",zeichen1+1); if((zeichen2!=-1)&&(zeichen1!=zeichen3)) { objekt[j][0]=Short.parseShort(eingabe[j].substring(2,zeichen1)); objekt[j][1]=Short.parseShort(eingabe[j].substring(zeichen1+1,zeichen2)); objekt[j][2]=Short.parseShort(eingabe[j].substring(zeichen2+1,zeichen3)); objekt[j][3]=Short.parseShort(eingabe[j].substring(zeichen3+1,eingabe[j].length()-1)); } } else { //Variante 2: x1,y1,a,b zeichen1=eingabe[j].indexOf(","); zeichen2=eingabe[j].indexOf(",",zeichen1+1); zeichen3=eingabe[j].lastIndexOf(","); if((zeichen1!=-1)&&(zeichen2!=zeichen3)) { objekt[j][0]=Short.parseShort(eingabe[j].substring(2,zeichen1)); objekt[j][1]=Short.parseShort(eingabe[j].substring(zeichen1+1,zeichen2)); objekt[j][2]=Short.parseShort(eingabe[j].substring(zeichen2+1,zeichen3)); objekt[j][3]=Short.parseShort(eingabe[j].substring(zeichen3+1,eingabe[j].length()-1)); objekt[j][2]+=objekt[j][0]; objekt[j][3]+=objekt[j][1]; } //Variante 3: x1,y1,a zeichen1=eingabe[j].indexOf(","); zeichen2=eingabe[j].indexOf(",",zeichen1+1); zeichen3=eingabe[j].lastIndexOf(","); if((zeichen1!=-1)&&(zeichen1!=zeichen2)&&(zeichen2==zeichen3)) { objekt[j][0]=Short.parseShort(eingabe[j].substring(2,zeichen1)); objekt[j][1]=Short.parseShort(eingabe[j].substring(zeichen1+1,zeichen2)); objekt[j][2]=Short.parseShort(eingabe[j].substring(zeichen2+1,eingabe[j].length()-1)); objekt[j][3]=Short.parseShort(eingabe[j].substring(zeichen2+1,eingabe[j].length()-1)); objekt[j][2]+=objekt[j][0]; objekt[j][3]+=objekt[j][1]; } } } //wenn das erste Zeichen des String K ist -> Kreis else if(eingabe[j].substring(0,1).equals("K")) { //Variante 1: x1,y1;r zeichen1=eingabe[j].indexOf(","); zeichen2=eingabe[j].indexOf(";"); if((zeichen1!=-1)&&(zeichen2!=-1)&&(zeichen1!=zeichen2)) { objekt[j][0]=Short.parseShort(eingabe[j].substring(2,zeichen1)); objekt[j][1]=Short.parseShort(eingabe[j].substring(zeichen1+1,zeichen2)); objekt[j][2]=Short.parseShort(eingabe[j].substring(zeichen2+1,eingabe[j].length()-1)); objekt[j][3]=Short.parseShort(eingabe[j].substring(zeichen2+1,eingabe[j].length()-1)); //negativer Radius nicht erlaubt if(objekt[j][2]<=0) { fehler=true; } objekt[j][2]+=objekt[j][0]; objekt[j][3]+=objekt[j][1]; } //Variante 2: x1,y1,a zeichen1=eingabe[j].indexOf(","); zeichen2=eingabe[j].lastIndexOf(","); if((zeichen1!=-1)&&(zeichen1!=zeichen2)) { objekt[j][0]=Short.parseShort(eingabe[j].substring(2,zeichen1)); objekt[j][1]=Short.parseShort(eingabe[j].substring(zeichen1+1,zeichen2)); objekt[j][2]=Short.parseShort(eingabe[j].substring(zeichen2+1,eingabe[j].length()-1)); objekt[j][3]=Short.parseShort(eingabe[j].substring(zeichen2+1,eingabe[j].length()-1)); objekt[j][2]+=objekt[j][0]; objekt[j][3]+=objekt[j][1]; } } else { //andernfalls Eingabefehler fehler = true; } } } catch (NumberFormatException e) { fehler = true; } if(fehler==false) { //Operator "?" if(eingabe[i].equals("?")) { //es stand nicht exakt in der Angabe was zu tun ist bei "?", vergleiche ich jedes Objekt mit jedem for(k=1;kobjekt[objektb][0]) && (objekt[objektb][1]objekt[objekta][1])) { ausgabe="TRUE"; } else { ausgabe="FALSE"; } } //Operator "<" else if(eingabe[i].indexOf("<")!=-1) { objekta=Short.parseShort(eingabe[i].substring(0,eingabe[i].indexOf("<"))); objektb=Short.parseShort(eingabe[i].substring(eingabe[i].indexOf("<")+1,eingabe[i].length())); if((objekt[objekta][0]<=objekt[objektb][2]) && (objekt[objekta][2]>=objekt[objektb][0]) && (objekt[objektb][1]<=objekt[objekta][3]) && (objekt[objektb][3]>=objekt[objekta][1])) { ausgabe="TRUE"; } else { ausgabe="FALSE"; } } } else { ausgabe = "FALSCHE EINGABE"; } return ausgabe; } }