2016-04-04 12 views
2

これは私のAndroid Javaコードです。なぜ私はJavaコードのように動作していないのか分かりません。素数の例です。 1から5までの素数を求めたいとします。だから私は結果が2,3,5と期待している。しかし、結果は5つしかありません。私のJavaコードでは、私は正しい結果を得ました。私は2、3、5を意味します。私はこの問題を理解するのを助けてください。Android forループがJavaのように動作しない

@Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_prime); 
     Button btn = (Button)this.findViewById(R.id.click_btn); 
     btn.setOnClickListener(new Button.OnClickListener(){ 
      @Override 
      public void onClick(View v) { 
       TextView resp = (TextView) findViewById(R.id.response); 
       // Get number from EditText 
       EditText startnumber = (EditText) findViewById(R.id.first_number); 
       EditText endnumber = (EditText) findViewById(R.id.second_number); 

       // get the Strings from the EditTexts 
       String number1 = startnumber.getText().toString(); 
       String number2 = endnumber.getText().toString(); 

       // Convert Strings to int 
       int x1number = Integer.parseInt(number1); 
       int x2number = Integer.parseInt(number2); 

       String str = "List of prime numbers between " + x1number + " and " + x1number + ": "; 
       //resp.setText(str); 
       for(int i = x1number; i <= x2number; i++){ 
        if(isPrime(i)){ 
         resp.setText(str + String.valueOf(i)); 
        } 
       } 

      } 
     }); 
    } 
    public static boolean isPrime(int n){ 
     if(n <= 1) { 
      return false; 
     } 
     for(int i = 2; i <= n/2; i++) { 
      if (n % i == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 

ここは私のJavaコードです。

/* 
* To change this license header, choose License Headers in Project Properties. 
* To change this template file, choose Tools | Templates 
* and open the template in the editor. 
*/ 
package primenumberstwo; 
import java.util.Scanner; 

/** 
* 
* @author vubon 
*/ 
public class PrimeNumberstwo { 

    /** 
    * @param args the command line arguments 
    */ 
    public static void main(String[] args) { 
     // TODO code application logic here 
     Scanner s = new Scanner(System.in); 
     System.out.println("Enter your first number: "); 
     int start = s.nextInt(); 
     System.out.println("Enter your second number: "); 
     int end = s.nextInt(); 
     System.out.println("List of prime numbers bettween " + start + " and " + end); 
     for(int i = start; i <= end; i++){ 
      if(isPrime(i)){ 
       System.out.println(String.valueOf(i)); 

      } 
     } 
    } 

    public static boolean isPrime(int n){ 
     if(n <= 1) { 
      return false; 
     } 
     for(int i = 2; i <= n/2; i++) { 
      if (n % i == 0) { 
       return false; 
      } 
     } 
     return true; 
    } 
} 

答えて

1

問題は、Android SDKではありません。あなたのロジックは間違っています。

  String str = "List of prime numbers between " + x1number + " and " + x1number + ": "; 
      //resp.setText(str); 
      for(int i = x1number; i <= x2number; i++){ 
       if(isPrime(i)){ 
        resp.setText(str += String.valueOf(i));//see change here 
       } 
      } 
+0

ありがとうございます。それは今働いている。実際に私はAndroid SDKを学んでいます。 –

+0

解決策があれば受け入れてください。 – shobhan

1

で試してみてください:

str = str + String.valueOf(i); 
resp.setText(str); 
+0

ありがとうございました。乾杯。 –

3

あなたはただル最後の参照理由です各反復におけるTextView respの内容を上書きしています。

はこのような何かを試してみてください:

String str = "List of prime numbers between " + x1number + " and " + x1number + ": "; 
    String result = ""; 
    for(int i = x1number; i <= x2number; i++){ 
     if(isPrime(i)){ 
      result = result + " " + i; 
     } 
    } 
    if(!("".equalsIgnoreCase(result.trim()))){ 
     resp.setText(str + result); 
    } 
+0

貴重なコメントをいただきありがとうございます:) –

1

あなたはすべての素数を発見したが、最後のループ反復の最後の1で上書きされています。

String str = "List of prime numbers between " + x1number + " and " + x1number + ": "; 
    resp.setText(str); 
    for(int i = x1number; i <= x2number; i++){ 
     if(isPrime(i)){ 
      resp.setText(resp.getText() + String.valueOf(i)); 
     } 
    } 
+1

すごくうまくいきました。ありがとう 。このような理由で私は問題を理解していないことを学んでいます。幸せなコーディング –

+0

@VubonRoyあなたは歓迎です、私はupvoteと考えていますか、代わりに答えがコミュニティのためのより貴重なコメント –

+0

申し訳ありませんが、私はあなたにupvoteを与えることはできません。私の評判は非常に低いので。しかし、あなたのログインも機能します。 :)ありがとう –

関連する問題