Προς το περιεχόμενο

Προτεινόμενες αναρτήσεις

Δημοσ.

Πρώτα από όλα καλησπέρα...

Έχω ένα παράξενο πρόβλημα στην μετατροπή float se String στην java.

 

Το πρόβλημα είναι το έξης

όταν γράφω αυτό

>replayLog="ship:"+arena.ship.x+":"+arena.ship.y;

 

το κείμενο μέσα στην replayLog είναι όπως πρέπει να είναι:

"ship:1.21211:0.2341324";

 

 

Όμως όταν πάω να προσθέσω το κείμενο στο ήδη υπάρχον κείμενο

>replayLog+="ship:"+arena.ship.x+":"+arena.ship.y;
//replayLog->string 
//arena.ship.x->float
//arena.ship.y->float

 

Τοτε μέσα στην replayLog καταλήγει να είναι αυτό:

"ship:0.0:0.0"

δηλαδή οι αριθμοί μηδενίζονται

 

έχω δοκιμάσει διαφορετικούς τρόπους όπως

 

>replayLog=replayLog+"ship:"+arena.ship.x+":"+arena.ship.y;
replayLog="ship:"+Float.toString(arena.ship.x)+":"+Float.toString(arena.ship.y);

 

άλλα συμβαίνει το ίδιο...

 

καμιά ιδέα ?

Δημοσ.

Μήπως το πρόβλημα υπάρχει από πιο πριν; Έχεις δοκιμάσει με μια println να δεις πόσο είναι το arena.ship.x πριν το χρησιμοποιήσεις για να αλλάξεις την τιμή του replayLog;

Δημοσ.

Ναι το έχω δοκιμαση ηδη ,

και αφού το replayLog="ship:"+arena.ship.x+":"+arena.ship.y δουλευη κανονικά δεν νομίζω οι μεταβλητές μου να είναι στην πραγματικότητα 0.0

Δημοσ.

Δεν ειναι null

To πρόβλημα φαίνεται να είναι στο ότι πρόσθετο το κείμενο στο κείμενο που υπαρχή ήδη(με το +=) , άλλα γιατί?

 

 

αυτός είναι ο κώδικας μου

 

>
public class ReplaySave {

String replayLog="";
Arena arena;
public ReplaySave(Arena arenai)
{
	arena=arenai;
	replayLog="";
}

int frame=0;
public void Refresh()
{
	replayLog+="ship:"+arena.ship.x+":"+arena.ship.y;
	//Tools.con("ship:"+arena.ship.x+":"+arena.ship.y); // auto einai kati san to println  kai doulevi kanonika  vgazontas tous sostous arithmous
	
	
	replayLog+="^";
	
	frame++;
	if(frame>60)
	{
		Tools.con(replayLog);
	}
}
}

 

EDIT:

Hmm γίνεται όλο και πιο παράξενο

 

οταν γραφω

>
float aa=1.21432432f;
float aa2=1.267176843452432f;
replayLog+="ship:"+aa+":"+aa2;

Το replayLog εχει κανανικα τους σωστούς αριθμούς(αα , αα2)

 

 

δηλαδή το πρόβλημα είναι στις τιμές των μεταβλητών arena.ship.x kai arena.ship.y οι οποίοι παρεμπίπτοντος είναι αυτοί

1.21433244 , 1.2671769

όποτε και το μέγεθος τους δεν είναι πρόβλημα

Δημοσ.

Δοκίμασε να βάλεις σε παρένθεση το arena.ship.x. Δες επίσης αν δουλεύει το εξής:

String str1 = arena.ship.x;

String str2 = arena.ship.y;

replayLog+= (str1 + str2);

Δημοσ.

Δοκίμασε να βάλεις σε παρένθεση το arena.ship.x. Δες επίσης αν δουλεύει το εξής:

String str1 = arena.ship.x;

String str2 = arena.ship.y;

replayLog+= (str1 + str2);

 

Μπα τίποτα από τα δυο δεν δουλευη

 

Σιγουρα αλλου ειναι το προβλημα σου.. Επισης μεγαλώνει πολυ το String με το += και θα βλεπεις την αρχη μετα μαλλον

 

 

 

Μου φαίνεται πως θα πρέπει να βρω κάποιον άλλο τρόπο .Γιατί και εδώ που τα λέμε String σε παιχνίδι στην java δεν είναι και το καλύτερο (χάρης στον gc)

 

πάντως θα σκάσω αν δεν μάθω τη πάει στραβά :mad:

Δημοσ.

Αν δοκίμαζες και με τη μέθοδο concat(String str);

 

Πάλι το ίδιο γίνεται

 

>
String temp="";
temp=temp.concat("ship:"+arena.ship.x+":"+arena.ship.y);
Tools.con(temp);// <- Βγάζει τους πραγματικούς αριθμούς
replayLog=replayLog.concat(temp);
Tools.con(replayLog);// <- Όταν το βάζω με το άλλο κείμενο  τότε βγάζει μηδενικά αντί για τους αριθμούς

Δημοσ.

AAAAAAAAA

Έβαλα Breakpoints όπως πρότεινε ο Πάρης και είδα οτι το string είχε μέσα το σωστό κείμενο...

 

 

Δικό μου το λάθος τελικά . Από το φαίνεται το logcat(που χρησιμοποιούσα για να δω τη περιεχέι η μεταβλητή) επερνε μόνο τους πρωτους 160 χαρακτήρες της μεταβλητής και τους τύπωνε ξανά και ξανά ώστε να συμπλήρωση τον πραγματικό αριθμό των χαρακτήρων.

 

 

 

(μια από αυτές τις στιγμές που απορείς πως σου ξέφυγε αυτό :lol: )

 

 

 

Σας ευχαριστώ όλους για την βοήθεια

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...