【问题标题】:Trying to sort names by length尝试按长度对名称进行排序
【发布时间】:2016-09-04 08:58:49
【问题描述】:

我正在尝试从文件中读取 5 个名称的列表,确定每个名称的长度并使用数组对长度进行排序。但是,我似乎无法弄清楚如何将名称的长度传递给数组......非常感谢帮助!

import java.io.*;
import java.util.Arrays;
public class NewClass {

public static void main(String[] args) throws IOException,
    FileNotFoundException {

String file = "names.txt";
processFile("names.txt");

}


public static void processFile (String file) throws IOException, FileNotFoundException{
BufferedReader inputReader =
       new BufferedReader (new InputStreamReader
(new FileInputStream("names.txt")));
String line;
while  (( line = inputReader.readLine()) != null){

   int nameL =line.length();

} 
/*public static void main (String [] args) {
*/
    int [] aryNum;
    aryNum= new int [5];

    aryNum[0] = int nameL;
    aryNum[1]=int nameL;
    aryNum[2]=int nameL;
    aryNum[3]=int nameL;
    aryNum[4]=nameL;

   Arrays.sort(aryNum);

   int i;

   for (i=0; i<aryNum.length; i++) {
       System.out.println("" + aryNum[i]);

   }

}


}

【问题讨论】:

  • 您想仅对名称的长度进行排序,还是根据名称(字符串)的长度对名称(字符串)进行排序?
  • 我想对名称的长度进行排序,但是学习如何根据名称的长度对名称进行排序也很棒!

标签: java arrays sorting bufferedreader string-length


【解决方案1】:

如果您想对数组中字符串的长度进行排序,那么您实际上是在寻找对数字进行排序:

static int[] getSortedLengths(String[] names) {
    int len = names.length;
    int [] lengths = new int[len];
    for (int i = 0; i < len; i++) {
        // watch for nulls
        lengths[i] = names[i].length();
    }
    Arrays.sort(lengths);
    return lengths;
}

如果要对名称(字符串)进行排序,可以使用基于比较器的通用排序概念。比较器实现了一个行为,它按照特定的标准对集合(或数组)的元素进行排序。有趣的部分是你只需要抽象出你的集合(或数组)组成的类型的两个元素的比较。然后你将比较器传递给排序方法,瞧!你得到一个排序的集合(或数组)。对于初学者,让我们使用以下版本:

static void sortStringsByLength(String[] names) {
    Comparator<String> stringLengthComparator = new Comparator<String>() {
        @Override
        public int compare(String o1, String o2) {
            return Integer.compare(o1.length(), o2.length());
        }
    };
    Arrays.sort(names, stringLengthComparator);
}

只需使用compare 方法,您就可以做很多事情,例如按长度对所有字符串进行反向排序(最长的字符串优先),或者按每个字符串的某种分数对它们进行排序等等。这称为抽象,是计算机编程中最重要的技能。

【讨论】:

  • 非常感谢!我如何将其合并到我的代码中?当我尝试时,我得到诸如“非法开始表达”和“找不到类”之类的错误......
  • 我认为您有一些基本的代码组织问题。首先下载像Intellij 这样的IDE,然后对方法逐个编码:逐行读取文件并将这些行(假设是名称)添加到预定义的数组中。您在上面发布的代码看起来不像可以编译的东西。发布带有明确错误消息的单独问题。然而,这不应该阻止你接受我上面的回答:-)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
相关资源
最近更新 更多