M
Markus
Gast
kann mir jemand die fehler meldung erklären
ich verstehe es nicht ganz
Testen.java:8: missing return statement
{short r,g,b;
^
1 error
der programm
edit: Bitte aussagekräftige Titel verwenden!
ich verstehe es nicht ganz
Testen.java:8: missing return statement
{short r,g,b;
^
1 error
der programm
Code:
import eprog.*;
public class Testen extends EprogIO
{ public static String perform()
{short r,g,b;
final double transformationR_G = 255.0/7.0;
final double transformationB = 255.0/3.0;
double vergleich = 0.0;
short[] EckeRot;
short[] EckeGruen;
short[] EckeBlau;
EckeRot = new short[2];
EckeGruen = new short[2];
EckeBlau = new short[2];
//Schritt 1: Einlesen der RGB-Farbwerte mit Fehlerabfrage
//-------------------------------------------------------
String ausgabe ="0";
try{
r=readShort();
g=readShort();
b=readShort();
} catch (EprogException e) {
println ("?");
return ausgabe;
}
if (r<0 || r>255 || g<0 || g>255 ||b<0 ||b>255) {
println("FALSCHE EINGABE");
return ausgabe;
}
//Schritt 2: Feststellen in welchem Quader man sich befindet und Berechnung der Eckpunkte
//---------------------------------------------------------------------------------------
//ROT: Herausfinden, in welchem der sieben Quader man sich befindet
if (r==0)
{EckeRot[0]=0; EckeRot[1]=(short) Math.round(transformationR_G);
} else {
for (int zaehler=0; zaehler<=7; zaehler++) {
vergleich = Math.round(transformationR_G*zaehler);
if (r <= vergleich) { //"<=" statt "<" bewirkt, dass wenn Punkt genau auf Grenze zweier Quader liegt, der kleinere genommen wird
EckeRot[0]=(short) Math.round(transformationR_G*(zaehler-1)); //Koordinate des entsprechenden Würfels, die sich auf der Rot-Achse weiter links befindet
EckeRot[1]=(short) Math.round(transformationR_G*zaehler); //Koordinate, die sich weiter rechts befindet
break;
}
}
}
//GRÜN: Herausfinden, in welchem der sieben Quader man sich befindet (analog zu ROT)
if(g==0)
{EckeGruen[0]=0; EckeGruen[1]=(short) Math.round(transformationR_G);
} else {
for (int zaehler=0; zaehler<=7; zaehler++) {
vergleich = Math.round(transformationR_G*zaehler);
if (g <= vergleich) {
EckeGruen[0]=(short) Math.round(transformationR_G*(zaehler-1));
EckeGruen[1]=(short) Math.round(transformationR_G*zaehler);
break;
}
}
}
//BLAU: Herausfinden, in welchem der drei Quader man sich befindet (analog zu ROT)
if (b==0)
{EckeBlau[0]=0; EckeBlau[1]=(short) Math.round(transformationB);
} else { //fuer b zwischen 1 und 255
for (int zaehler=0; zaehler<=3; zaehler++) {
vergleich = Math.round(transformationB*zaehler);
if (b <= vergleich) {
EckeBlau[0]=(short) Math.round(transformationB*(zaehler-1));
EckeBlau[1]=(short) Math.round(transformationB*zaehler);
break;
}
}
}
//Sonderfall (1): Punkt ist Eckpunkt
if ((r==EckeRot[0] || r==EckeRot[1]) && (g==EckeGruen[0] || g==EckeGruen[1]) && (b==EckeBlau[0] || b==EckeBlau[1])) {
println(r + " " + g + " " + b + " " + r + " " + g + " " + b);
} else {
//Schritt 3: Berechnung der Distanzen vom eingelesenen Farbwert zu allen Eckpunkten
//---------------------------------------------------------------------------------
short[][] distanz;
distanz = new short[8][4];
int u=0;
for (int zaehler1=0; zaehler1<=1; zaehler1++) {
for (int zaehler2=0; zaehler2<=1; zaehler2++) {
for (int zaehler3=0; zaehler3<=1; zaehler3++) {
distanz[u][0]=(short) Math.round(Math.pow(r-EckeRot[zaehler1],2)+Math.pow(g-EckeGruen[zaehler2],2)+Math.pow(b-EckeBlau[zaehler3],2)); //Da Wurzelziehen die Monotonie erhaelt und der absolute Betrag der Distanz nicht gefragt, kann das Wurzelziehen entfallen
distanz[u][1]=EckeRot[zaehler1];
distanz[u][2]=EckeGruen[zaehler2];
distanz[u][3]=EckeBlau[zaehler3];
u++;
}
}
}
//Schritt 4: Berchnung der maximalen und der minimalen Distanz
//------------------------------------------------------------
int maximum=0, minimum=0, count2=0;
int[] maxMin={0,0,0,0,0,0,0,0};
//Berechnung des Maximums
for (int i=0; i<=7; i++) {
int count=0;
for (int j=0; j<=7 ;j++) {
if(distanz[i][0]>=distanz[j][0]) {count++;}
}
if (count==8) {count2++; maxMin[count2-1]=i;} //count2 zaehlt wie viele Maxima vorkommen
}
//Ueberprueft, wenn mehrere Maxima vorkommen, welches davon die groessten Koordinaten hat
for(int i=0; i<count2; i++) {
int count=0;
for (int j=0; j<count2; j++) {
if ((distanz[maxMin[i]][1]>=distanz[maxMin[j]][1])&&(distanz[maxMin[i]][2]>=distanz[maxMin[j]][2])&&(distanz[maxMin[i]][3]>=distanz[maxMin[j]][3]))
{ count++; }
}
if (count==count2) maximum=maxMin[i];
}
//Berechnung des Minimums
count2=0;
for (int i=0; i<=7; i++) { //Zuruecksetzen des schon zuvor verwendeten maxMin-Arrays
maxMin[i]=0;
}
for (int i=0; i<=7; i++) {
int count=0;
for (int j=0; j<=7 ;j++) {
if(distanz[i][0]<=distanz[j][0]) {count++;}
}
if (count==8) {count2++; maxMin[count2-1]=i;} //count2 zaehlt, wie viele Minima vorkommen
}
//Ueberprueft, wenn mehrere Minima vorkommen, welches davon die kleinsten Koordinaten hat
for(int i=0; i<count2; i++) {
int count=0;
for (int j=0; j<count2; j++) {
if ((distanz[maxMin[i]][1]<=distanz[maxMin[j]][1])&&(distanz[maxMin[i]][2]<=distanz[maxMin[j]][2])&&(distanz[maxMin[i]][3]<=distanz[maxMin[j]][3]))
{ count++; }
}
if (count==count2) minimum=maxMin[i];
}
//Schritt 5: Ausgabe der Ergebnisse
//---------------------------------
for (int i=1;i<=3;i++) {
print (distanz[minimum][i] + " ");
}
for (int i=1;i<=2;i++) {
print (distanz[maximum][i] + " ");
}
print (distanz[maximum][3]);
return ausgabe;
}
}
}
edit: Bitte aussagekräftige Titel verwenden!