Permalänk
Medlem

Hjälp med enkel funktion (Java)

Jag har stött på ett litet problem i java som jag inte riktigt lyckas knäcka.

Jag behöver en funktion som tar emot en bokstav (char) och som returnerar en fördefinierad siffra som jag själv satt.

Följande bokstäver gäller:
a = 0, b = 1, c = 2 ... x = 22, y = 23, z = 24, å = 26, ä = 27, ö=28, " " = 29

Att göra det omvända, returnera bokstaven baserat på siffran löstes i O(1) tid genom att använda en array:
private static char[] alphabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','å','ä','ö',' '};

skickar vi in alphabet[4] får vi ut 'e'.

Men hur gör jag för att vända på steken och returnera siffran som en given bokstav finns på utan att använda en for-loop? (dvs. skicka in 'e' och få ut 4) vår nuvarande lösning är en serie med if-satser som löser ut värdet baserat på ascii-tabellen, men det är en lösning som troligen går att göra smidigare.

Jag är mycket tacksam för hjälp och har tittat på Map i java, men tycks behöva implementera en hash-map för att använda den, vilket inte är möjligt då hela uppgiften går ut på att bygga en primitiv hashmap. Läraren kommer se snett på oss om vi har en hashmap för att bygga våran primitiva hashmap...

Tack på förhand

/Anders

Permalänk
Medlem

Detta måste du kunna lista ut själv?
Ta en titt till på hur en array fungerar.

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Borde väl gå att lösa genom att loopa igenom hela arrayen tills du hittar det tecknet du angivit och sedan returnera platsen den ligger på?

Visa signatur

Burk Nr.1 : Asus P8Z68 V-Pro | i7 2600k @ 4,4 | EVGA GTX780 Classified | Corsair Vengeance 8GB DDR3 1600Mhz | Corsair Obsidian 650D | Corsair TX650M | Corsair H100

Burk Nr.2 : MSI P35 Neo2 | Core 2 Duo E6850 @ 3,2Ghz | Powercolor Radeon HD5850 1GB | Corsiar Twin2X 6400 2x2GB | Corsair 550W

Permalänk
Medlem
Skrivet av miFFhoe:

Borde väl gå att lösa genom att loopa igenom hela arrayen tills du hittar det tecknet du angivit och sedan returnera platsen den ligger på?

Dessvärre inte. Vi vill undvika alla former av loopar då vi vill få upp prestandan. Funktionen kommer användas vääääldigt många gånger (i storleksordningen 10^7+ antal gånger)

Permalänk
Medlem

Kan du inte bara göra typ:

int kalle(char c) { return (int)c - 97 }

Visa signatur

Corsair 16GB (4x4096MB) CL9 1600Mhz | Asus P8Z77-V PRO |
Samsung SSD Basic 830-Series 256GB | Intel Core i7 3770K 3,5Ghz |
Asus Xonar Essence STX | Noctua NH-U9B SE2 | Antec Performance One P280 | Corsair HX 850W 80+ Gold Modulär | MSI GTX 770

Permalänk
Medlem

Vi löste det tack för all hjälp

Permalänk
Medlem
Skrivet av Gemstone:

Vi löste det tack för all hjälp

Skriv då lösningen här så är andra kan ta del av det:)

Skickades från m.sweclockers.com

Visa signatur

Burk Nr.1 : Asus P8Z68 V-Pro | i7 2600k @ 4,4 | EVGA GTX780 Classified | Corsair Vengeance 8GB DDR3 1600Mhz | Corsair Obsidian 650D | Corsair TX650M | Corsair H100

Burk Nr.2 : MSI P35 Neo2 | Core 2 Duo E6850 @ 3,2Ghz | Powercolor Radeon HD5850 1GB | Corsiar Twin2X 6400 2x2GB | Corsair 550W

Permalänk
Medlem

Såhär blev lösningen... jag hade ingen anning om att Java kunde ta emot den, men det gick. Nackdelen är dock att man måste köra arraySetup() i början av sin kod.

static int[] numerical = new int[250]; public static void arraySetup(){ numerical[' '] = 0; numerical['a'] = 1; numerical['b'] = 2; numerical['c'] = 3; numerical['d'] = 4; numerical['e'] = 5; numerical['f'] = 6; numerical['g'] = 7; numerical['h'] = 8; numerical['i'] = 9; numerical['j'] = 10; numerical['k'] = 11; numerical['l'] = 12; numerical['m'] = 13; numerical['n'] = 14; numerical['o'] = 15; numerical['p'] = 16; numerical['q'] = 17; numerical['r'] = 18; numerical['s'] = 19; numerical['t'] = 20; numerical['u'] = 21; numerical['v'] = 22; numerical['w'] = 23; numerical['x'] = 24; numerical['y'] = 25; numerical['z'] = 26; numerical['å'] = 27; numerical['ä'] = 28; numerical['ö'] = 28; }