【问题标题】:Android for loop is not working like javaAndroid for 循环不像 java 那样工作
【发布时间】:2016-04-04 12:19:01
【问题描述】:

这是我的 Android Java 代码。我不明白为什么它不像 java 代码那样工作。这是素数的例子。假设我们想找到 1 到 5 之间的素数。所以我期望结果 2, 3, 5 。但我只得到了结果 5 。在我的 Java 代码中,我得到了正确的结果。我的意思是 2, 3, 5 。请帮我解决这个问题。

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

【问题讨论】:

    标签: java android math primes


    【解决方案1】:

    您在每次迭代中都覆盖了 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);
        }
    

    【讨论】:

    • 感谢您的宝贵意见:)
    【解决方案2】:

    问题不在 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
                    }
                }
    

    【讨论】:

    • 谢谢你的朋友。它现在正在工作。其实我正在学习Android SDK。
    【解决方案3】:

    尝试:

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

    【讨论】:

    • 感谢您的帮助。干杯
    【解决方案4】:

    您已找到所有素数,但在最后一个循环迭代时用最后一个覆盖。

    试试看;

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

    【讨论】:

    • 太好了,它现在正在工作。谢啦 。我正在学习这个原因我没有弄清楚问题。乐于编码
    • @VubonRoy 不客气,我认为赞成或接受而不是评论答案对社区更有价值
    • 对不起朋友,我不能给你点赞。因为我的名声很低。但您的登录也有效。 :) 谢谢
    猜你喜欢
    • 1970-01-01
    • 2022-06-12
    • 1970-01-01
    • 2020-02-02
    • 2011-06-02
    • 1970-01-01
    • 2022-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多