2013-04-11 57 views
0

我只是需要一些帮助将输出格式化为特定的方式。除了输出外,我满足了作业的所有要求。将数组的输出格式化为列

我很抱歉为这篇文章的坏格式,任何建议和帮助,非常感谢。

我需要的输出看起来像:

随机先生 - $ 500强
BobRandom先生 - $ 250
等-8
(合计的所有美元)多次

继承人我的代码:

import javax.swing.JOptionPane; 
import java.util.Arrays; 

public class PeerTutors { 
    public static void main(String[] args) { 
     String[] myNameArray = new String[2]; 
     String[] myGradeArray = new String[2]; 
     double[] myStudentArray = new double[2]; 
     double[] stipend = new double[2]; 
     int sum = 0; 

     for (int i = 0; i < 2; i++) { 
      myNameArray[i] = (JOptionPane 
        .showInputDialog(null, 
          "Enter the Peer Tutor name, last name then followed by the first name.")); 

     } 
     Arrays.sort(myNameArray, String.CASE_INSENSITIVE_ORDER); 
     JOptionPane.showMessageDialog(null, "The Peer Tutors Names are :" 
       + Arrays.toString(myNameArray)); 

     for (int a = 0; a < 2; a++) { 
      myGradeArray[a] = JOptionPane.showInputDialog(null, 
        "Please enter the highest degree earned for: " 
          + myNameArray[a]); 
     } 
     JOptionPane.showMessageDialog(null, "The Peer Tutors Names are :" 
       + Arrays.toString(myNameArray) + Arrays.toString(myGradeArray)); 

     for (int b = 0; b < 2; b++) { 
      myStudentArray[b] = Double.parseDouble(JOptionPane.showInputDialog(
        null, "Please enter the number of students" 
          + myNameArray[b] + " has assisted")); 
     } 
     JOptionPane.showMessageDialog(null, 
       "The Peer Tutors Report: " + Arrays.toString(myNameArray) 
         + "with" + Arrays.toString(myStudentArray) 
         + " of children tutoring"); 

     for (int c = 0; c < 2; c++) { 
      if (myGradeArray[c].equals("BS")) { 
       stipend[c] = 9.5 * myStudentArray[c]; 

      } else if (myGradeArray[c].equals("MS")) { 
       stipend[c] = 15 * myStudentArray[c]; 

      } else { 
       stipend[c] = 20 * myStudentArray[c]; 
      } 
     } 
     for (double d : stipend) { 
      sum += d; 
     } 

     for (int d = 0; d < 2; d++) { 
      JOptionPane.showMessageDialog(null, myNameArray[d] + "-" 
        + stipend[d] + "\n"); 

     } 
    } 
} 
+1

你能发布你的代码当前输出吗? – asifrc 2013-04-11 04:12:31

回答

0

解决方案1)从每一行创建一个字符串。您可以通过简单地将它们与+并置在一起来添加两个字符串,并将它们放在单独的行中,并将它们与中间的System.lineSeparator()连接起来,这是一个特殊的字符串,它将成为系统中换行符ASCII的任何字符串。 (见http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#lineSeparator%28%29

方案2)将所有你想在最后串线成ArrayList<String>,然后通过System.lineSeparator()串联加入列表构建输出字符串。除了行之外,类似的想法在逻辑上是分开的,直到最后。

如果你需要一个特定的宽度,我建议你遵循解决方案2),除了不是让你想打印出来的最终结果的ArrayList,使每列的组件ArrayLists,并注意最大的条目每列。然后,您可以为所有其他条目添加空格,以使它们同样大(例如,使用字符串格式化程序,%s标记并动态添加所需的宽度,每个条目:http://docs.oracle.com/javase/6/docs/api/java/util/Formatter.html)。然后你可以把所有东西连在一起并吐出来。

1

基本上,对于每一列,您需要某种列表(数组或最好是List)。你还需要维护每列最大宽度的信息(我通常把它放在另一个List)。

你需要循环每一行,打破它的列元素,并将每个元素放在相应的列List。你也应该计算每列的宽度要求。

一旦你把所有的结构化了,你需要重建输出,使用类似StringBuilder的东西来重建输出的每一行,但是为了让每列都有所需的额外间距以允许列流动。

与例如

更新现在,通常情况下,我想每一行存储为一个单独的对象,因为它可以更容易地保持行的总数一致的想法,但是,使用你的代码作为一个跳跃点...

import java.text.NumberFormat; 

public class TestTextColumnFormatting { 

    public static void main(String[] args) { 
     String[] myNameArray = new String[]{ 
      "Mr. Samete", 
      "Ms. Torbura", 
      "Mr. Perem", 
      "Mr. Rothaw", 
      "Miss. Endemos", 
      "Mr. Chomoshon", 
      "Mrs. Aldir",}; 
     double[] stipends = new double[]{ 
      500, 
      200, 
      300, 
      1000, 
      250, 
      125, 
      600, 
      338 
     }; 
     NumberFormat nf = NumberFormat.getCurrencyInstance(); 
     double tally = 0; 

     int columnWidths[] = new int[2]; 
     for (int index = 0; index < myNameArray.length; index++) { 
      columnWidths[0] = Math.max(columnWidths[0], myNameArray[index].length()); 
      columnWidths[1] = Math.max(columnWidths[1], nf.format(stipends[index]).length()); 
      tally += stipends[index]; 
     } 

     columnWidths[1] = Math.max(columnWidths[1], nf.format(tally).length()); 

     StringBuilder sb = new StringBuilder(128); 
     for (int index = 0; index < myNameArray.length; index++) { 

      String name = myNameArray[index]; 
      String stipend = nf.format(stipends[index]); 

      sb.append(name).append(fill(name, columnWidths[0], ' ')).append(" "); 
      sb.append(fill(stipend, columnWidths[1], ' ')).append(stipend); 
      sb.append("\n"); 

     } 


     sb.append(fill("", columnWidths[0], ' ')).append(" "); 
     sb.append(fill("", columnWidths[1], '=')).append("\n"); 
     sb.append(fill("", columnWidths[0], ' ')).append(" "); 
     sb.append(fill(nf.format(tally), columnWidths[1], ' ')).append(nf.format(tally)); 
     sb.append("\n"); 

     System.out.println(sb.toString()); 

    } 

    public static String fill(String sValue, int iMinLength, char with) { 

     StringBuilder filled = new StringBuilder(iMinLength); 

     while (filled.length() < iMinLength - sValue.length()) { 

      filled.append(with); 

     } 

     return filled.toString(); 

    } 
} 

然后,这将输出像...

Mr. Samete  $500.00 
Ms. Torbura  $200.00 
Mr. Perem  $300.00 
Mr. Rothaw $1,000.00 
Miss. Endemos $250.00 
Mr. Chomoshon $125.00 
Mrs. Aldir  $600.00 
       ========= 
       $2,975.00 

更新

我是个大白痴,我只是意识到,您使用的是JOptionPane:P

最简单的解决办法是建立一个HTML表格,让挥杆使其为你...

enter image description here

import java.text.NumberFormat; 
import javax.swing.JOptionPane; 

public class TestTextColumnFormatting { 

    public static void main(String[] args) { 
     String[] myNameArray = new String[]{ 
      "Mr. Samete", 
      "Ms. Torbura", 
      "Mr. Perem", 
      "Mr. Rothaw", 
      "Miss. Endemos", 
      "Mr. Chomoshon", 
      "Mrs. Aldir",}; 
     double[] stipends = new double[]{ 
      500, 
      200, 
      300, 
      1000, 
      250, 
      125, 
      600, 
      338 
     }; 
     NumberFormat nf = NumberFormat.getCurrencyInstance(); 
     double tally = 0; 

     StringBuilder sb = new StringBuilder(128); 
     sb.append("<html><table border='0'>"); 
     for (int index = 0; index < myNameArray.length; index++) { 

      String name = myNameArray[index]; 
      String stipend = nf.format(stipends[index]); 

      sb.append("<tr><td align='left'>"); 
      sb.append(name); 
      sb.append("</td><td align='right'>"); 
      sb.append(stipend); 
      sb.append("</td></tr>"); 

      tally += stipends[index]; 

     } 
     sb.append("<tr><td align='center'>"); 
     sb.append("</td><td align='right'>"); 
     sb.append(nf.format(tally)); 
     sb.append("</td></tr>"); 

     JOptionPane.showMessageDialog(null, sb.toString()); 

    } 
} 
0

您可以将给定的输入附加到String,然后将其作为输入传递给JOptionPane。从输入中获取名称后,只需使用String并将所有名称附加到显示中即可。

Example Image

Arrays.sort(myNameArray); 

    String nameString = new String(); 
    for(int i = 0; i < myNameArray.length; i++) { 
     nameString = "\n" + nameString + myNameArray[i] + "\n"; 
    } 

    JOptionPane.showMessageDialog(null,"The Peer Tutors Names are :" + nameString); 

同样,你可以做其他的投入也同样的做法。