Palindroom

  • Onderwerp starter Onderwerp starter Tek
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Tek

Nieuwe gebruiker
Lid geworden
30 sep 2008
Berichten
3
Ik heb een opdracht voor op de universiteit. Ik ben een beginner en heb nauwelijks ervaring. Op het moment zit ik helemaal vast. Ik wil natuurlijk geen volledige antwoorden (nouja, het zou wel leuk zijn :p), ik wil vooral op weg geholpen worden.

De opdracht is hier te lezen (een pdf file). Ik hoop dat iemand mij weer een beetje op weg kan helpen.

Code:
import java.util.Scanner;

 public class Opgave4 {

   public static void main(String[] args) {
      char again;

      do {
         System.out.print("Typ een zin, woord of cijferreeks in: ");
         Scanner scanner = new Scanner(System.in);
         String reeks = scanner.nextLine();
         methoden(reeks);
         System.out.println();
         System.out.print("Wilt u nog iets controleren? [y/n]: ");
         again = scanner.next().charAt(0);
      } while (again == 'y');
   }

   private static void methoden(String reeks) {

      isGetallenReeks(reeks);
         if (isGetallenReeks(reeks) == true) {

         System.out.print("De invoer is een getallenreeks.");
         }
         
      isZin(reeks);
         if (isZin(reeks) == true) {

         System.out.print("De invoer is een zin.");
         }
         
      isWoord(reeks);
         if (isWoord(reeks) == false) {

         System.out.print("De invoer is een woord");
         }
   }

   private static boolean isGetallenReeks(String reeks) {

      woordOfGetal(reeks);
      boolean waarde = woordOfGetal(reeks);
      return waarde;
   }

   private static boolean isZin(String reeks) {

      for (int i = 0; i < reeks.length(); i++) {
         if (reeks.charAt(i) == 32) {
         return true;
         }
      }
         return false;
   }


   private static boolean isWoord(String reeks) {

      for (int i = 0; i < reeks.length(); i++) {
         if (reeks.charAt(i) == 32) {
         return true;
         }
      }
         return false;
   }

   private static boolean woordOfGetal(String reeks) {
      int getal = 0;
      int letter = 0;

      for (int i = 0; i < reeks.length(); i++) {
         if (reeks.charAt(i) >= 48 && reeks.charAt(i) <= 57);
            getal++;
         if (reeks.charAt(i) >= 65 && reeks.charAt(i) <= 90);
            letter++;
         if (reeks.charAt(i) >= 97 && reeks.charAt(i) <= 122);
            letter++;
         }
      if (getal > letter)
         return true;
      else
         return false;
   }
}

Het zit zo. De definitie van een zin in de opdracht is een opeenvolging van karakters (cijfers of letters) MET één of meerdere spaties. Een woord mag ook een combinatie zijn van letters en cijfers, MAAR hij mag geen spaties bevatten en het is ook geen woord meer als er meer cijfers dan letters zijn. In dat geval is het een getallenreeks. Mijn probleem is dat op dit moment iets wat een getallenreeks zou moeten zijn aangegeven wordt als een woord en ik zie maar niet wat er fout is.

Het 2e deel van de opdracht is het filtreren van de invoer. Uit de zin en het woord moeten de cijfers weg en bij een getallenreeks de letters. Kan iemand mij hiermee op weg helpen?

Verder wilde ik nog even melden dat ik alleen charAt(), length() en toCharArray() uit de String klasse mag gebruiken. Geen enkele andere is toegestaan.

Het allerlaatste onderdeel. Kijken of het inderdaad een palindroom is of niet begrijp ik al. Deze staat ook als voorbeeld in mijn Java boek.

Alvast bedankt!
 
Kijk eerst eens goed naar je isGetallenReeks(...) functie. Daarin roep je 2 maal de woordOfGetal functie aan, maar de eerste keer doe je niets met het resultaat.

Verder kun je de woordOfGetal functie veel duidelijk maken voor jezelf. Schrijf er bijvoorbeeld eens commentaar bij wat alles precies doet.

Ten slotte doet jouw isWoord(...) functie precies hetzelfde als isZin(...), wat natuurlijk nooit de bedoeling kan zijn. Kijk dus eerst zelf nog eens kritisch naar je eigen (?) code.
 
Ik zal er eens goed naar kijken.

De isWoord en isZin doen inderdaad hetzelfde, maar beide verwachten een ander resultaat.

Het duidelijker maken voor mijzelf is altijd mijn laatste stap. Ik wil eerst dat hij werkt.
 
Je kunt het toch pas werkend maken als je begrijpt wat er gebeurt?

De functie woordOfGetal geeft als resultaat 'true' als de string een woord of getal is. De structuur van je programma wordt dan:

Code:
if(isZin(...))
{
   // de invoer is een zin
}
else if(woordOfGetal(...))
{
  if(isWoord(...))
  {
    // de invoer is een woord
  }
  else
  {
    // de invoer is een getal
  }
}
else
{
  // onbekende invoer
}

Je hoeft dan alleen nog maar de functies 'isZin', 'woordOfGetal' en 'isWoord' in te vullen.
 
En dat is dus mijn probleem. Die opbouw is 20x makkelijker te begrijpen dan wat ik heb, maar ik moet mij aan de opdracht houden en volgens die opdracht moete alles in aparte methodes gestopt worden. Daardoor wordt het onoverzichtelijk.

Waar ik zelf op het moment moeite mee heb is het feit dat iets een woord is als er geen spaties in staan en er meer letters zijn dan getallen. Ik heb het al een aangepast zodat de isWoord methode aan allebei de voorwaardes voldeed, maar toen gaf hij hetzelfde.

Edit: Ik heb het allemaal wat veranderd. Ik heb nogsteeds hetzelfde probleem.

Edit 2: Hij werkt nu eindelijk. Het probleem; het vergeten van else statements. Heel dom dus.

Als iemand tips heeft voor het filtreren van letters uit de cijferreeks en cijfers uit een woord en cijfers en spaties uit een zin zou ik dit heel fijn vinden.

Edit 3: Met dank aan een klasgenoot ben ik erachter gekomen. Hij werkt nu volledig.

Als iemand intresse heeft in de oplossing kan je me altijd een Pm'etje sturen.

Bedankt voor je reacties Sauria.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan