Avatar billede limes_planum Praktikant
03. august 2012 - 18:03 Der er 6 kommentarer og
1 løsning

Equals med to forskelligt oprettede strings

Jeg kan ikke få det her til at virke, hvorfor?


    String[] bLArray = {"0","0","0","0","0","0","0","0"};   
        String[] bLJoinFacitListe = {"EN", ....., "EL"};
       
//... en masse kode herimellem

        bLArrayJoin+="P";

//... en masse kode herimellem
       
        tmp = (String)bLArrayJoin;
        String tmp2 = (String)bLJoinFacitListe[0];
            if(tmp2.equals(tmp)){
                System.exit(0);
                }


Gætter på at det har noget at gøre med hvordan strengene er opbygget :-//
Avatar billede arne_v Ekspert
03. august 2012 - 21:22 #1
tmp2.equals(tmp)

returnerer true, hvis de to strenge er ens.

Din kode snippet fortaeller at tmp2 er "EN" og at tmp slutter med "P", saa de er ikke ens.
Avatar billede limes_planum Praktikant
03. august 2012 - 21:40 #2
ok, min fejl:

Facitlisten af gyldige ord:

String[] bLJoinFacitListe = {"EN", ...(her 100 andre gyldige ord)..., "EL"};

-> det er en del af et spil hvor collision detection afgør hvilket ord-kombination der samles og sammenlignes op mod;

(hvis p-bogstav fanges) bLArrayJoin+="P";
(hvis e-bogstav fanges)bLArrayJoin+="E";
(hvis l-bogstav fanges)bLArrayJoin+="L";
(hvis N-bogstav fanges)bLArrayJoin+="N";
etc..

- tilsammen samles de så i (teorien ordentligt) i 'bLArrayJoin', men er altså bange for hvordan Java læser denne joinede streng (hvor jeg jo altså ikke bruger .join eller concat) -> har allerede prøvet disse også for at se om det var det der var fejlen :-/
Avatar billede limes_planum Praktikant
03. august 2012 - 21:43 #3
requote; er lidt træt ..

" .....-> det er en del af et spil hvor collision detection afgør hvilket ord-kombination der samles af bogstaverne som avatar collider mod og tilsammen sammenlignes op mod de gyldige array-ord; .... "
Avatar billede arne_v Ekspert
03. august 2012 - 21:57 #4
"E" + "L" giver "EL" i Java
Avatar billede limes_planum Praktikant
04. august 2012 - 10:09 #5
det er også hvad min mange g.drawstring-realtimeoutputs siger -> det må altså være en bug i min Eclipse-installation...

Er ved at omgå problemet allerede ( - det ville have været rarest med strings) ved at opsplitte alle de gyldige ord ind til ascii-værdier (rod og merarbejde + at tingene skulle jo virke uden)

oprettede spørgsmålet da jeg troede at jeg havde overset en eller anden specifik streng-problemstilling i Java .... -> med mindre du et eller andet på tungen lukker jeg nok spørgsmålet

(ps.: her er mine imports af libs, hvis det ku ha noget at sige?;

import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.awt.image.Raster;

import org.newdawn.slick.*;
import org.newdawn.slick.state.*;
import org.lwjgl.input.Mouse;

import java.io.*;
import java.util.*;
)
Avatar billede arne_v Ekspert
04. august 2012 - 16:12 #6
Jeg tror godt du kan udelukke at der er en fejl i Java's String metoder. Der er ca. 10 millioner Java programmoerer og String er nok den mest brugte klasse overhovedet. En fejl vil vaere fundet for lang tid siden.
Avatar billede limes_planum Praktikant
04. august 2012 - 19:24 #7
ok .. kan sagtens se hvad du mener, men jeg har prøvet så meget med den java-fil (mellem 800 og 1000 linjer, før oprydning) og den strengsammenligning vi snakker om, at jeg ikke kan overskue at fejlsøge mere.
Derudover bruger jeg Slick til at lave det her 2d-spil, og orker ikke rigtigt geninstallere Eclipse (når Slick-udvidelsen også skal tilnkyttes igen).

