java - 如何在打印数组时修复奇怪的格式,使用 \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
我感觉这个问题是因为不同的字长,但是,这似乎不会影响最后几行(例如明斯克和班加罗尔)。我将如何让所有目的地从同一条垂直线开始?任何帮助将不胜感激,谢谢!
解决方案
请注意,它仅影响第一个单词为 8 个字符或更多字符的行。A\t
前进到下一个制表符位置,通常是 8 个字符的倍数。
要正确执行此操作,您必须遍历第一个单词以找到最大长度,然后在打印时使用它在每个单词后插入正确数量的空格。
例如,如果您确定最长的第一个单词是 13 个字符,并且您希望第二个单词从偏移量 16(位置 17)开始,您将在长度为 16 的固定字段中打印第一个单词。
推荐阅读
- excel - 使用 VBA 从 csv 文档中删除行
- php - Laravel - 计算评论投票的架构问题
- react-native - 将我的 API 调用程序类导入另一个屏幕时,无法呈现
- javascript - 我需要制作一个带有圆形末端的圆形进度条
- r - R for 循环没有通过 Grubbs 的测试打印出所需的结果
- c# - 如何仅在特定半径/ unity2d 内生成对象
- python - 在python中对列进行分组
- python - 为什么我在 Pycharm 中使用 python 代码时收到此错误:“TimeoutError: [Errno 110] Connection timed out”?
- javascript - 在数组中的前 4 个对象上设置属性,然后在第 5 个对象、第 9 个对象等上重新启动序列
- pandas - 多列标题中跨多列的 Pandas 索引子句