2017-06-06 226 views
2

我是一名Java初学者,正在研究首先需要用户输入整数总数和下一个整数本身的代码。例如输入是:Java:打印尾部空格

4 
1 4 3 2 

该代码将需要第二输入反向于以下:

2 3 4 1 

我的解决办法是如下:

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    int n = in.nextInt(); 
    int arr[] = new int[n]; 
    for(int arr_i=0; arr_i < n; arr_i++){ 
     arr[arr_i] = in.nextInt(); 
    } 
    for(int reverse_i=n-1; reverse_i>=0; reverse_i--){ 
     System.out.print(arr[reverse_i]); 
      if(reverse_i != 0){System.out.print(" ");} 
    } 
} 

我的问题是关系到在打印的数字之间添加空格“”的代码。我想知道我能用其他方式来完成这个任务吗?任何建议表示赞赏,谢谢。

+0

您已经尝试的方式工作正常,我想抱歉,我没有看到,@第一 –

+1

能告诉我为什么我的问题是downvoted吗? – yogescicak

+0

大声笑我成了你的高级与2 downvotes。我不应该回答 – bharath

回答

2

最简单的办法扭转一个字符串使用StringBuilder类:

一个选项是在字符串如结束以删除空格。除去最后一个字符

package stackoverflow.main; 

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 

     StringBuilder sb = new StringBuilder(); 

     for(int arr_i = 0; arr_i < n; arr_i++){ 
      sb.append(in.nextInt()); 
      sb.append(" "); 
     } 

     sb.deleteCharAt(sb.length() - 1); 

     String normal = sb.toString(); 
     String reversed = sb.reverse().toString(); 

     System.out.println("normal: " + normal); 
     System.out.println("reversed: " + reversed); 
    } 
} 

另一种选择是检查你是否在你的循环的最后arr_i。 如果是这样,那就不要添加空格

package stackoverflow.main; 

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 

     StringBuilder sb = new StringBuilder(); 

     for(int arr_i = 0; arr_i < n; arr_i++){ 
      sb.append(in.nextInt()); 
      if (arr_i != 3 
       sb.append(" "); 
     } 

     String normal = sb.toString(); 
     String reversed = sb.reverse().toString(); 

     System.out.println("normal: " + normal); 
     System.out.println("reversed: " + reversed); 
    } 
} 
+0

谢谢,我并不知道StringBuilder。 – yogescicak

-1

这是关于输出格式。您可以使用this examples并熟悉所有可能的方法。

您的代码可以在接下来的两个方面进行改进:

1)使用\t,而不是空的空间(\t是制表)

2)创建这样private static final String output = "%d "并使用它的输出格式恒定在这样的输出行中:String.format(output, number)其中number是您应该打印的数字。

+0

嗨,我的建议有什么问题? –

+0

我没有downvote你的答案,但我认为这可能是因为\ t将有多个单一的“”时使用? – yogescicak

+0

'\ t'是ASCII表格中'TAB'的简单表示。这将花费1个字符。 –

0

先倒转数组,然后用for循环打印出来。

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     int n = in.nextInt(); 
     int arr[] = new int[n]; 
     for(int arr_i=0; arr_i < n; arr_i++) 
     { 
      arr[arr_i] = in.nextInt(); 
     } 
     for(int i = 0; i < arr.length/2; i++) 
     { 
      int temp = arr[i]; 
      arr[i] = arr[arr.length - i - 1]; 
      arr[arr.length - i - 1] = temp; 
     }  
     for(int i = 0; i < arr.length; i++) 
     { 
      System.out.print(arr[i]+" "); 
     } 
    } 
} 
0

您可以使用此解决方案来避免if语句:

String space = ""; 
for (int reverse_i = n - 1; reverse_i >= 0; reverse_i--) { 
    System.out.print(space + arr[reverse_i]); 
    space = " "; 
} 

所以第一次迭代将打印照片,无需空间(空分隔符),然后在第一次迭代后,将打印空间,则价值,这可以解决你的问题。

下面是一个例子,如何这个词

1    
1 + space + 2 
1 + space + 2 + space + 3 
1 + space + 2 + space + 3 + space + 4 
+0

谢谢,但我认为这个解决方案在最后一个数字的末尾会有一个尾部“”。 – yogescicak

+0

NOPE @misaikucing这是不正确的,尝试一下,你会看到;) –

+0

@misaikucing现在检查我的例子,你会明白更多 –