2017-02-26 6 views
0

私は、練習のために一種の脳トレーナーアプリケーションを作成しています。加算または減算される2つの数値があり、結果を推測する必要があります。 4つのボタンがあり、1つは正しい値で、残りの3つは乱数です。私はすべてのことを行う関数setQuestion()を持っています。 これらのボタンのいくつかを押すと、数字が正しいかどうかがチェックされ、スコアが更新されます。そして、新しい値を作成するように関数setQuestion()を呼び出す必要がありますが、何らかの理由でボタンをクリックするとアプリケーションがクラッシュします。関数が別の関数から呼び出された後にアプリケーションが機能しなくなる

setQuestion関数は、アプリケーションのオープン時に実行されるため機能します。 これらの2つの機能のコードは次のとおりです。

public void setQuestion(){ 
    int firstNumber = randomNumberGenerator.nextInt(101); 
    int secondNumber = randomNumberGenerator.nextInt(101); 
    int operation = randomNumberGenerator.nextInt(2); 
    TextView firstNumberTextView = (TextView) findViewById(R.id.firstNumber); 
    TextView secondNumberTextView = (TextView) findViewById(R.id.secondNumber); 
    TextView operationTextView = (TextView) findViewById(R.id.operation); 
    if(operation == 0){ 
     sum = firstNumber + secondNumber; 
     operationTextView.setText("+"); 
    } 
    else{ 
     while (secondNumber > firstNumber){ 
      secondNumber = randomNumberGenerator.nextInt(101); 
     } 
     operationTextView.setText("-"); 
     sum = firstNumber - secondNumber; 
    } 
    firstNumberTextView.setText(String.valueOf(firstNumber)); 
    secondNumberTextView.setText(String.valueOf(secondNumber)); 
    int operation1 = randomNumberGenerator.nextInt(2); 
    int operation2 = randomNumberGenerator.nextInt(2); 
    int operation3 = randomNumberGenerator.nextInt(2); 
    int answer1 = 0; 
    int answer2 = 0; 
    int answer3 = 0; 
    switch (operation1){ 
     case 0: 
      answer1 = sum + randomNumberGenerator.nextInt(9) +1 +1; 
     break; 
     case 1: 
      int temp = randomNumberGenerator.nextInt(9) +1; 
      if(sum > temp){ 
       answer1 = sum - temp; 
      } 
      else{ 
       answer1 = temp; 
      } 

    } 

    switch (operation2){ 
     case 0: 
      answer2 = sum + randomNumberGenerator.nextInt(9) +1; 
      break; 
     case 1: 
      int temp = randomNumberGenerator.nextInt(9) +1; 
      if(sum > temp){ 
       answer2 = sum - temp; 
      } 
      else{ 
       answer2 = temp; 
      } 

    } 

    switch (operation3){ 
     case 0: 
      answer3 = sum + randomNumberGenerator.nextInt(9) +1; 
      break; 
     case 1: 
      int temp = randomNumberGenerator.nextInt(9) +1; 
      if(sum > temp){ 
       answer3 = sum - temp; 
      } 
      else{ 
       answer3 = temp; 
      } 

    } 
    buttonMap.add(0); 
    buttonMap.add(1); 
    buttonMap.add(2); 
    buttonMap.add(3); 
    Collections.shuffle(buttonMap); 

    int[] valArray = {sum, answer1, answer2, answer3}; 

    for (int i = 0; i < buttonMap.size(); i++) { 
     int id = getResources().getIdentifier("b"+buttonMap.get(i), "id", getPackageName()); 
     Button button = (Button) findViewById(id); 
     button.setText(String.valueOf(valArray[i])); 
    } 




} 

そして、他:

public void answer(View view){ 
    Button clickedButton = (Button) view; 
    String clickedValue = clickedButton.getText().toString(); 
    int clickedValueInt = Integer.parseInt(clickedValue); 
    TextView allQuestion = (TextView) findViewById(R.id.totalQuestions); 
    numberOfQuestions = Integer.parseInt(allQuestion.getText().toString()); 
    TextView correctQuestions = (TextView) findViewById(R.id.correctQuestions); 
    numberOfCorrectQuestions = Integer.parseInt(correctQuestions.getText().toString()); 
    if(clickedValueInt == sum){ 
     numberOfCorrectQuestions++; 
     correctQuestions.setText(String.valueOf(numberOfCorrectQuestions)); 
    } 
    System.out.println(numberOfCorrectQuestions); 
    numberOfQuestions++; 
    allQuestion.setText(String.valueOf(numberOfQuestions)); 
    setQuestion(); 
} 

そしてここでは、logcatからテキストです。

02-26 02:34:19.965 305-305 /? E/lowmemorykiller:エラー書き込み/ proc/18289/oom_score_adj; errno = 22 02-26 02:34:19.987 850-6076 /? E/ReportTools:これはベータ版ユーザービルドではありません 02-26 02:34:20.167 850-1922 /? E/HsmCoreServiceImpl:onTransact in code:102 02-26 02:34:20.221 27755-27832 /? E/PackageLogInfoManager:checkPackageLogState、cr:[email protected]、packageNames:null 02-26 02:34:20.327 18468-18486 /? E/linker:readlink( '/ proc/self/fd/23')が失敗しました:許可が拒否されました[fd = 23] 02-26 02:34:20.328 18468-18486 /? E /リンカー:警告:ライブラリ "/system/lib64/hw/gralloc.hi6250.so"のためのrealpathを得ることができません。指定された名前を使用します。 02-26 02:34:20.335 18468-18486 /? E/linker:readlink( '/ proc/self/fd/23')が失敗しました:許可が拒否されました[fd = 23] 02-26 02:34:20.335 18468-18486 /? E /リンカー:警告:ライブラリ "libion​​.so"のrealpathを取得できません。指定された名前を使用します。 02-26 02:34:20.461 18468-18468 /? E/TotemWeather:Utilsエラー:getWidgetShowCityInfoはmyLocationを返す 02-26 02:34:20.463 18468-18485 /? E/TotemWeather:Utilsエラー:getWidgetShowCityInfo戻り値myLocation 02-26 02:34:20.522 9539-9608 /? E/HwLauncher:SettingsEx、そのようなフィールドはありません。 02-26 02:34:20.525 18468-18468 /? E/TotemWeather:Utilsエラー:getWidgetShowCityInfo戻り値myLocation 02-26 02:34:20.929 1854-1854 /? E/RegisteredServicesCache:invalidateCache set mNeedToastTableFull

+0

これは大きな機能です – user7568042

+0

私の防衛では、私はAndroidとjavaを5日前に開始しました。しかし、私はもっと機能を小さくするべきであることを知っていますよね? –

答えて

0

TextViewsのすべてのテキストを整数に変換できるかどうかを確認します。あなたの質問にスタックトレースを追加できますか?

+0

これは動作しますが、TextViewのテキストは変更されますが、アプリがクラッシュします。 –

+0

ああ、私はそれを見てみましたが、そこにはたくさんのテキストがあります。私はどこを見るべきかわかりません。私が言ったように、私は5日前にAndroidとJavaから始めました。 –

+0

私が理解したように、ボタンを押すとアプリケーションがクラッシュし、ボタンを押すと 'answer()'メソッドが呼び出されます。 –

0

エラーはこれでした。私はボタンにアクセスするために使用するbuttonMapというarrayListを持っています。 setQuestion()メソッドを呼び出すたびに、4つの値(0,1,2,3)が追加されました。このコードを削除したばかりです。

buttonMap.add(0); 
    buttonMap.add(1); 
    buttonMap.add(2); 
    buttonMap.add(3); 

この方法ではすべて動作します。

関連する問題