我正在上大学提供的课程,并且在代码挑战中遇到一个问题。
问题是:编写Java代码以打印大小为3的所有子集。
样本输入:
arr_size = 5
arr[] = {1, 7, 3, 4, 9}
样本输出:
(1, 7, 3) (1, 7, 4) (1, 7, 9) (1, 3, 4) (1, 3, 9) (1, 4, 9)
(7, 3, 4) (7, 3, 9) (7, 4, 9)
(3, 4, 9)
我为此编写的代码:
import java.util.Scanner;
class Main{
public static void main(String args[]) {
// Type your code here
Scanner in = new Scanner(System.in);
int n = in.nextInt();
int a[] = new int[n];
for(int i=0; i<n;i++)
a[i] = in.nextInt();
for(int i=0;i<n;i++)
{
for(int j=i+1;j<n;j++)
{
for(int k = j+1; k<n; k++)
{
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ") ");
}
}
if(i<2)
System.out.print("\n");
}
}
}
我的输出与预期的输出软件匹配,但显示错误。我不知道哪里出了问题。有人可以帮我吗?
这是我的输出和预期输出的屏幕截图:
问题是由于您在下面的行末添加了无条件的额外空间:
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ") ");
空格应位于两个子集之间,但不能位于行尾。编写如下:
if (j < n - 2) {
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ") ");
} else {
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + ")");
}
如果您对三元运算符感到满意,则可以按如下所示只写一行:
System.out.print("(" + a[i] + ", " + a[j] + ", " + a[k] + (j < n - 2 ? ") " : ")"));