(Men hvad er din mening om dårlige installationer (generelt her til slut) - specielt her Eclipse? (eksempelvis havde jeg en ekstremt dårlig oplevelse med X-Code på min McBook, der igen og igen installerede sig selv dårligt, hvilket gjorde at jeg opgav at udvikle Apple-apps (2000 kr ud af vinduet faktisk :-//)))

- - -

Her er den grimme lange workaround/genvej:

[Først initiering af facitliste (array af streng til ascii-værdier der bliver joinede)]:

for (int i = 0; i < bLJoinFacitListe.length; i++) {
                int raekkeCount =  bLJoinFacitListe[i].length();               
       
                newStringPos1 = bLJoinFacitListe[i].substring(0, 1);
                char charSNP1 = newStringPos1.charAt(0);
                int asciiSNP1 = (int) charSNP1;
                String asciiSNP1SamleString = Integer.toString(asciiSNP1);
                blFacitBogsTilAscii[i] = "";
                blFacitBogsTilAscii[i] += asciiSNP1SamleString;
               
                newStringPos2 = bLJoinFacitListe[i].substring(1, 2);
                char charSNP2 = newStringPos2.charAt(0);
                int asciiSNP2 = (int) charSNP2;
                blFacitBogsTilAscii[i] += Integer.toString(asciiSNP2);
               
                if (raekkeCount > 2){newStringPos3 = bLJoinFacitListe[i].substring(2, 3);char charSNP3 = newStringPos3.charAt(0);int asciiSNP3 = (int) charSNP3;blFacitBogsTilAscii[i] += Integer.toString(asciiSNP3);if(i==1){g.drawString("asciiSNP3: "+asciiSNP3, 320, 820);}}
                if (raekkeCount > 3){newStringPos4 = bLJoinFacitListe[i].substring(3, 4);char charSNP4 = newStringPos4.charAt(0);int asciiSNP4 = (int) charSNP4;blFacitBogsTilAscii[i] += Integer.toString(asciiSNP4);if(i==1){g.drawString("asciiSNP4: "+asciiSNP4, 480, 820);}}
                if (raekkeCount > 4){newStringPos5 = bLJoinFacitListe[i].substring(4, 5);char charSNP5 = newStringPos5.charAt(0);int asciiSNP5 = (int) charSNP5;blFacitBogsTilAscii[i] += Integer.toString(asciiSNP5);if(i==1){g.drawString("asciiSNP5: "+asciiSNP5, 640, 820);}}
                if (raekkeCount > 5){newStringPos6 = bLJoinFacitListe[i].substring(5, 6);char charSNP6 = newStringPos6.charAt(0);int asciiSNP6 = (int) charSNP6;blFacitBogsTilAscii[i] += Integer.toString(asciiSNP6);if(i==1){g.drawString("asciiSNP6: "+asciiSNP6, 800, 820);}}
                if (raekkeCount > 6){newStringPos7 = bLJoinFacitListe[i].substring(6, 7);char charSNP7 = newStringPos7.charAt(0);int asciiSNP7 = (int) charSNP7;blFacitBogsTilAscii[i] += Integer.toString(asciiSNP7);if(i==1){g.drawString("asciiSNP7: "+asciiSNP7, 960, 820);}}
       
        }       

---------

[ - og længere nede i mit kode sammenligningen (samlede-ascii-værdier til long-værdier der kan sammenlignes)]:

    for (int i = 0; i < bLJoinFacitListe.length; i++) {
                    tmpFacitToInt = Long.parseLong(("11"+blFacitBogsTilAscii[i]));
                    tmpSamletToInt = Long.parseLong(bogsFangetTilAscii);                   
                    if (tmpFacitToInt == tmpSamletToInt){
                        bLpointGivning = true;
                    }           
            }



- - -

/tak for hjælpen uanset..
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester