使用按长度排序的比较器对名称的 ArrayList 进行排序
Sorting an ArrayList of Names using a Comparator that sorts by length
我的代码有问题。我尝试对数组列表使用字符串,但它不起作用。当我将 class 名称放入数组列表时,它只会打印出不同的值。我做了一个 class 来获得长度,因为在比较器中这样做是行不通的;它只是给我一个找不到符号的错误。
import java.util.*;
import java.io.*;
class StringLengthComparator implements Comparator<Name>
{
public int compare(Name n1, Name n2)
{
return n1.getLength()-n2.getLength();
}
}
public class Name implements Comparable<Name>
{
public static String name;
public Name(String n)
{
this.name = n;
}
public int compareTo(Name that)
{
return this.name.compareTo(that.name);
}
public String getName()
{
return this.name;
}
public int getLength()
{
return this.name.length();
}
public static void main(String[] args) throws Exception
{
ArrayList<Name> N = new ArrayList<>(5);
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please Enter Name: ");
//String n = keyIn.readLine();
for(int i=0;i<5;i++)
{
String n = keyIn.readLine();
N.add(new Name(n));
}
System.out.print("\n");
Collections.sort(N);
for(int i=0;i<N.size();i++)
{
System.out.println(N.get(i));
}
System.out.print("\n");
Collections.sort(N, new StringLengthComparator());
for(int i=0;i<N.size();i++)
{
System.out.println(N.get(i));
}
}
}
Error #1 for ArrayList<\String> N = new ArrayList<\String>
Error #2 for ArrayList <\Name> N = new ArrayList<>(5)
如果您想按长度排序并按选择的字母顺序排序,则需要 2 个比较器,每次选择要使用的一个,按 N.sort(new X)
,其中 X 是比较器的名称 class 您想。
你不需要 Collections.sort()
:
class StringLengthComparator implements Comparator<Name> {
public int compare(Name n1, Name n2) {
return n1.getLength()-n2.getLength();
}
}
class StringCommonComparator implements Comparator<Name> {
public int compare(Name n1, Name n2) {
return n1.getName().compareTo(n2.getName());
}
}
public class Name {
private String name;
public Name(String n) {
this.name = n;
}
public String getName() {
return this.name;
}
public int getLength() {
return this.name.length();
}
public static void main(String[] args) throws Exception {
ArrayList<Name> N = new ArrayList<>(5);
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please Enter Name: ");
String n = keyIn.readLine();
N.add(new Name(n));
for(int i=0; i<5; i++) {
String name = keyIn.readLine();
N.add(new Name(name));
}
System.out.println();
System.out.println("Compare by Length");
N.sort(new StringLengthComparator());
for(int i=0;i<N.size();i++) {
System.out.println(N.get(i).name);
}
System.out.println();
System.out.println("Compare by String");
N.sort(new StringCommonComparator());
for(int i=0;i<N.size();i++) {
System.out.println(N.get(i).name);
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class StringLengthComparator implements Comparator<Name> {
@Override
public int compare(Name n1, Name n2) {
return n1.getLength() - n2.getLength();
}
}
public class Name implements Comparable<Name> {
public static String name;
public Name(String n) {
this.name = n;
}
@Override
public int compareTo(Name that) {
return this.name.compareTo(that.name);
}
public String getName() {
return this.name;
}
public int getLength() {
return this.name.length();
}
public static void main(String[] args) throws Exception {
ArrayList<Name> N = new ArrayList<>(5);
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please Enter Name: ");
for (int i = 0; i < 5; i++) {
String n = keyIn.readLine();
N.add(new Name(n));
}
System.out.print("\n");
Collections.sort(N);
for (Name name : N) {
System.out.println(name.getName());
}
System.out.print("\n");
Collections.sort(N, new StringLengthComparator());
for (int i = 0; i < N.size(); i++) {
System.out.println(N.get(i));
}
}
}
我的代码有问题。我尝试对数组列表使用字符串,但它不起作用。当我将 class 名称放入数组列表时,它只会打印出不同的值。我做了一个 class 来获得长度,因为在比较器中这样做是行不通的;它只是给我一个找不到符号的错误。
import java.util.*;
import java.io.*;
class StringLengthComparator implements Comparator<Name>
{
public int compare(Name n1, Name n2)
{
return n1.getLength()-n2.getLength();
}
}
public class Name implements Comparable<Name>
{
public static String name;
public Name(String n)
{
this.name = n;
}
public int compareTo(Name that)
{
return this.name.compareTo(that.name);
}
public String getName()
{
return this.name;
}
public int getLength()
{
return this.name.length();
}
public static void main(String[] args) throws Exception
{
ArrayList<Name> N = new ArrayList<>(5);
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please Enter Name: ");
//String n = keyIn.readLine();
for(int i=0;i<5;i++)
{
String n = keyIn.readLine();
N.add(new Name(n));
}
System.out.print("\n");
Collections.sort(N);
for(int i=0;i<N.size();i++)
{
System.out.println(N.get(i));
}
System.out.print("\n");
Collections.sort(N, new StringLengthComparator());
for(int i=0;i<N.size();i++)
{
System.out.println(N.get(i));
}
}
}
Error #1 for ArrayList<\String> N = new ArrayList<\String>
Error #2 for ArrayList <\Name> N = new ArrayList<>(5)
如果您想按长度排序并按选择的字母顺序排序,则需要 2 个比较器,每次选择要使用的一个,按 N.sort(new X)
,其中 X 是比较器的名称 class 您想。
你不需要 Collections.sort()
:
class StringLengthComparator implements Comparator<Name> {
public int compare(Name n1, Name n2) {
return n1.getLength()-n2.getLength();
}
}
class StringCommonComparator implements Comparator<Name> {
public int compare(Name n1, Name n2) {
return n1.getName().compareTo(n2.getName());
}
}
public class Name {
private String name;
public Name(String n) {
this.name = n;
}
public String getName() {
return this.name;
}
public int getLength() {
return this.name.length();
}
public static void main(String[] args) throws Exception {
ArrayList<Name> N = new ArrayList<>(5);
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please Enter Name: ");
String n = keyIn.readLine();
N.add(new Name(n));
for(int i=0; i<5; i++) {
String name = keyIn.readLine();
N.add(new Name(name));
}
System.out.println();
System.out.println("Compare by Length");
N.sort(new StringLengthComparator());
for(int i=0;i<N.size();i++) {
System.out.println(N.get(i).name);
}
System.out.println();
System.out.println("Compare by String");
N.sort(new StringCommonComparator());
for(int i=0;i<N.size();i++) {
System.out.println(N.get(i).name);
}
}
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
class StringLengthComparator implements Comparator<Name> {
@Override
public int compare(Name n1, Name n2) {
return n1.getLength() - n2.getLength();
}
}
public class Name implements Comparable<Name> {
public static String name;
public Name(String n) {
this.name = n;
}
@Override
public int compareTo(Name that) {
return this.name.compareTo(that.name);
}
public String getName() {
return this.name;
}
public int getLength() {
return this.name.length();
}
public static void main(String[] args) throws Exception {
ArrayList<Name> N = new ArrayList<>(5);
BufferedReader keyIn = new BufferedReader(new InputStreamReader(System.in));
System.out.println("Please Enter Name: ");
for (int i = 0; i < 5; i++) {
String n = keyIn.readLine();
N.add(new Name(n));
}
System.out.print("\n");
Collections.sort(N);
for (Name name : N) {
System.out.println(name.getName());
}
System.out.print("\n");
Collections.sort(N, new StringLengthComparator());
for (int i = 0; i < N.size(); i++) {
System.out.println(N.get(i));
}
}
}