2017-07-22 5 views
0

Hier ist mein Code. Ich möchte sicherstellen, dass randomNumber bleibt gleich, bis der Benutzer die richtige Nummer wählt, also versuche ich, diese Nummer über Log.i anzuzeigen. Wenn jedoch auf meine Schaltfläche geklickt wird, wird nichts auf den Android-Monitor gedruckt.Warum funktioniert Log.i nicht?

int randomNumber = (int) (Math.random() * 50) + 1; 

public void checkNumber(View view) { 
    Log.i("Number", Integer.toString(randomNumber)); 
    EditText numberEntered = (EditText) findViewById(R.id.numberEntered); 
    int numberEnteredInt = Integer.parseInt(numberEntered.getText().toString()); 
    if(!(numberEnteredInt <= 50 && numberEnteredInt >= 1)) { 
     //some code 
    } else if(numberEnteredInt < randomNumber) { 
     //some code 
    } else if(numberEnteredInt > randomNumber) { 
     //some code 
    } else { 
     //some code 
     randomNumber = (int) (Math.random() * 50) + 1; 
    } 
} 

Nur durch diese App mehrere Male ausgeführt wird, scheint es, dass der Rest meines Code richtig funktioniert (so dass ich nicht wirklich brauchen Melden Sie sich in diesem Fall arbeiten), aber ich bin neugierig, warum ist nichts auf dem Monitor angezeigt. Vielen Dank.

Update: Ok, jetzt funktioniert es perfekt; Ich weiß nicht, was vorher passierte. Ich habe bemerkt, dass einige von Ihnen empfohlen haben, "" + randomNumber anstelle von "Integer.toString" (randomNumber) zu verwenden. Ist Ersteres effizienter? Danke noch einmal.

+1

Haben Sie die Methode checkNumber überall aufgerufen? –

+0

@Kapsym Nein Muss ich? – kid

+0

Oh, warte. Ich habe checkNumber für onClick for my button eingegeben, damit es immer dann ausgeführt wird, wenn jemand auf die Schaltfläche klickt. – kid

Antwort

0

Ich glaube nicht, dass Sie überhaupt die Integer.toString() verwenden müssen. Sie können ersetzen gerade das ganze Zeile mit:

Log.i("NUMBER", "" + randomNumber); 

Wenn Sie die checkNumber() -Methode als onClick für die Schaltfläche aufrufen, sollte es unbedingt auf die Konsole Druck werden. Stellen Sie sicher, dass Ihre Konsole auf den DEBUG-Modus eingestellt ist und dass die Zeile über den Ausdrucken nicht "Keine debugbaren Anwendungen" lautet, sondern stattdessen den Namen Ihrer App.

+0

Verwendet die von Ihnen erwähnte Methode effizienter als Integer.toString()? Ich erinnere mich, irgendwo gelesen zu haben, dass die String-Verkettung eine Last bei der Speichernutzung darstellen kann, da sie bei jeder Verwendung ein neues String-Objekt erzeugt. Ich möchte nur sicherstellen, dass ich in Zukunft die richtige aussuche. Vielen Dank. – kid

+0

Für die meisten Dinge wäre es keine große Sache. Es sei denn, Sie verketten eine Menge Dinge zusammen. Wenn nur eine Variable hinzugefügt wird, ist es ziemlich vernachlässigbar, wie lange es dauern wird. Sie haben jedoch absolut Recht, dass die Verwendung einer leeren Zeichenfolge und Verkettung langsamer ist als die Verwendung von toString(). Aber toString() ist auch langsamer als die Verwendung von StringBuilder, was der effizienteste Weg ist, aber für so etwas könnte man als Overkill betrachten. Hier ist ein großartiger Artikel, der alle Optionen beschreibt, die Sie haben: http: //java-performance.info/primitive-types-to-string-conversion-and-string-concatenation/ –

0

Sind Sie sicher, dass checkNumber() in Ihrem onClickListener aufgerufen wird? Ist dies der Fall, versuchen Sie \ n der Protokollnachricht hinzuzufügen.

Log.i("Number", "\n" + randomNumber); 
+0

'toString()' wird nicht benötigt. –