[JAVA] Hoe een char niks meegeven

Pagina: 1
Acties:

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ik heb een character en die wil ik de waarde niks meegeven hij mag dus in mijn console geen output hebben.

Als ik dit doe:

Java:
1
char D = ' ';


Dan krijg ik op de betreffende plaats een spatie, maar dat moet dus niks zijn en met niks bedoel ik dus dat er niks mag gebeuren.

Wat is hier de opdracht voor?

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 22-08 13:19

.oisyn

Moderator Devschuur®

Demotivational Speaker

Je moet sowieso checken of het een goede char is voordat je 'm output (je kunt immers niet niets outputten)

Dus wat dat betreft kun je kijken of het een spatie is, maar de spatie zelf is natuurlijk geen nette oplossing. Je kunt hiervoor gewoon unicode 0 gebruiken:
Java:
1
char c = 0;

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Kijk ik ben een programma aan het maken en daar wil ik een bepaalde transformatie op een woord uitvoeren. Hierbij moeten letters op het moment dat ze niet voldoen aan een gestelde voorwaarde uit die String verwijderd worden.

Ik bouw dus eigenlijk per letter een nieuw woord, op het moment dat een letter er wel bij hoort kan ik deze ook aan die nieuwe string toevoegen. Maar als deze er niet bij hoort wil ik hem dus NIET toevoegen alleen weet ik dus niet hoe dit moet.

Simpel is deze check:

Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public static String Stap2(String Stap1)
    // post: the uppercase letters of s are converted to lowercase
{
  String result = "";
  int i;
  char B;
  char A = '!';
  char C = ' ';
  for (i = 0; i < Stap1.length(); i++)
  {
    if (i == 0)
    {
      boolean x;
      x = klinkertest(i, Stap1);

      if (x==true)
      {
        B = A;
      }
      else
      {
        B = Stap1.charAt(i);
      }

      result += B;
    }

    else
    {
      boolean x;
      x = klinkertest(i, Stap1);

      if (x==true)
      {
        B = C;
      }
      else
      {
        B = Stap1.charAt(i);
      }

      result += B;
    }
  }
  return result;
}


Op de plaats waar nu die C staat moet dus iets worden ingegeven wat betekent dat B in de nieuwe string geen waarde geeft en dus geen plaats in bezet mag houden.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Sory het comment in het groen was nog bij een ander stukje proggen nodig, dat is hier dus niet van toepassing

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Tip 1:Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif

Tip 2: Kan je niet gewoon een copy aanmaken en de betreffende letter eruit slopen?

Tip 3: Zie ik dat nou verkeerd, of staat in het if en het else gedeelte precies dezelfde code?

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Uhhh, nee als je kunt zien is de eerste if alleen voor de eerste letter en de else voor de rest van de letters en idd daar moet bijna dezelfde actie voor worden uitgevoerd.

Wat bedoel je precies met een copy.

Sorry, had effe het verkeerde knopje gebruikt in plaats van edit :P

  • reskobon
  • Registratie: November 2001
  • Laatst online: 14-08 22:26
Je kan hem toch nullificeren met NULL, alleen dan moet je een nullpointer exception afvangen.

Maar waarom doe je niet dit:

Java:
1
char c = "";

Leeg


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

BSeB schreef op 15 mei 2003 @ 11:17:
Uhhh, nee als je kunt zien is de eerste if alleen voor de eerste letter en de else voor de rest van de letters en idd daar moet bijna dezelfde actie voor worden uitgevoerd.
Ik heb het over de "if (i== 0)", volgens mij heb jij het over de andere. In die if van mij zie ik twee keer precies dezelfde code staan, ofwel kijk ik ergens straal overheen.
BSeB schreef op 15 mei 2003 @ 11:17:
Uhhh, nee als je kunt zien is de eerste if alleen voor de eerste letter en de else voor de rest van de letters en idd daar moet bijna dezelfde actie voor worden uitgevoerd.
Wat bedoel je precies met een copy.
Ik weet ff niet meer vanbuiten hoe het zit met shallow copy's enzo (Java is weer ff geleden), maar als je de string toekent aan een andere variabele en dan ermee gaat tamperen, heb je volgens mij al een kopie.

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
reskobon schreef op 15 mei 2003 @ 11:25:
Je kan hem toch nullificeren met NULL, alleen dan moet je een nullpointer exception afvangen.

Maar waarom doe je niet dit:

Java:
1
char c = "";
Sorry, maar dit herkent hij dus niet:

E:\My Documents\Reductions.java:23: incompatible types
found : java.lang.String
required: char
char C = "";
^
1 error

Dus werkt niet helemaal. Maar dit is de eerste keer dat ik het doe dus snap het niet helemaal. Ik kan hem elke char meegeven behalve degene die ik wil.

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 10:39

Janoz

Moderator Devschuur®

