【问题标题】:Is there an Java function to find the position of an array element in an sorted array of strings是否有一个 Java 函数可以在已排序的字符串数组中查找数组元素的位置
【发布时间】:2020-05-01 19:43:50
【问题描述】:

我的作业问题是这样的:

用 Java 编写一个程序,将 20 个不同的朋友姓名和电话号码存储在两个不同的一维数组中。现在按字母顺序排列所有姓名,并显示所有姓名及其各自的电话号码。

我想出了这段代码

public class Q7
{
    public static void main()
    {
        String name[]={"Dean","Sean","Daniel","Sheldon","Adi","Raj","Steve","Ava","Riley","Jessie"};
        String Temp[]=new String[10];
        for(int i=0;i<10;i++)//Creating another unsorted array to find respective telephone numbers later
        { Temp[i]=name[i];}
        long number[]={7747872132L,7975117568L,4008269466L,8028612214L,9448011416L,949153772L,9591817794L,9845666946L,9448638374L,8182248864L};//telephone numbers of people in name[] respectively
        String temp="";
        for(int i=0;i<name.length;i++)//Sorting
        {
            for(int j=i+1;j<name.length;j++)
            {
                if(name[j].compareTo(name[i])<0)
                {
                    temp=name[i];
                    name[i]=name[j];
                    name[j]=temp;
                }
            }

        }
        System.out.println("Name\t\tTelephone Number");
        for(int i=0;i<name.length;i++)
            System.out.println(name[i]+"\t\t\t"+number[Temp.IndexOf(name[i])]);//This is where I need help
    }
}

我面临的问题是我不知道用各自的名字打印电话号码。请帮帮我,这是我的学校作业。

【问题讨论】:

  • 您的“线性搜索”是一种排序,您只对其中一个数组进行排序(每当您交换 number 时,您需要交换 number 的元素 - 或 更好,创建一个包含namenumber 字段的POJO [plain old java object] 并对其进行排序)。
  • 我总是对这两者感到困惑,我仍然是java的初学者。我已编辑问题谢谢您的通知
  • @ElliottFrisch 你能告诉我如何同时交换numbername 的元素吗?这将是一个很大的帮助
  • 您只需在循环内的 if 语句中重复相同的过程,但随后是电话号码 - 当然还有一个不同的 temp 变量。
  • 您首先在循环中的同一索引处对姓名和电话号码进行排序。然后创建一个单独的循环以按顺序打印出排序后的名称和数字

标签: java arrays string sorting indexing


【解决方案1】:

你能告诉我如何同时交换数字和名字的元素吗?这将是一个很大的帮助

不要在真实代码中这样做。改变

if(name[j].compareTo(name[i])<0)
{
    temp=name[i];
    name[i]=name[j];
    name[j]=temp;
}

if(name[j].compareTo(name[i]) < 0)
{
    temp = name[i];
    name[i] = name[j];
    name[j] = temp;
    long ntemp = number[i];
    number[i] = number[j];
    number[j] = ntemp;
}

您的 temp 数组可以被消除(您只需要 localsingle temp 每个被交换的元素)。

【讨论】:

    【解决方案2】:
    public class Q7
    {
        public static void main()
        {
            String name[]={"Dean","Sean","Daniel","Sheldon","Adi","Raj","Steve","Ava","Riley","Jessie"};
            String Temp[]=new String[10];
            for(int i=0;i<10;i++)//Creating another unsorted array to find respective telephone numbers later
            { Temp[i]=name[i];}
            long number[]={7747872132L,7975117568L,4008269466L,8028612214L,9448011416L,949153772L,9591817794L,9845666946L,9448638374L,8182248864L};//telephone numbers of people in name[] respectively
            String temp="";
            for(int i=0;i<name.length;i++)//Sorting
            {
                for(int j=i+1;j<name.length;j++)
                {
                    if(name[j].compareTo(name[i])<0)
                    {
                    temp=name[i];
                    name[i]=name[j];
                    name[j]=temp;
                }
            }
    
            System.out.println("Name\t\tTelephone Number");
            for(int i=0;i<name.length;i++)
                System.out.println(name[i]+"\t\t\t"+number[indexOfArray(Temp,name[i])]);  //call indexOfArray here to find the position of unsorted array
        }
    
    
    
        public static int indexOfArray(String[] arr, String input){
             for(int i=0;i<arr.length;i++)
             {
                 if(arr[i].equals(input))
                 {
                      return i ;
                 }
              }
              return -1;    // if the text not found the function return -1
          }
    
    }
    

    希望对你有帮助!!!

    【讨论】:

      【解决方案3】:

      您可以通过引入copiedNames 的复制数组copiedNames 来简单地解决问题,以保留原始顺序。

      然后,您将使用Arrays.asList(copiedNames).indexOf(name[i])copiedNames 中查找字符串name 元素的索引。电话号码将从该索引中获取。

      下面是工作代码

      <!-- language: java -->
      public static void main(String[] args) {
          final String name[] = {"Dean", "Sean", "Daniel", "Sheldon", "Adi", "Raj", "Steve", "Ava", "Riley", "Jessie"};
          final String copiedNames[] = name.clone();
          final long number[] = {7747872132L, 7975117568L, 4008269466L, 8028612214L, 9448011416L, 949153772L, 9591817794L, 9845666946L, 9448638374L, 8182248864L};// telephone
          String temp = "";
          for (int i = 0; i < name.length; i++) // LinearSearch
          {
            for (int j = i + 1; j < name.length; j++) {
              if (name[j].compareTo(name[i]) < 0) {
                temp = name[i];
                name[i] = name[j];
                name[j] = temp;
              }
            }
      
          }
          System.out.println("Name\t\tTelephone Number");
          for (int i = 0; i < name.length; i++) {
            System.out.println(name[i] + "\t\t\t" + number[Arrays.asList(copiedNames).indexOf(name[i])]);// fix your need
          }
        }
      

      最好的,

      【讨论】:

        猜你喜欢
        • 2012-10-11
        • 1970-01-01
        • 1970-01-01
        • 2019-08-14
        • 1970-01-01
        • 2021-11-16
        • 2011-07-06
        • 1970-01-01
        • 2021-08-05
        相关资源
        最近更新 更多