2017-10-13 22 views
0

如果有人能幫我解決一些小問題,我會很高興。應用程序應顯示素數並從上次顯示的圖開始。如何進行?

我希望我的應用程序在檢測到質數時顯示用戶。 現在,應用程序僅顯示最後一個primenumber,取決於while循環中的條件。如果每隔0.5秒左右列舉一次主要數字就會很好。

我試過使用thread.sleep,但應用程序不能正常工作。 當應用程序關閉然後重新啓動時,我希望計數從最後一個素數開始計數。

任何ides人?

import android.content.Context; 
import android.content.SharedPreferences; 
import android.support.v7.app.AppCompatActivity; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.TextView; 
import java.lang.Math; 
import java.lang.*; 
import java.util.concurrent.ExecutionException; 

public class MainActivity extends AppCompatActivity { 
SharedPreferences sharedPref; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    generateOddNumber(1); 
} 

private boolean isPrime(long candidate) { 
    long sqrt = (long) Math.sqrt(candidate); 
     for (long i = 3; i <= sqrt; i += 2) 
     if (candidate % i == 0) return false; 
     return true; 
} 

public void saveInfo(long prime) { 
    sharedPref = getSharedPreferences("PrimeNumbers", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = sharedPref.edit(); 
    editor.putLong("Number", prime); 
    editor.apply(); 
} 

public void getData() { 
    sharedPref = getSharedPreferences("PrimeNumbers", Context.MODE_PRIVATE); 
    long nr = sharedPref.getLong("Number", 0); 
} 

public void generateOddNumber(long x) { 
    TextView myTextView = (TextView) findViewById(R.id.textView); 
    while (x < 1000) { 
     if (isPrime(x) == true) { 
      saveInfo(x); 
      myTextView.setText(String.valueOf(x)); 
      try { Thread.sleep(1000);} 
      catch (InterruptedException e){ 
       e.printStackTrace(); 
      } 
     } 
     x = x + 2; 
    } 
} 
} 

回答

0

您已準備好將最後一個素數保存到共享首選項中。所以在調用「generateOddNumber(1)」之前,你只需要保存素數就可以了。

試試這個。希望這會起作用

protected void onCreate(Bundle savedInstanceState) { 
super.onCreate(savedInstanceState); 
setContentView(R.layout.activity_main); 
sharedPref = getSharedPreferences("PrimeNumbers", Context.MODE_PRIVATE); 
long nr = sharedPref.getLong("Number", 1); 
generateOddNumber(nr); 
} 
0

你必須在你的onCreate和onStop方法中處理這個問題。首先嚐試瞭解這些回調。你可以在這裏閱讀更多Activity Lifecycle。當你的應用程序停止時,你需要保存,當它的恢復加載任何你想要的。

爲什麼你需要每次暫停當前線程。

try { Thread.sleep(1000);} 

在這裏你可以找到解釋和示例代碼usifg Shared Preferences

+0

我想應用程序來顯示primenumber對於用戶來說,一會。像1,然後3,然後7等等。我該如何繼續? – CodeKiller

+0

你可以使用[AsyncTask](https://developer.android.com/reference/android/os/AsyncTask.html)。我在答案中解釋了你需要經歷的步驟。您需要花一些時間閱讀文檔並理解它。無論如何,在onCreate開始你的任務來產生你的號碼和填充用戶界面。當應用程序正在終止時,將該號碼保存在onSstop()中。你可以在onCreat()中讀回它 – Vahid

相關問題