!litemod

reskobon schreef op 15 May 2003 @ 11:25:
Je kan hem toch nullificeren met NULL, alleen dan moet je een nullpointer exception afvangen.

Maar waarom doe je niet dit:

Java:
1
char c = "";
Omdat een character geen string is. Een string is een rij van 0 of meer characters. Een character is gewoon 1 teken. Niks meer, niks minder.

Waarom het niet gaat werken is omdat een string geen linked list is, maar een array. Waneer er een teken tussenuit gehaald wordt moeten alle opvolgende tekens een plekje terug geschoven worden.

De oplossing van dit probleem is dan ook dat er een nieuwe string moet worden opgebouwd of er moet gebruik gemaakt worden van een Stringbuffer. Hierin kun je (als ik het goed herinner) stukken vervangen voor stukken van een andere lengte.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Btw:
Java:
1
2
String s = "\0"; // string
char c = '\0'; // char

Tenminste, zo was het in C++ (maar dan string met kleine letter), maar ik dacht dat dat ook voor Java gold.

[ Voor 8% gewijzigd door GrimaceODespair op 15-05-2003 11:37 ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/quote.gif ipv Afbeeldingslocatie: http://gathering.tweakers.net/global/templates/got/images/icons/edit.gif }:O

[ Voor 90% gewijzigd door GrimaceODespair op 15-05-2003 11:39 ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • Exar
  • Registratie: Juni 2001
  • Laatst online: 21-08 01:14
Grimace heeft gelijk over die if.....
Je if(i==0) is volkomen zinloos als je bij else precies hetzelfde doet.....

[ Voor 10% gewijzigd door Exar op 15-05-2003 11:40 ]

Hoekwoning 2021, 100m2 vvw, ERST20D-VM2D, SUZ-SWM60VA


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Sorry nu zie ik wat jullie bedoelen. Ik zal het even veranderen. Ik dacht dat ik het zo weer goed gedaan had, maar er zit een fout in, namelijk bij de eerste letter moet hij een controle uitvoeren en bij false of true moet hij een ! in de eerste plaats zetten ipv het oorspronkelijke character

*****opgelost***** -> Code is nu aangepast

Overigens zoals jullie zien ben ik allang bezig met het bouwen van een nieuwe string, het is dus eigenlijk gewoon een vraag hoe ik dat ene blokje "array" wat dus niet mee mag doen in die nieuwe string moet vergeten bij wijse van spreke.

Voorbeeld:

Ik heb een woord:

"hallo"

Dan moet hij alle klinkers eruit halen, en moet er dus over blijven:

"hll"

Dit geberud door array 1 en 4 te verwijderen. Maar mijn vraag is hoe doe je dit.

Ps. Misschein dat het zo duidelijker is.

[ Voor 51% gewijzigd door BSeB op 15-05-2003 11:54 ]


  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ja, hier staat wle het 1 en ander in, alleen mijn vraag is dan hoe kan ik dit invoegen, omdat ik op het moment dat ik dit nodig hebt ik 1 char heb en deze heb getest, als deze eruit moet is hij false in principe. Dan moet hij dus niks aan die string geven. Kan ik aan een string ook een string geven. Dus aan een betsaande string een string toevoegen?

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Ik denk toch dat je best eerst een tutorial over strings doorspit, want persoonlijk lijkt mij dit erg basic.

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
Los van het uistekende commentaar dat anderen al gaven, lijkt het me nuttig je te realiseren dat Strings in Java 'immutable' objecten zijn: je kunt ze na constructie nooit meer wijzigen! Je kunt dus feitelijk nooit karakters uit een string verwijderen, maar je kunt wel een nieuwe string construeren die gelijk is aan het origineel, maar waar alle klinkers uit zijn weggelaten.

Als je het direct goed wilt doen, gebruik je daarvoor een StringBuffer. Je leest je invoer dan gewoon sequentieel door en je voegt alle medeklinkers die je tegen komt één voor één aan de StringBuffer toe. Deze StringBuffer converteer je uit eindelijk naar een String en dit resultaat retourneer je.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Het is me gelukt, ik heb het programa wat ik al had gebruikt als een string voor het programma removechar, die haalde alle characters eruit die ik niet wilde hebben. Ik heb dus eerst alle vowels omgezet naar @ en daarna deze eruit laten filteren.

Omslachtig maar het werkt.

  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
BSeB schreef op 15 May 2003 @ 12:49:
Ik heb dus eerst alle vowels omgezet naar @ en daarna deze eruit laten filteren.

Omslachtig maar het werkt.
Niet alleen omslachtig, maar ook inefficient en het werkt niet als er al '@' in je string voorkwam. Daarbij is je code onnodig ingewikkeld. Maar goed, als jij er tevreden mee bent...

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Ja, maar er komen in het begin geen andere tekens als het gewone alfabet in voor, omdat ik daarop laat testen.

Verder ben ik nu weer een stukje verder en nu krijg ik fouten tijdens het draaien van het programma. Namelijk dit soort fouten:

> Executing: C:\Program Files\ConTEXT\ConExec.exe "C:\Program Files\j2sdk1.4.1_02\bin\java.exe" Reductt

java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(String.java:460)
at Reductt.dubbeltest(Reductt.java:48)
at Reductt.Stap2(Reductt.java:26)
at Reductt.main(Reductt.java:11)
> Execution terminated by user.

Wat voor fouten zijn dit, want dit heb ik nog nooit gehad, als ik niet weet wat het is kan ik het niet oplossen.

  • GrimaceODespair
  • Registratie: December 2002
  • Laatst online: 10:32

GrimaceODespair

eens een tettenman, altijd ...

Saiya, ik denk dat je toch beter eerst een Java tutorial ter hand neemt, want je gaat van basic naar zeer basic.

Om dan toch constructief te zijn: je spreekt de string aan op een index die niet bestaat (waarschijnlijk voorbij zijn lengte).

[ Voor 37% gewijzigd door GrimaceODespair op 15-05-2003 15:43 ]

Wij onderbreken deze thread voor reclame:
http://kalders.be


  • Soultaker
  • Registratie: September 2000
  • Laatst online: 22-08 01:56
BSeB schreef op 15 mei 2003 @ 15:39:
Ja, maar er komen in het begin geen andere tekens als het gewone alfabet in voor, omdat ik daarop laat testen.
Het blijft een weinig solide functie: hij is bijvoorbeeld niet herbruikbaar in situaties waarin niet aan die voorwaarde voldaan is. Het is sowieso zonde om een veel te moeilijke oplossing te implementeren als er een simpelere én betere is.
Verder ben ik nu weer een stukje verder en nu krijg ik fouten tijdens het draaien van het programma. Namelijk dit soort fouten:

[..]
java.lang.StringIndexOutOfBoundsException: String index out of range: 5
at java.lang.String.charAt(String.java:460)
at Reductt.dubbeltest(Reductt.java:48)
at Reductt.Stap2(Reductt.java:26)
at Reductt.main(Reductt.java:11)

Wat voor fouten zijn dit, want dit heb ik nog nooit gehad, als ik niet weet wat het is kan ik het niet oplossen.
Die exception staat anders gewoon in de handleiding hoor. Als je de taal niet beheerst, mag je best bereid zijn de handleiding te gebruiken.

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
Sorry, het spijt mij, maar ik heb hier een boek voor me liggen!!!!!!

En omdat ik het daar niet in kon vinden vraag ik het hier, omdat hier altijd wle iemadn is die even een opmerking kan maken hoe het wel moet.

Verwijderd

Je kun beter StringBuffer gebruiken, dat is VEEL efficienter. (Stirng is in feite een wrapper om StringBuffer heen)

Je kan dan ook deleteCharAt gebruiken.

zie ook:
http://www.caucho.com/support/resin-interest/0106/0586.html :Y)

succus ermee

  • BSeB
  • Registratie: Juni 2001
  • Laatst online: 22-09-2025
GrimaceODespair schreef op 15 mei 2003 @ 15:41:
Saiya, ik denk dat je toch beter eerst een Java tutorial ter hand neemt, want je gaat van basic naar zeer basic.

Om dan toch constructief te zijn: je spreekt de string aan op een index die niet bestaat (waarschijnlijk voorbij zijn lengte).
Dank je dat je dat zei over die String, hij ging idd oneindig lang door met een bepaalde actie op een woord van 5 letters waardoor de string over de max heen ging. Ik weet nu wata het prob ligt en ga dat nu even oplossen

  • Dash2in1
  • Registratie: November 2001
  • Laatst online: 19-08 23:13
bedoel je niet gewoon zoiets (dus in dit geval de startString zonder klinkers)?

code:
1
2
3
4
5
6
7
8
String startString = "een aap die geen bananen eet";
StringTokenizer strTok = new StringTokenizer(startString,"aeiou");
StringBuffer strBuf = new StringBuffer();
while(strTok.hasMoreTokens())
{
  strBuf.append(strTok.nextToken());
}
System.out.println(strBuf.toString());

  • windancer
  • Registratie: Maart 2000
  • Laatst online: 18-08 22:36
Dit klinkt als een mooie gelegenheid om reguliere expressies te gebruiken. Kijk maar eens naar de classes in java.util.regex

Oooooh, heel mooi met String.replaceAll(String regex, String replacement):
Java:
1
s.replaceAll("[aeiou]", "");

zou moeten werken.

[ Voor 37% gewijzigd door windancer op 15-05-2003 20:22 . Reden: Convenience method gevonden ]

Pagina: 1