【问题标题】:Not able to sort array of strings taken as input from user无法对作为用户输入的字符串数组进行排序
【发布时间】:2014-06-17 03:20:04
【问题描述】:

我正在尝试从用户那里获取字符串数组,然后尝试按字母顺序对其进行排序。但是在为下面给出的行提供输出后它没有响应:-

System.out.println("数组是"+Arrays.toString(Arr));

以下是用于此的代码:-

package practice1;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class RemDup {

    public static void main(String[] args) {
        try{
        //Obtaining array from user and sorting it
        List<String> list=new ArrayList<>();
        Scanner in=new Scanner(System.in);
        do {
            System.out.println("Current list is"+list);
            System.out.println("Add more(y/n)");
            if (in.next().startsWith("y")) {
                System.out.println("Enter:");
                list.add(in.next());
            }else{break;

            }
        } while (true);
        System.out.println("List is "+list);
        String[] Arr=list.toArray(new String[0]);
        System.out.println("Array is"+Arrays.toString(Arr));
        String str=Arr.toString();
        String[] strArr=str.split(" ");
        for(int i=0;i<Arr.length;i++)
        {
            for (int j = i+1; j < Arr.length; j++) {
                if (strArr[i].compareTo(strArr[j])>0) {
                    String temp=strArr[i];
                    strArr[i]=strArr[j];
                    strArr[j]=temp;
                }
            }
        }
        for(String ss:strArr){
            System.out.println(ss);
        }
        }
        catch(Exception e){
            e.toString();
        }
    }

}

请帮忙

【问题讨论】:

  • 应该指明是否允许使用Collections.sort。假设不是,但明确的澄清总是好的。另外,我不认为Arr.toString() 给了你你想的那样。
  • 尝试使用Arrays.asList(Arr) 并告诉我它是否有效

标签: java


【解决方案1】:

问题出在以下几行

    String str=Arr.toString();
    String[] strArr=str.split(" ");

toString 没有返回您期望的值。

只需按照以下方式替换这些 tw 行 String[] strArr=list.toArray(new String[0]);

【讨论】:

    【解决方案2】:

    您的代码正在抛出 java.lang.ArrayIndexOutOfBoundsException。您可能没有意识到,因为您的 catch 块什么都不做。尝试在 catch 块中打印 e。由于异常,您的代码不会在 for 循环之外执行

    【讨论】:

      【解决方案3】:

      请尝试下面的代码,这对你有用,

      import java.util.ArrayList;
      import java.util.Arrays;
      import java.util.List;
      import java.util.Scanner;
      
      public class RemDup {
      
          public static void main(String[] args) {
              try {
                  // Obtaining array from user and sorting it
                  List<String> list = new ArrayList<String>();
                  Scanner in = new Scanner(System.in);
                  do {
                      System.out.println("Current list is" + list);
                      System.out.println("Add more(y/n)");
                      if (in.next().startsWith("y")) {
                          System.out.println("Enter:");
                          list.add(in.next());
                      } else {
                          break;
      
                      }
                  } while (true);
                  System.out.println("List is " + list);
                  String[] Arr = list.toArray(new String[0]);
                  System.out.println("Array is" + Arrays.toString(Arr));
                  String str = Arr.toString();
                  Arrays.sort(Arr);
                  System.out.println("Sorted Array is" + Arrays.toString(Arr));           
              } catch (Exception e) {
                  e.toString();
              }
          }
      }
      

      样品输出: 当前列表是[]

      添加更多(y/n)y

      输入:aaa

      当前列表是[aaa]

      添加更多(y/n)

      是的

      输入:

      hhh

      当前列表是[aaa, hhh]

      添加更多(y/n)

      是的

      输入:

      cc 当前列表是[aaa, hhh, ccc] 添加更多(是/否) 是的 输入:

      123 当前列表是[aaa, hhh, ccc, 123] 添加更多(是/否)

      n 列表是 [aaa, hhh, ccc, 123]

      数组是[aaa, hhh, ccc, 123]

      排序数组为[123, aaa, ccc, hhh]

      【讨论】:

        【解决方案4】:

        您的代码正在抛出 ArrayIndexOutOfBoundsException。

            String str=Arr.toString();
            String[] strArr=str.split(" ");
        

        这些在你的范围内没有意义

        试试这个:

                import java.util.ArrayList;
                import java.util.Arrays;
                import java.util.List;
                import java.util.Scanner;
        
                public class SortTest {
        
                public static void main(String[] args) {
                try{
                //Obtaining array from user and sorting it
                List<String> list=new ArrayList<String>();
                Scanner in=new Scanner(System.in);
                do {
                    System.out.println("Current list is"+list);
                    System.out.println("Add more(y/n)");
                    if (in.next().startsWith("y")) {
                        System.out.println("Enter:");
                        list.add(in.next());
                    }else{break;
        
                    }
                } while (true);
        
                System.out.println("List is "+list);
                String[] Arr=list.toArray(new String[list.size()]);
                System.out.println("Array is"+Arrays.toString(Arr));
                String[] strArr=new String[Arr.length];
                for(int i=0;i<Arr.length;i++)
                {
                    for (int j = i+1; j < Arr.length; j++) {
                        if (Arr[i].trim().compareTo(Arr[j].trim())>0) {
                            String temp=Arr[j];
                            Arr[j]=Arr[i];
                            Arr[i]=temp;
                        }
                    }
                    strArr[i]=Arr[i];
                }
                System.out.println("After sorting : ");
                for(String ss:strArr){
                    System.out.print(ss + " ");
                }
             }
            catch(Exception e){
                System.out.println(e);
            }
            }
        
            }
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-11-12
          • 2014-05-11
          • 1970-01-01
          • 2016-07-18
          • 2021-09-24
          相关资源
          最近更新 更多