Just nu i M3-nätverket
Gå till innehåll

Nybörjarproblem i java


brorsan

Rekommendera Poster

Håller på med ett par labbar till skolan och har kört fast lite. Vi håller på med error-exceptions men det vill inte riktigt fungera som jag vill att det ska. Jag har två klasser, StringCheck och StringTooLongException. Den sistnämnda ser ut såhär:

 

public class StringTooLongException extends Exception
{
   StringTooLongException(String message)
   {
       super(message);
   }
} 

 

När CheckString-klassen ser ut såhär fungerar det, den slänger en exception:

 

public class CheckString
{
   public static void main(String[] args) throws         StringTooLongException
   {
       StringTooLongException problem = new StringTooLongException("String too long. Only five characters");
       if("heeeeej".length() > 5)
           throw problem;
   }
} 

 

Men i uppgiften står det att vi ska testa med en funktion checkStringLength. När jag gör på nedanstående sätt får jag ett felmeddelande "illegal start of expression" på raden med funktionsdeklarationen:

public class CheckString
{
   public static void main(String[] args) throws StringTooLongException
   {
       StringTooLongException problem = new StringTooLongException("String too long. Only five characters");
       checkStringLength("heeeeeeeej");
       public void checkStringLength(String text)
       {
           if(text.length() > 5)
               throw problem;
       }
   }
} 

 

Någon som kan förklara vad jag gör för fel och hjälpa mig fixa det? :)

 

 

EDIT: Fan vad rörigt forumet blev med nya layouten, gillade det gamla betydligt bättre. När gjorde dom detta?? (Jag har varit frånvarande i ett halvår :)

[inlägget ändrat 2004-03-24 09:19:02 av brorsan]

Länk till kommentar
Dela på andra webbplatser

En högermåsvinge (den som avslutar main()) har hamnat fel. Ta bort en högermåsvinge på slutet och lägg till en precis innan du definierar checkStringLength().

 

Länk till kommentar
Dela på andra webbplatser

 checkStringLength("heeeeeeeej");
public void checkStringLength(String text)

 

Du kan ju inte ha en metoddeklaration på raden efter ett anrop (mitt i en metod).

 

Länk till kommentar
Dela på andra webbplatser

Du menar såhär:

 

public class CheckString
{
   public static void main(String[] args) throws StringTooLongException
   {
       StringTooLongException problem = new StringTooLongException("String too long. Only five characters");
       checkStringLength("heeeeeeeej");
   }
   public void checkStringLength(String text)
   {
       if(text.length() > 5)
       throw problem;
   }       
}

 

Det gav ett annat felmeddelande: "Non-static method chsckStringLength(java.lang.String) cannot be referenced from a static context"

 

Jag provade då att ta bort "static" från maindeklarationen men det resulterade i att felmedellandet blev samma som det ursprugliga: "illegal start of expression" :(

 

Länk till kommentar
Dela på andra webbplatser

Det gav ett annat felmeddelande: "Non-static method chsckStringLength(java.lang.String) cannot be referenced from a static context"

Precis som det står. main är en static-metod och "checkStringLength" är en vanlig metod, du kan alltid ropa på static-metoder men för att ropa på en instansmetod måste du ha en instans (alltså en pekare till ett objekt, objekt skapas genom att du använder "new").

 

Förslagsvis gör du den senare metoden static.

 

 

Länk till kommentar
Dela på andra webbplatser

Tack, gjorde den static, men får nu felmeddelandet "cannot resolve symbol" på raden "throw problem;"... och flyttar jag " StringTooLongException problem = new StringTooLongException("String too long. Only five characters");" till checkStringLength-deklarationen får jag felmeddelandet: "unreported exception StringTooLongException; must be caught or declared to be thrown"...

 

Jag är riktig nybörjare på java om ni inte reda märkt det... ;)

 

EDIT Det kanske är jag som tolkat uppgiften fel helt enkelt? Den lyder i alla fall:

"Labbuppgift 1 kap 8 Skapa ett eget undantag som kastas och fångas

Gör en egen undantagsklass som heter StringTooLong och som utvidgar Exception klassen.

Konstruktorn för denna klass har en formell parameter som heter message av typen String.

 

Skapa en ny klass med namnet StringChecker som har en metod som heter checkStringLength(String text) som kastar ett undantag av typen StringTooLong om längden på strängen är större än 5. Medddelande ska vara ”String too long, not more than five characters”.

 

Testa denna klass och dess metod med den aktuella parametern ”Hej”. Fånga felet. Skriv felmeddelande till konsolen.

____________________

/brorsan

http://www.brorsan.com

 

[inlägget ändrat 2004-03-24 10:06:57 av brorsan]

Länk till kommentar
Dela på andra webbplatser

Jag är riktig nybörjare på java om ni inte reda märkt det... ;)

Det verkar framförallt som om du skolkat från ett par lektioner. :)

 

Vill gärna hjälpa men om jag ska vara ärlig så tror jag bara det blir svårare om vi sitter och löser dina kompileringsfel ett efter ett. Du måste fatta grunderna först, annars kommer du aldrig att förstå varför det blir fel och varför eforums lösningar rättar till.

 

Om din engelska är hyffsad så rekommenderar jag att du tankar hem "Thinking in Java 3rd Edition" (http://www.mindview.net/Books/TIJ/, en PDF-version finns här: http://www.planetpdf.com/mainpage.asp?WebPageID=314).

 

Den är utsökt, gratis och går igenom alla grunder som är viktiga att kunna (samt en hel del utöver det).

 

Suns Java Tutorial (http://java.sun.com/docs/books/tutorial/) är också rätt bra om man är nybörjare.

 

Lär dig hur klasser, metoder, exceptions och sånt funkar. Så fort man kan grunderna blir det mycket lättare med allt annat.

 

Finns säkert bra introduktioner på svenska också, jag känner bara inte till någon.

 

 

[inlägget ändrat 2004-03-24 10:12:37 av fhe]

Länk till kommentar
Dela på andra webbplatser

/*

* StringToLong.java

*

* Created on den 27 mars 2004, 01:40

*/

 

package crap;

 

/**

*

* @author José

*/

public class StringToLong extends Exception {

 

/** Creates a new instance of StringToLong */

public StringToLong(String message) {

super(message);

}

 

}

 

/*

* StringChecker.java

*

* Created on den 27 mars 2004, 01:39

*/

 

package crap;

 

/**

*

* @author José

*/

public class StringChecker {

 

/** Creates a new instance of StringChecker */

public StringChecker(String text) {

try {

checkStringLength(text);

} catch (StringToLong ex) {

System.out.println(ex.getMessage());

}

}

 

private void checkStringLength(String text) throws StringToLong {

if(text.length() > 5)

throw new StringToLong("String too long, not more than five characters");

}

 

/**

* @param args the command line arguments

*/

public static void main(String[] args) {

if(args == null) {

System.out.println("Usage: <some text>");

System.exit(0);

}

new StringChecker(args[0]);

}

 

}

 

 

[inlägget ändrat 2004-03-27 01:54:31 av jds]

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...