单数;甚至在Java中使用对齐进行排序

单数;甚至在Java中使用对齐进行排序,java,Java,我对Java还是新手,因为我最近刚在我的课程中学习了这个主题。我仍然对如何将已排序的输入对齐到指定位置感到困惑 例如,您输入:1,2,3,4,5 输出将是所有奇数将在奇数文本/标题下对齐,然后所有偶数将在偶数标题下对齐 这是我的密码: public static void main(String[] args) { int num; String odd="",even="",var, output=""; for (i

我对Java还是新手,因为我最近刚在我的课程中学习了这个主题。我仍然对如何将已排序的输入对齐到指定位置感到困惑

例如,您输入:1,2,3,4,5 输出将是所有奇数将在奇数文本/标题下对齐,然后所有偶数将在偶数标题下对齐

这是我的密码:

     public static void main(String[] args) {
           int num;
           String odd="",even="",var, output="";

          for (int cntr = 0; cntr < 5; cntr++){
               var = JOptionPane.showInputDialog("Input Number: ");
               num = Integer.parseInt(var);

                if (num % 2 == 1)
                    odd = odd +"\n"+ String.valueOf(num);
                if (num % 2 == 0)
                    even = even+"\n"+ String.valueOf(num);

                  output = odd +"\t"+even;

              }
              System.out.print("Odd\tEven"+ output);
publicstaticvoidmain(字符串[]args){
int-num;
字符串奇数=”,偶数=”,变量,输出=”;
对于(int-cntr=0;cntr<5;cntr++){
var=JOptionPane.showInputDialog(“输入编号:”);
num=Integer.parseInt(var);
如果(数量%2==1)
奇数=奇数+“\n”+字符串.valueOf(num);
如果(数值%2==0)
偶数=偶数+“\n”+字符串.valueOf(num);
输出=奇数+“\t”+偶数;
}
系统输出打印(“奇数\偶数”+输出);
问题是,当您运行它时,输出是排序的,顶部数字是赔率,底部数字是偶数,但它在奇数标题下对齐


你能推荐什么?这里是新成员。很高兴认识你们大家!

错误的方法,你正确区分奇数和偶数,但字符串不是按规定打印它们的方式。你以:

odd = "1\n3\n5\n"
even = "2\n4\n"
output = "1\n3\n5\n\t2\n4\n"
也就是说,所有赔率数字(一个接一个),a标签,然后是偶数

您需要以更结构化的方式存储数字;最好的选择是两个
java.util.ArrayList
。在拥有两个整数列表后,打印它们应该更容易(对于第一行,打印第一个偶数、制表符,然后是第一个奇数;不要忘记检查列表是否有不同的大小)

这还有一个额外的好处,即如果显示结果的方式发生了变化,则不需要更改将每个数字放入其列表中的逻辑(将业务逻辑与显示/UI分离)。

像这样尝试

 public static void main(String[] args) 
 {
    int num;
    ArrayList<String> odd = new ArrayList<>();
    ArrayList<String> even = new ArrayList<>();

    System.out.println("Odd\tEven");
    for (int cntr = 0; cntr < 5; cntr++)
    {
        String var = JOptionPane.showInputDialog("Input Number: ");
        num = Integer.parseInt(var);

        if (num%2 == 0)
        {
            even.add(Integer.toString(num));
        }else
        {
            odd.add(Integer.toString(num));
        }
    }

    if (odd.size() > even.size())
    {
        while (even.size() < odd.size())
        {
            even.add("/");
        }
    }
    else if (odd.size() < even.size())
    {
        while (odd.size() < even.size())
        {
            odd.add("/");
        }
    }

    for (int i = 0; i<even.size(); i++) 
    {
        if (!odd.get(i).equals("/"))
        {
            System.out.print(odd.get(i));
        }
        if (!even.get(i).equals("/"))
        {
            System.out.print("\t" + even.get(i));
        }
        System.out.println();
    }

 }
publicstaticvoidmain(字符串[]args)
{
int-num;
ArrayList奇数=新的ArrayList();
ArrayList偶数=新的ArrayList();
System.out.println(“奇数\tEven”);
对于(int-cntr=0;cntr<5;cntr++)
{
字符串var=JOptionPane.showInputDialog(“输入编号:”);
num=Integer.parseInt(var);
如果(数值%2==0)
{
偶数.add(Integer.toString(num));
}否则
{
add(Integer.toString(num));
}
}
if(奇数.size()>偶数.size())
{
而(偶数.size()<奇数.size())
{
偶数。加上(“/”);
}
}
else if(奇数.size()<偶数.size())
{
而(奇数.size()<偶数.size())
{
奇数。加上(“/”);
}
}

对于(inti=0;i如果您使用的是Java8,它提供了一种非常好的方法,可以根据一个谓词将数据划分为两个组,这似乎非常适合您的问题

它的工作原理如下:

List<Integer> myDigits;
Map<Boolean, List<Integer>> evenMap = myDigits.stream()
    .collect(Collectors.partitioningBy(n -> n % 2 == 0);
列出我的数字;
Map evenMap=myDigits.stream()
.collect(收集器.partitionBy(n->n%2==0);
现在有两个数字列表:
evenMap.get(true)
evenMap.get(false)
分别用于奇数和偶数

将它们打印成两列并不困难。唯一困难的部分是处理两个列表中较短的部分。一旦你有了上面的
Map
,就可以使用
evenMap.values().stream().Map(list::size).max().orElse(0)
导出较长列表的长度


如果您只是在学习Java,我希望这不会太令人困惑,但我认为使用
Stream
是值得的,因为它是一个非常强大和有用的构造。

与其将奇数和偶数存储和追加为字符串,不如尝试使用arraylist。如果没有数组列表,您如何处理这个问题?这是分配给我们的唯一的限制是不使用数组。
ArrayList
不是数组,它们是
List
的实现(内部碰巧使用数组,但这不是问题)。我想你的老师会希望你使用列表或其他类型的
集合
(不过请与他核实)哦,好的。谢谢。我试试这个。