簡體   English   中英

如何為Prime Checker [Java]允許更多輸入和返回因子?

[英]How to allow more entry and return factors for Prime Checker [Java]?

我着手編寫一個質數檢查器:

import java.util.Scanner;
public class PrimeChecker {

    int userEntry;
    int even_check;
    int odd_check;

    final void run(String[] args)
    {
        Scanner jaiho = new Scanner(System.in);
        System.out.printf("Please enter a prime number: %n");
        userEntry = jaiho.nextInt();
        even_check = userEntry % 2; // This is to get remainders
        odd_check = userEntry % 3; // If its not a multiple a remainder tells us that.
        System.out.println("Even Check is: " + even_check);
        System.out.println("Odd Check is: " + odd_check);

        if (even_check > 0 && odd_check > 0)
        {
            System.out.printf("This number is a prime number! Hoorah!");
        }   
        else if (userEntry == 2 || userEntry == 3)
        {
            System.out.printf("This number is a prime number! Hoorah!");
        }
        else
        {
            System.out.printf("This number is not a prime number.");
        }       
    }
}

基本流程:用戶輸入數字。 系統檢查並打印回“ it's prime”或“否,它不是prime”。 到目前為止,它是可行的,但是我還沒有努力破解它。

1)如何允許輸入更多號碼並立即檢查? EG,用戶輸入“ 3,6,89,13”,系統返回“素數,而不是素數,素數,素數”

2)返回因子的功能。 我想讓它簡單地返回2或3作為因子。 EG,用戶輸入“ 32”,系統返回“此數字不是素數。2是一個因數。”

我不一定需要完整的答案,但是我確實需要一些技巧和代碼。

JP回答后-------------------------------- ----------------

import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PrimeChecker {

    String primeOrNot = "(";

    final void run(String[] args)
    {
        Scanner jaiho = new Scanner(System.in);
        System.out.printf("Please enter a prime number: %n");
        String userEntry = jaiho.next();
        Pattern p=Pattern.compile("\\((\\d)+(?:,(\\d+))*\\)");
        Matcher m = p.matcher(userEntry);
        if (m.matches())
        {
            for (int a = 0; a < m.groupCount(); a++)
            {
                String d = m.group(a+1);
                int i = Integer.parseInt(d);
                int even_check = i % 2; // This is to get remainders
                int odd_check = i % 3; // If its not a multiple a remainder tells us that.
                System.out.println("Even Check is: " + even_check);
                System.out.println("Odd Check is: " + odd_check);
                if (even_check > 0 && odd_check > 0)
                {
                    primeOrNot += "prime, ";
                }   
                else if (i == 2 || i == 3)
                {
                    primeOrNot += "prime, ";
                }
                else if (even_check == 0 || odd_check ==0)
                {
                    primeOrNot += "not a prime, ";
                }
                else
                {
                    primeOrNot += "not a prime, ";
                }   

            }
            primeOrNot += ")";
            System.out.println(primeOrNot);
        }
    }
}

例如,您首先需要解析所需的字符串(3,6,86,13)。 對於此問題,您可以使用正則表達式(現在有兩個問題(-:)。請參閱http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html 。) regexp需要解析一個parens,后面跟着一些數字,然后是一個逗號,再多次是一些數字,然后是一個結束逗號,其表達式為:

Pattern p=Pattern.compile("\\((\\d)+(?:,(\\d+))*\\)");

您需要轉義括號,並且需要說您不希望在評估模式時得到逗號,因此使用?:。 但這是行不通的,因為它不會捕獲第一個逗號之后的重復數字,而不會捕獲最后一個逗號(請參閱Java regex:重復捕獲組 )。 因此,您必須首先解析括號和第一位數字,然后重復分析逗號和隨后的數字。

    // search for parens  + digits
    Pattern p=Pattern.compile("\\((\\d+)");
    Matcher m=p.matcher(userEntry);
    // where to search from in the string
    int st=0;
    while (m.find(st))  {

            String d = m.group(1);
            // get new start index
            st=m.end();
            int i = Integer.parseInt(d);
            int even_check = i % 2; // This is to get remainders
            // prime checks
            ...
            // now we need to search for comma + digits
            p=Pattern.compile(",(\\d+)");
            m=p.matcher(userEntry);
    }
    primeOrNot += ")";
    System.out.println(primeOrNot);

從此以后,對於每個匹配的組,您都可以將因子保留在列表中,並在最后打印所有內容...

希望這可以幫助!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM