我试图让我的输出显示没有括号。我觉得这是一件简单的事情,但却无法理解。
输出看起来像这样
22 ([1, 2, 11])
33 ([1, 3, 11])
44 ([1, 2, 4, 11, 22])
55 ([1, 5, 11])
66 ([1, 2, 3, 6, 11, 22, 33])
77 ([1, 7, 11])
但我希望它没有显示括号,所以看起来像这样
22 (1, 2, 11)
33 (1, 3, 11)
44 (1, 2, 4, 11, 22)
55 (1, 5, 11)
66 (1, 2, 3, 6, 11, 22, 33)
77 (1, 7, 11)
这是我的一段代码
import java.util.ArrayList;
public class Palindrome {
public static void main(String[] args) {
int e = 0;
// palindromic composite number
int drome = 0;
// starting int range
int start = 10;
// ending int range
int end = 10000;
for (int i = start; i <= end; i += 1) {
if (isPalindromic(i)) {
drome = i;
if (!isPrime(i))
System.out.println(drome + " (" + getDivisors(drome) + ")");
}
}
}
// gets gets the divsors and adds them to arraylist if divsor is a
// palindrome
public static ArrayList getDivisors(int number) {
ArrayList numbersDivisor = new ArrayList();
int i = 0;
for (i = 1; i < number; i++) {
if (number % i == 0 && i != number && isPalindromic(i)) {
numbersDivisor.add(i);
}
}
return numbersDivisor;
}
答案 0 :(得分:1)
请尝试使用StringBuilder
:
public static StringBuilder getDivisors(int number) {
StringBuilder numbersDivisor = new StringBuilder();
int i = 0;
for (i = 1; i < number; i++) {
if (number % i == 0 && i != number && isPalindromic(i)) {
numbersDivisor.append(i).append(',');
}
}
if(0 < (i = numbersDivisor.length())) {
numbersDivisor.deleteCharAt(i - 1);//remove that last comma
}
return numbersDivisor;
}
OR
您可以在main()中替换括号:
String divs = getDivisors(drome).toString().replace("\\[", "(").replace("\\]", ")");
System.out.println(drome + divs);
OR
您可以尝试@LuiggiMendoza提供的建议。
答案 1 :(得分:1)
我认为最简单的解决方案可能是修改您的方法以返回String
之类的,
public static String getDivisors(int number) {
StringBuilder sb = new StringBuilder();
for (int i = 1; i < number; i++) {
if (number % i == 0 && i != number && isPalindromic(i)) {
if (sb.length() > 0) {
sb.append(", ");
}
sb.append(i);
}
}
return sb.toString();
}
或者,您可以从toString
重写隐式List
的结果(请编程到界面,请不要使用原始类型),如
public static List<Integer> getDivisors(int number) {
List<Integer> al = new ArrayList<>();
for (int i = 1; i < number; i++) {
if (number % i == 0 && i != number && isPalindromic(i)) {
al.add(i);
}
}
return al;
}
然后 if(!isPrime(i)){ String str = getDivisors(drome).toString(); str = str.substring(1,str.length() - 1); System.out.println(drome +&#34;(&#34; + str +&#34;)&#34;); }
答案 2 :(得分:0)
System.out.println()
方法使用toString()
方法(深入内部)为作为参数传递的任何对象打印内容。
ArrayList
类继承AbstractList
继承AbstractCollection
类,其中java.lang.Object
类的toString()
方法被覆盖。以下是AbstractCollection
类中的toString()方法的默认实现:
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext())
return "[]";
StringBuilder sb = new StringBuilder();
sb.append('[');
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext())
return sb.append(']').toString();
sb.append(", ");
}
}
创建一个继承ArrayList
类的新类,并覆盖toString()
方法。使用代码阅读内联注释:
public class BracketlessArrayList<E> extends ArrayList<E> {
/**
* For serialization.. ignore this
*/
private static final long serialVersionUID = 1L;
public String toString() {
Iterator<E> i = iterator();
if (! i.hasNext()){
//return "[]"; //line removed to avoid square brackets
return "";
}
StringBuilder sb = new StringBuilder();
//sb.append('['); //line removed to avoid square brackets
for (;;) {
E e = i.next();
sb.append(e == this ? "(this Collection)" : e);
if (! i.hasNext()){
//line removed to avoid square brackets
//return sb.append(']').toString();
return sb.toString();
}
sb.append(", ");
}
}
}
现在以这种方式修改getDivisors()
方法:
public static BracketlessArrayList getDivisors(int number) {
BracketlessArrayList numbersDivisor = new BracketlessArrayList();
int i = 0;
for (i = 1; i < number; i++) {
if (number % i == 0 && i != number && isPalindromic(i)) {
numbersDivisor.add(i);
}
}
return numbersDivisor;
}
那将以正确的方式为你完成工作。