user3560517
user3560517

Reputation:

Android for loop is not working like java

This is my Android Java code . I don't understand why it is not working like java code . it is example of prime number . Suppose we want to find prime number between 1 to 5 . So I expect the result 2, 3, 5 . But I only got the result 5 . In my Java code I got the correct result . I mean 2, 3, 5 . Please help me figure out this problem.

    @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;
    }

Here is my Java code .

/*
 * 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;
    }
}

Upvotes: 2

Views: 237

Answers (4)

Guillaume Barr&#233;
Guillaume Barr&#233;

Reputation: 4218

You are overwriting the content of the TextView resp in each iteration that's why you see just le last one.

Try something like this:

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

Upvotes: 2

Yusuf K.
Yusuf K.

Reputation: 4260

you have found all prime numbers but override with last one on last loop iterate.

Try that;

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

Upvotes: 0

shobhan
shobhan

Reputation: 1518

Problem is not in Android SDK. your logic is wrong.

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

Upvotes: 0

Miguel Benitez
Miguel Benitez

Reputation: 2322

Try with:

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

Upvotes: 0

Related Questions