2016-12-01 3 views
-2

Я написал следующий код, когда я запустил его, он отображает ответ в форме [#, #, #, #]. Я хочу, чтобы он отображал его как # # # # (без скобок и запятых) и без использования system.out.print. так или иначе, я хочу сохранить результат в одной переменной и просто вызвать эту переменную.как отображать элементы ArrayList без фигурных скобок

import java.util.Scanner; 

import java.util.ArrayList; 

public class trial 

{ 

static Scanner keyboard = new Scanner(System.in); 

public static ArrayList<Integer> primeFactors(long number) 

{ 

     long n = number; 
     ArrayList<Integer> factors = new ArrayList<Integer>(); 
     for (int i = 2; i <= n; i++) 
     { 
      while (n % i == 0) 
      { 
       factors.add(i); 
       n /= i; 
      } 
     } 

     return factors; 

} 
public static void main(String[] args) 
{ 
    System.out.println("Enter phone number to be factored"); 
    long input = keyboard.nextLong(); 

    System.out.println(primeFactors(input)); 
} 
} 

ответ

0

Вы можете изменить тип возвращаемого, чтобы Строка по методу primeFactors. Затем запустите ArrayList и добавьте контент в String, как показано ниже.

package src.main; 

import java.util.Scanner; 

import java.util.ArrayList; 

public class sampleMain 

{ 

static Scanner keyboard = new Scanner(System.in); 

public static String primeFactors(long number) 

{ 

    long n = number; 
    ArrayList<Integer> factors = new ArrayList<Integer>(); 
    for (int i = 2; i <= n; i++) { 
     while (n % i == 0) { 
      factors.add(i); 
      n /= i; 
     } 
    } 
    StringBuffer output = new StringBuffer(); 
    for (Integer integer : factors) { 
     if(output.length()==0){ 
      output.append(integer.toString()); 
     }else{ 
      output.append(", "+integer.toString()); 
     } 
    } 
    return output.toString(); 

} 

public static void main(String[] args) { 
    System.out.println("Enter phone number to be factored"); 
    long input = keyboard.nextLong(); 

    System.out.println(primeFactors(input)); 
} 
} 

Обновлен ответ с StringBuffer, основанный на комментарии

+0

Если делать так, лучше использовать StringBuilder –

0

Посмотри Java8 Collectors.joining и String.join методы, вы можете перебрать список и распечатать его, как вам нужно

использование Collectors.joining

List<String> strs = Arrays.asList("a", "b", "c", "d", "e"); 
String str = strs.stream().collect(Collectors.joining(" "))); 

или даже просто

String s = String.join(" ", primeFactors); 

или с помощью StringBuilder

StringBuilder sb = new StringBuilder(); 
for (E e : primeFactors) { 
    sb.append(e).append(" "); 
} 
String ret = sb.toString().trim(); 

выход

a b c d e 
0

Try для перебора значений в вашем ArrayList и добавить его к StringBuilder. Например:

StringBuilder oneStringValue = new StringBuilder(); 
    for(Integer tempNum : primeFactors(input)) { 
     oneStringValue.append(tempNum.toString()); 
    } 
    System.out.println(oneStringValue.toString()); 

Это должно работать.

Для дополнительной информации, я использовал StringBuilder для добавления строк, потому что это mutable, а не String, который immutable.

0

Просто используйте для каждого цикла:

public static void main(String[] args) { 
    Scanner keyboard = new Scanner(System.in); 
    System.out.println("Enter phone number to be factored"); 
    long input = keyboard.nextLong(); 
    ArrayList<Integer> arr = primeFactors(input); 
    for(int a:arr){ 
     System.out.print(a+" "); 
    } 
    keyboard.close(); 
} 
Смежные вопросы