gpt4 book ai didi

java - 如何正确对齐和格式化不同的字符串长度

转载 作者:行者123 更新时间:2023-12-02 11:02:30 25 4
gpt4 key购买 nike

如何将 string.formatprintf 应用于我的输出,以便我可以根据我的作业要求对其进行对齐?

我的方法有 3 个输入,其中 2 个是保存两个数字的 char 数组,以及一个保存它们总和的 int 数组。

我已经格式化了数字和总和,使其成为一个散布有适当逗号的字符串。我现在的任务是对齐这些输出,以便它们始终正确对齐。问题是我不能只将列宽设置为特定数字,因为输入会因用户输入而变化。

例如:用户输入数字1和数字2(最多30位数字),程序将数字相加并返回总数。

这是我的代码和当前输出:

import java.util.Scanner;
import java.util.Arrays;
public class Lab8{
public static void main(String[] args){
char[] num1 = {'9','2','3','8','7','4','8','6','7','2','9'};
char[] num2 = {'3','9','9','8','3','9','2','8','3','4','9','4','5','8'};
//getNumber("First Number: ");
//getNumber("Second Number: ");
//printArray(num1);
//System.out.println();
//printArray(num2);
int[] finalTotal = sumArrays(num1,num2);
//sumArrays(num1, num2);

printOutput(num1, num2, finalTotal);

}
//--------
/** Read a line of message from keyboard and return it as an array of char
@return: Array of characters
*/
public static char[] getNumber(String msg){
String myMessage;
System.out.print(msg);
Scanner input = new Scanner(System.in);
myMessage = input.nextLine();// Read a line of message
return myMessage.toCharArray();
}


public static int[] sumArrays(char[] num1, char[] num2){

int sum= 0, carry = 0, size = 0, min = 0;

if(num1.length > num2.length){
size = num1.length + 1;
min = num2.length;
}else{
size = num2.length + 1;
min = num1.length;
}

int[] sumArray = new int[size];


int i = num1.length-1;
int j = num2.length-1;
int k = size-1;

while(i >= 0 && j >=0){

sum = Character.getNumericValue(num1[i]) + Character.getNumericValue(num2[j]) + carry;
i--;
j--;
sumArray[k] = sum % 10;
sum = sum / 10;
carry = sum % 10;
k--;

}

while(i >= 0){

sum = Character.getNumericValue(num1[i]) + carry;
sumArray[k] = sum % 10;
sum = sum / 10;
carry = sum % 10;
i--;
k--;

}

while( j >= 0){

sum = Character.getNumericValue(num2[j]) + carry;
sumArray[k] = sum % 10;
sum = sum / 10;
carry = sum % 10;
j--;
k--;

}

sumArray[k] = carry;

int[] finalSum = new int[sumArray.length-1];

finalSum = printArray(sumArray);

return finalSum;

}

public static void printOutput(char[] num1, char[] num2, int[] sum){

char[] largest = new char[1];
char[] smallest = new char[1];
char[] tmp = new char[1];

if(num2.length > num1.length){
largest = num2;
smallest = num1;
}else{
largest = num1;
smallest = num2;
}

String number1 = formatString(largest);
String number2 = formatString(smallest);
String total = formatString(sum);


System.out.printf("%s%n", number1 + " +");

for(int i = 0; i < (number1.length() - number2.length()); i++){
System.out.print(" ");
}
System.out.printf("%s%n%s%n%s", number2, totalLine(sum),total);

}


public static String formatString(char[] num){

String formattedString = "";

for(int i = 0; i < num.length; i++){

if(i == 0){
formattedString = num[num.length-1-i] + formattedString;
continue;
}

if(i % 3 == 0){
formattedString = "," + formattedString;
}

formattedString = num[num.length-1-i] + formattedString;
}

return formattedString;

}


public static String totalLine(int[] num){

String totalLine = "";

for(int i = 0; i < num.length; i++){

totalLine = "- " + totalLine;

}

return totalLine;

}


public static String formatString(int[] num){

String formattedString = "";

for(int i = 0; i < num.length; i++){

if(i == 0){
formattedString = num[num.length-1-i] + formattedString;
continue;
}

if(i % 3 == 0){
formattedString = "," + formattedString;
}

formattedString = num[num.length-1-i] + formattedString;
}

return formattedString;

}


public static int[] printArray(int[] arr){
int[] sum = new int[arr.length-1];
if(arr[0] == 0){
for(int i = 1; i < arr.length; i++){
sum[i-1] = arr[i];
}
}else{
for(int i = 0; i < arr.length; i++){
sum[i] = arr[i];
}
}
return sum;
}

}

输出(错误)

39,983,928,349,458 +
92,387,486,729
- - - - - - - - - - - - - -
40,076,315,836,187

输出(正确的方式)

       39,983,928,349,458 + 
92,387,486,729
--------------------
40,076,315,836,187

如您所见,我的格式有缺陷。我完全不确定如何正确格式化此输出,以便即使数值不同,每次也能正确显示。它的格式应该是较大的数字位于较小的数字之上,然后是总行,后面是总和。

最佳答案

因此,在阅读了更多内容后,我意识到我想要实现的目标并不一定需要字符串格式或 printf 语句。我最终像前面的评论和上面建议的答案一样,只是用多个打印语句格式化输出。这绝对不是最漂亮的代码,但它给了我我想要的确切输出。

这是实现这一目的的代码:

System.out.println("  " + number1 + " +");
for(int i = 0; i < (number1.length() - number2.length()); i++){
System.out.print(" ");
}
System.out.println(" " + number2);
System.out.print(" ");
for(int j = 0; j < ((number1.length() - number2.length())+ number2.length()+1); j++){
System.out.print("-");
}
System.out.println();
System.out.print(" " + total);

关于java - 如何正确对齐和格式化不同的字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51217545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com