2016-08-31 4 views
0

Keine Fehler auf Android Studio, aber Abstürze beim Versuch, zufällige Satz auf Text anzuzeigen. Also ich bin ein Anfänger und versuche, App, die Randomizes Satz macht, stürzt auf jedem Emulator und Telefon Ich habe es versucht, was könnte das Problem sein? Vielen Dank für die Antworten im Voraus!Android App stürzt ab, wenn versucht wird, String zu ramdomize

Game.java:

import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.widget.TextView; 

public class Game extends AppCompatActivity { 
    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_game); 

     final TextView textView2 = (TextView) findViewById(R.id.textView2); 
     Button button2 = (Button) findViewById(R.id.button2); 

     final String[] lauseet = {"Moro moro", "Tere tere", "Heippa hei",  "Nakkimuki ja vesi"}; 

     final int rando = (int) (Math.random()*4); 

     button2.setOnClickListener(new View.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 

       textView2.setText(lauseet[rando]); 
      } 
     }); 
    } 
} 

Und

Die XML-Datei für diesen:

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:paddingBottom="@dimen/activity_vertical_margin" 
    android:paddingLeft="@dimen/activity_horizontal_margin" 
    android:paddingRight="@dimen/activity_horizontal_margin" 
    android:paddingTop="@dimen/activity_vertical_margin" 
    tools:context="fi.itsn.junttipeli.Game"> 

    <TextView 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Tämä on väitekenttä" 
     android:id="@+id/textView2" 
     android:onClick="klikk" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:textColor="@color/abc_primary_text_disable_only_material_light" /> 

    <Button 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:text="Seuraava" 
     android:id="@+id/button2" 
     android:textStyle="bold" 
     android:onClick="klikk" 
     android:layout_alignParentBottom="true" 
     android:layout_alignParentLeft="true" 
     android:layout_alignParentStart="true" 
     android:layout_alignParentRight="true" 
     android:layout_alignParentEnd="true" /> 
</RelativeLayout> 
+0

Was ist der genaue Fehler, der in Ihrem Logcat angezeigt wird? –

Antwort

1

Ich sehe nicht wirklich ein wirkliches (Lesefehler verursacht) Problem mit dem Code aber ich denke, basierend auf Ihrer Absicht, Sie suchen nach etwas wie:

final TextView textView2 = (TextView) findViewById(R.id.textView2); 
    Button button2 = (Button) findViewById(R.id.button2); 

    final String[] lauseet = {"Moro moro", "Tere tere", "Heippa hei", "Nakkimuki ja vesi"}; 
    final Random random = new Random(); 

    button2.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      textView2.setText(lauseet[random.nextInt(4)]); 
     } 
    }); 
+0

Ersetze 4 durch lasseet.length – Tatarize

0

Ihr String-Array enthält nur 4 Elemente, wenn Sie eine Zufallszahl Ihren Multiplikationsdoppelwert mit der 4 erstellen, die einen Wert wie 4.1253527 zurückgibt, wenn Sie diesen Zufallswert auf den Index der Zeichenfolge setzen, der außerhalb der Grenzen verursachen kann Ausnahme, wenn Sie auf die Schaltfläche Lösung ist

Random ran= new Random(); 
int rando = ran.nextInt(4);// here it will return the random number between 1 to 4 
+1

Ich dachte, aber, 'Math.random()' wird nichts zurückgeben, das größer als 1.0 ist und folglich das Endergebnis nicht mehr als 4 sein kann. – Shaishav

+0

Math.random() wird Wert von zurückgeben 0.0 bis 1.0 zufälliger Wert von double Referenz überprüfen Sie dies: http://www.tutorialspoint.com/java/lang/math_random.htm –

+0

Ja, ich verstehe, dass ... was ich nicht verstehe ist, wie kann ein Wert <= 1.0 mehr als 4.0 multipliziert mit 4. – Shaishav

0

der Code als ziemlich schwach präsentiert und sollte etwas mehr wie sein:

static final String[] lauseet = {"Moro moro", "Tere tere", "Heippa hei",  "Nakkimuki ja vesi"}; 
Random random = new Random(); 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_game); 

    Button button2 = (Button) findViewById(R.id.button2); 
    button2.setOnClickListener(new View.OnClickListener(){ 
     @Override 
     public void onClick(View v) { 
      final TextView textView2 = (TextView) findViewById(R.id.textView2); 
      textView2.setText(lauseet[random.nextInt(lauseet.length)]); 
     } 
    }); 
} 

Obwohl wirklich die lauseet Werte sollte ein TypedArray in xml sein.

Aber der Hauptpunkt ist, es funktioniert gut, wie es ohne Absturz ist.

Es gibt keinen Absturz. Veröffentlichen Sie das Logcat mit dem Absturz und der Datei, die tatsächlich abstürzt, sehr wahrscheinlich ist es in XML oder Ihr Namespace ist falsch oder so.

https://developer.android.com/studio/debug/index.html Siehe auch: Sehen Sie das Systemprotokoll

https://youtu.be/Jo18aTnvdhI


PS. Zur Kommentardebatte: Wird ein double-Wert in einen int-Wert umgewandelt, bewirkt dies, dass der int-Wert nicht berücksichtigt wird. Also [0,1) wird [0-4] immer abgerundet. Der Bereich reicht von 0.0 bis 1.0 exklusiv (Sie erhalten 1.0 nie). Wenn es also leer ist, wird es immer entweder 0,1,2,3 geben und diese Zahlen werden richtig und gleichmäßig verteilt sein.

Verwandte Themen