用JAVA打印素数三角形

用JAVA打印素数三角形,java,Java,我试图打印一个0和1的三角形。你会得到一个数字N。如果N为5,则三角形应为: 1 11 111 11101 例如,我用27得到了错误的输出 1 11 111 11101 11101010 11101010001 11101010001010 11101010001010001 11101010001010001010 以非素数结尾的行不打印,素数打印为1,非素数打印为0。我有一个问题,因为打印了一些以0结尾的行 导入java.util.Scanner public class PrimeTr

我试图打印一个0和1的三角形。你会得到一个数字
N
。如果
N
为5,则三角形应为:

1
11
111
11101
例如,我用27得到了错误的输出

1
11
111
11101
11101010
11101010001
11101010001010
11101010001010001
11101010001010001010
以非素数结尾的行不打印,素数打印为1,非素数打印为0。我有一个问题,因为打印了一些以0结尾的行

导入java.util.Scanner

public class PrimeTriangle {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner input = new Scanner (System.in);
        int n = Integer.parseInt(input.nextLine());
        boolean isPrime=false;
        boolean nums[]=new boolean[n];

        for (int i=0; i<=2; i++) {
            nums[i]=true;
        //  System.out.print(nums[i]);
        }

        for (int i=4; i<=n; i++) {
            int m=i/2;
            for (int j=2; j<=m; j++) {
                if (i%j==0) {
                isPrime=false;
                break;
                }
                else {
                isPrime=true;
                }

            }
            nums[i-1]=isPrime;

        }
char[] digits = new char[n];
        for (int i=0; i<n; i++) {
            if (nums[i]) {
                digits[i]='1';
            }
            else {
                digits[i]='0';
            }
        }
for (int i=0; i<n; i++) {
            if (digits[i]==1) {
                System.out.println (new String (digits, 0, i+1));
                /*for (int j=0; j<i; j++) {
                    System.out.print(digits[i]);
                }
                System.out.println(); */ 
            }
        }

    }

}
公共类素数三角形{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
扫描仪输入=新扫描仪(System.in);
int n=Integer.parseInt(input.nextLine());
布尔isPrime=false;
布尔nums[]=新布尔[n];
对于(int i=0;代码中的i问题:
  • 在循环中,您已将
    isPrime
    的值设置为
    true
    。只有将该数字与循环的每个计数器相除,并发现它不能被任何循环计数器整除,才能判断该数字是否为素数。因此,只有在循环完成后才能执行此操作
  • 在声明中,
    for(int i=4;i用于构建0和1的
    char[]
    ,然后打印以1结尾的所有子字符串

    static void printPrimeTriangle(int n){
    char[]primes=新字符[n];
    数组。填充(素数,'1');
    对于(intsqrt=(int)Math.sqrt(n)+1,i=1;i
    试验

    printPrimeTriangle(80);
    
    输出

    1
    11
    111
    11101
    1110101
    11101010001
    1110101000101
    11101010001010001
    1110101000101000101
    11101010001010001010001
    11101010001010001010001000001
    1110101000101000101000100000101
    1110101000101000101000100000101000001
    11101010001010001010001000001010000010001
    1110101000101000101000100000101000001000101
    11101010001010001010001000001010000010001010001
    11101010001010001010001000001010000010001010001000001
    11101010001010001010001000001010000010001010001000001000001
    1110101000101000101000100000101000001000101000100000100000101
    1110101000101000101000100000101000001000101000100000100000101000001
    11101010001010001010001000001010000010001010001000001000001010000010001
    1110101000101000101000100000101000001000101000100000100000101000001000101
    1110101000101000101000100000101000001000101000100000100000101000001000101000001
    ....:....1....:....2....:....3....:....4....:....5....:....6....:....7....:....8
    
    我创建了一个包含1和0的int数组,并打印了带有两个嵌套for循环的三角形。外部循环是I@kalina199 以下是我的方法—我能够将其简化为一个循环:)

    包bg.Cholakov;
    导入java.util.Scanner;
    公共类素数三角形{
    公共静态void main(字符串[]args){
    扫描仪=新的扫描仪(System.in);
    int n=Integer.parseInt(scanner.nextLine());
    int[]数组=新的int[n];
    StringBuilder StringBuilder=新的StringBuilder();
    对于(int i=0,j=1;i对于(int i=2;您好,欢迎光临。您能不能请您的问题包括一个给出错误输出的示例输入?还包括错误输出本身。谢谢您的检查。我用27得到错误输出,例如11 111 11101 11101010 11101010001 11101010001 11101010001010 111010100010001 11101010001010无法打印新行y和10分开,我只是注意到它没有打印7个字符的行,正如我所说的,请回答你的问题以添加信息。评论不是最好的方式。我知道有更有效的方式,但我的主要问题是它没有按预期打印。我试着按照你的建议使用新字符串,但没有thing printschar[]digits=新字符[n];用于(int i=0;我不确定我的代码应该放在哪里,所以看起来更像orderly@kalina199在问题中。编辑问题并在那里添加适当格式的代码。我放置了我的新代码。我尝试按照您的建议创建一个新字符串,但现在没有打印任何内容。谢谢您或您的输入,但目前我更关心为什么打印不正确以n=10为例。@kalina199-我已经更新了答案,将问题包括在您的代码和正确的代码中。如果有任何进一步的疑问/问题,请随时发表评论。
    
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class Main {
        public static void main(String[] args) {
            Scanner input = new Scanner(System.in);
            System.out.print("Enter the limit: ");
            int n = Integer.parseInt(input.nextLine());
            boolean nums[] = new boolean[n];
    
            for (int i = 0; i <= 2; i++) {
                nums[i] = true;
            }
    
            for (int i = 3; i < n; i++) {
                int num = i + 1, m = num / 2, j;
                for (j = 2; j <= m; j++) {
                    if (num % j == 0) {
                        nums[i] = false;
                        break;
                    }
                }
    
                // If j>m, it means that the loop did not terminate because of `break`
                if (j > m) {
                    nums[i] = true;
                }
            }
    
            // Display nums[] for testing
            System.out.println(Arrays.toString(nums));
    
            for (int j = 0; j < n; j++) {
                if (nums[j] == false) {
                    continue;
                } else {
                    for (int i = 0; i <= j; i++) {
                        if (nums[i] == true) {
                            System.out.print("1");
                        } else {
                            System.out.print("0");
                        }
                    }
                    System.out.println();
                }
            }
        }
    }
    
    Enter the limit: 15
    [true, true, true, false, true, false, true, false, false, false, true, false, true, false, false]
    1
    11
    111
    11101
    1110101
    11101010001
    1110101000101
    
    if (nums[j]==false) {
        continue;
    } else if (nums[j]==true) {
        //...
    }
    
    public class Main {
        public static void main(String[] args) {
            final int N = 5;
            StringBuilder sb;
            for (int i = 1; i <= N; i++) {
                sb = new StringBuilder();
                for (int j = 1; j <= i; j++) {
                    sb.append(j == 1 || isPrime(j) ? 1 : 0);
                }
                if (sb.charAt(sb.length() - 1) != '0') {
                    System.out.println(sb);
                }
            }
        }
    
        static boolean isPrime(int n) {
            for (int i = 2; i <= Math.sqrt(n); i++) {
                if (n % i == 0) {
                    return false;
                }
            }
            return true;
        }
    }
    
    1
    11
    111
    11101
    
    package bg.Cholakov;
    
    import java.util.Scanner;
    
    public class PrimeTriangle {
        public static void main(String[] args) {
            Scanner scanner = new Scanner(System.in);
            int n = Integer.parseInt(scanner.nextLine());
            int[] array = new int[n];
            StringBuilder stringBuilder = new StringBuilder();
    
            for (int i = 0, j = 1; i < n; i++, j++) {
                array[i] = j;
                if (isPrime(array[i])) {
                    array[i] = 1;
                    stringBuilder.append(String.valueOf(array[i]));
                    System.out.println(stringBuilder);
    
                } else {
                    array[i] = 0;
                    stringBuilder.append(String.valueOf(array[i]));
    
                }
            }
        }
    
        static boolean isPrime(int number) {
            for (int i = 2; i <= number / 2; i++) {
                if (number % i == 0) {
                    return false;
                }
            }
            return true;
        }
    }