【问题标题】:Merging of one int and string array into third array将一个 int 和 string 数组合并到第三个数组中
【发布时间】:2016-10-25 21:45:31
【问题描述】:

有 2 个数组,一个是 int,一个是 Strings (words) ;对它们进行排序,然后以奇数位置应为单词和偶数的方式打印。

这是我的代码:

import java.util.*;
public class JavaApplication4 {


    public static void main(String[] args) {
        Scanner in=new Scanner(System.in);
        int num[]=new int[10];
        String str[]=new String[10];
        String str1[]=new String[20];
        for(int i=0; i<5; i++)//for taking strings
        {
            str[i]=in.next();
        }
        for(int i=0; i<5; i++)//for taking nums
        {
            num[i]=in.nextInt();
        }
        for(int i=0; i<5; i++)
        {
            System.out.println("The String are "+str[i]);
        }
        for(int i=0; i<5; i++)
        {
            System.out.println("The num are "+num[i]);
        }
         for (int i = 0; i < 5; i++) //for sorting nums
        {
            for (int j = i + 1; j < 5; j++) 
            {
                if (num[i]>(num[j])) 
                {
                    int temp = num[i];
                    num[i] = num[j];
                    num[j] = temp;
                }
            }
        }
        for (int i = 0; i < 5; i++)// for sorting strs
        {
            for (int j = i + 1; j < 5; j++) 
            {
                if (str[i].compareTo(str[j])>0) 
                {
                    String temp = str[i];
                    str[i] = str[j];
                    str[j] = temp;
                }
            }
        }
        System.out.println("The sorted strings are:");
        for(int i=0; i<10; i++)//for merging both
        {
            if((i+1)%2==0)
            {
                int k=0;
                str1[i]=String.valueOf(num[k]);
                 System.out.println("The String are "+str1[i]);
                k++;
            }
            else
            {
                int j=0;
                str1[i]=str[j];
                 System.out.println("The String are "+str1[i]);
                j++;
            }


        }
      /*   for(int i=0; i<10; i++)
        {
            System.out.println("The String are "+str1[i]);
        }
        */
    }
}

我得到的输出:

排序后的字符串是:
字符串是 ab
字符串是 1
字符串是 ab
字符串是 1
字符串是 ab
字符串是 1
字符串是 ab
字符串是 1
字符串是 ab
字符串是 1

它只取两个数组的第一个元素。

【问题讨论】:

  • 你为什么期待别的东西?在访问数组元素之前,您将变量 kj 设置为 0 ... 那么除了第一个元素之外,他们还应该检索什么?
  • 您应该尝试为变量使用有意义的名称。很难说哪个索引/数组指的是什么。

标签: java arrays merge


【解决方案1】:

其他人指出了根本原因。除此之外,为什么你用容量10(和20)初始化数组num[]str[]str1[],这是所需容量5(和10)的两倍?

另一个问题是str1[]的名字真的很糟糕。

【讨论】:

    【解决方案2】:

    您可以使用Arrays 类对数组进行排序。

    String[] strArray = new String[] {"a","z","q","p"};
    Arrays.sort(strArray);
    

    同样,尝试第二个数组。

    现在,通过添加两个数组的大小来声明另一个数组:

    String[] newArray = new String[sum];
    int j=0;
    for(int i=0;i<newArray.length;i+=2)
    {
        newArray[i]=strArray[j];
        newArray[i+1] = otherArray[j++];
    }
    

    【讨论】:

      【解决方案3】:

      您应该在循环之前将kj 初始化为0,而不是在循环内部。

          int k=0;
          int j=0;
          for(int i=0; i<10; i++)//for merging both
          {
              if((i+1)%2==0)
              {
                  str1[i]=String.valueOf(num[k]);
                   System.out.println("The String are "+str1[i]);
                  k++;
              }
              else
              {
                  str1[i]=str[j];
                   System.out.println("The String are "+str1[i]);
                  j++;
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-20
        • 1970-01-01
        • 2019-01-27
        • 2021-11-15
        相关资源
        最近更新 更多