2016-08-31 2 views
0

Нет ошибок в студии android, но сбой при попытке показать случайное предложение в текстовом представлении. Итак, я новичок и пытаюсь сделать приложение, которое рандомизирует предложение, это сбой на каждом эмуляторе и телефоне, на котором я его пробовал, что может быть проблемой? Спасибо за ответы заранее!Android-приложение падает при попытке перенастроить строку

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]); 
      } 
     }); 
    } 
} 

И

Файл XML для этого:

<?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

Какая ошибка отображается на вашем логарифме? –

ответ

1

Я действительно не вижу каких-либо реальных (ошибка чтения вызывает) проблемы с кодом но, я думаю, основываясь на ваших намерениях, вы ищете что-то вроде:

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

Заменить 4 с lauseet.length – Tatarize

0

В вашем массиве String есть только 4 элемента, когда вы создаете случайное число, умножающее двойное значение на 4, которое может вернуть некоторое значение, например 4.1253527, когда вы устанавливаете это случайное значение для индекса строки, что может привести к тому, что выходит за пределы исключение при нажатии на кнопку растворе

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

Я думал об этом, но 'Math.random()' не вернет ничего больше 1.0 и, следовательно, конечный результат не может быть больше 4. – Shaishav

+0

Math.random() вернет значение из 0.0 до 1.0 случайное значение double Reference проверьте это: http://www.tutorialspoint.com/java/lang/math_random.htm –

+0

Да, я понимаю, что ... я не понимаю, как может значение <= 1.0 более 4,0 при умножении на 4. – Shaishav

0

код, представленная довольно слабый и должна быть что-то подобное:

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)]); 
     } 
    }); 
} 

Хотя на самом деле значение lauseet должна быть TypedArray в XML.

Но главное, он отлично работает, как без сбоев.

Нет аварии. Отправьте логарифм с крахом и файлом, который на самом деле сбой, скорее всего, он находится в xml или ваше пространство имен ошибочно или что-то в этом роде.

https://developer.android.com/studio/debug/index.html См: Просмотр системы журнала

https://youtu.be/Jo18aTnvdhI


PS. К обсуждению комментариев: Приведение двойного к int, заставляет int быть перекрытым. Таким образом, [0,1] становится [0-4), всегда округляется вниз. Диапазон составляет от 0,0 включительно до 1,0 эксклюзивных (вы не получите 1.0 когда-либо). Поэтому, когда он настил, он всегда будет давать либо 0,1,2,3, и эти цифры будут правильно распределены.

Смежные вопросы