首页 > 解决方案 > 如何在打印数组时修复奇怪的格式,使用 \t

问题描述

我正在编写一个代码,它以升序或降序打印一系列位置。但是,12 个位置中有两个的格式都是错误的。

代码:

import java.util.*;
import static java.lang.System.*;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.*;
class airwaysReservation {
    static Scanner sc = new Scanner(System.in);
    static String src[] = {"Mumbai", "London", "Hiroshima", "Lagos", "Minsk", "Baghdad", "Istanbul", "Delhi", "Fez", "Beijing", "Taipei", "Havana"};
    static String dest[] = {"Hyderabad", "Paris", "Athens", "Alexandria", "Seoul", "Hamburg", "Bengaluru", "Rome", "Montreal", "Saitama", "Philadelphia", "Pune"};
    public static void sortAsc(String arr[]) {
        Arrays.sort(arr);
    }
    public static void sortDesc(String arr[]) {
        //using libraries java.util.Arrays, and java.util.Collections, sorts arrays
        Arrays.sort(arr, Collections.reverseOrder());
    }
    public static void list() {
        out.println("Sources \t Destinations");
        for (int i = 0; i< 12; i++) {
            out.println(src[i] + "\t \t  " + dest[i]);
        }
    }
    public static void main(String[] args) {
        out.println("Welcome \n Would you like to see the sources in ascending, or descending order?");
        // stores ascending or descending for later
        char schoice = sc.next().charAt(0);
        out.println("Would you like to view the destinations in ascending, or descending order?");
        // stores ascending or descending for later
        char dchoice = sc.next().charAt(0);
        switch (schoice) {
            case 'a' : 
            sortAsc(src);
            break;
            case 'd' :
            sortDesc(src);
            break;
            default:
            out.println("Invalid choice");
        }
        switch (dchoice) {
            case 'a' :
            sortAsc(dest);
            break;
            case 'd' :
            sortDesc(dest);
            break;
            default:
            out.println("Invalid choice");
        }
        list();
    }
}

选择升序然后降序的输出结果是:

Sources      Destinations
Baghdad       Seoul
Beijing       Saitama
Delhi         Rome
Fez       Pune
Havana        Philadelphia
Hiroshima         Paris
Istanbul          Montreal
Lagos         Hyderabad
London        Hamburg
Minsk         Bengaluru
Mumbai        Athens
Taipei        Alexandria

我感觉这个问题是因为不同的字长,但是,这似乎不会影响最后几行(例如明斯克和班加罗尔)。我将如何让所有目的地从同一条垂直线开始?任何帮助将不胜感激,谢谢!

标签: java

解决方案


请注意,它仅影响第一个单词为 8 个字符或更多字符的行。A\t前进到下一个制表符位置,通常是 8 个字符的倍数。

要正确执行此操作,您必须遍历第一个单词以找到最大长度,然后在打印时使用它在每个单词后插入正确数量的空格。

例如,如果您确定最长的第一个单词是 13 个字符,并且您希望第二个单词从偏移量 16(位置 17)开始,您将在长度为 16 的固定字段中打印第一个单词。


推荐阅读