用JAVA打印素数三角形
我试图打印一个0和1的三角形。你会得到一个数字用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
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;
}
}