Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用函数在Java中按字母顺序排列字符串_Java - Fatal编程技术网

如何使用函数在Java中按字母顺序排列字符串

如何使用函数在Java中按字母顺序排列字符串,java,Java,} 这是我的代码,但我不知道我做错了什么。我已经为此工作了一段时间,我需要一个代码,允许用户输入3个名称,然后按字母顺序排序的名称 这个程序的要求是让用户输入3个字符串,然后使用一个接受3个字符串的函数按字母顺序打印出来——返回类型应该是void——这意味着没有返回到main的内容,该函数将按字母顺序打印出这三个单词,您需要担心的情况应该有6个(想想如果,elseif…else)。 下面是示例输出在控制台中的外观(>表示它在控制台中--您实际上不会看到这一点): 输入第一个小写字符串 棒极了 输

}

这是我的代码,但我不知道我做错了什么。我已经为此工作了一段时间,我需要一个代码,允许用户输入3个名称,然后按字母顺序排序的名称

这个程序的要求是让用户输入3个字符串,然后使用一个接受3个字符串的函数按字母顺序打印出来——返回类型应该是void——这意味着没有返回到main的内容,该函数将按字母顺序打印出这三个单词,您需要担心的情况应该有6个(想想如果,elseif…else)。 下面是示例输出在控制台中的外观(>表示它在控制台中--您实际上不会看到这一点):

输入第一个小写字符串

棒极了

输入第二个小写字符串

伪造的

输入第三个小写字符串

齐林

(以下情况发生在VOID函数中)

这是按字母顺序排列的单词

棒极了

伪造的

齐林


所以你可以使用任何东西,只要你把它放在一个方法中

import java.util.Scanner;

public class alphabetical {

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner Alphabet= new Scanner(System.in);
    System.out.println("Input First Name");
    String UserInput= Alphabet.next();
    System.out.println("Input second name");
    String UserInput2= Alphabet.next();
    System.out.println("Input third name");
    String UserInput3= Alphabet.next();
    System.out.println(alpha)UserInput,UserInput2,UserInput3));
}

    public static void alpha(String fromUser,String fromUser2, String fromUser3)
    {
    if (fromUser.compareTo(fromUser2)>0)
    {
        System.out.println(fromUser2);
    }
    else if(fromUser.compareTo(fromUser3)>0)
    {
        System.out.println(fromUser3);
    }
    else if (fromUser2.compareTo(fromUser3)>0)
    {
        System.out.println(fromUser3);
    }
    else if (fromUser2.compareTo(fromUser)>0)
    {
        System.out.println(fromUser);
    }
    else if (fromUser3.compareTo(fromUser)>0)
    {
        System.out.println(fromUser);
    }
    else if (fromUser3.compareTo(fromUser2)>0)
    {
        System.out.println(fromUser2);
    }
    
}

在Java8中,它很简单。可以使用lambda对字符串集合进行排序:

public static void alpha(String fromUser,String fromUser2, String fromUser3){
    String[] sArray = {fromUser, fromUser2, fromUser3};
    Arrays.sort(sArray);
    for (String s : sArray){
       System.out.print(s + " ");
    }
 }
publicstaticvoidmain(字符串[]args){
//TODO自动生成的方法存根
扫描仪字母表=新扫描仪(System.in);
System.out.println(“输入名字”);
字符串UserInput=Alphabet.next();
System.out.println(“输入第二个名称”);
字符串UserInput2=Alphabet.next();
System.out.println(“输入第三个名称”);
字符串UserInput3=Alphabet.next();
List List=Arrays.asList(UserInput、UserInput2、UserInput3);
排序((字符串in1,字符串in2)->in1.compareTo(in2));
list.forEach(System.out::println);
}

如果你真的不允许使用数组或列表,我希望你的教授让你写一个冗长的解决方案,这样他以后可以“展示”更好的基于数组或列表的版本

对于三个项目,确实有六种情况,您可以“只”为每种情况编写一个
if/else
子句:

public static void main(String[] args) {
        // TODO Auto-generated method stub
        Scanner Alphabet = new Scanner(System.in);
        System.out.println("Input First Name");
        String UserInput = Alphabet.next();
        System.out.println("Input second name");
        String UserInput2 = Alphabet.next();
        System.out.println("Input third name");
        String UserInput3 = Alphabet.next();
        List<String> list = Arrays.asList(UserInput, UserInput2, UserInput3);
        list.sort((String in1, String in2) -> in1.compareTo(in2));
        list.forEach(System.out::println);

    }
。。。依此类推,适用于abc、acb、bac、bca、cab、cba中的每一项。为了我自己的理智,我假设存在一个
lessThan()
方法,其中包含
a.compareTo(b)<0
——但是如果你的教授也禁止你编写助手方法,你可以直接使用
compareTo()

由于这个问题的措辞,我想这是人们所期望的——这不是一种实现排序的明智方式,但它可能是构建更好的东西的基础。它还允许您直接计算正在进行的比较数量,这可能会让一些初学者了解算法的成本


如果允许您使用数组,并且允许您使用Java提供的排序例程,那么只需将值放入数组中,排序并打印即可:

  // case 1 - abc
  if(lessThan(a,b) && lessThan(b,c)) {
     System.out.println(a + " " + b + " " + c);
  }
  // case 2 - acb
  else if(lessThan(a,c) && lessThan(c,b)) {
     System.out.println(a + " " + c + " " + b);
  }
  // case 3 - bac
  else if(lessThan(b,a) && lessThan(a,c)) {
     System.out.println(b + " " + a + " " + c);
  }

很接近,但在生成输出之前,需要将字符串与其他两个字符串进行比较。一种方法是为三行输出中的每一行创建单独的if/else if/else块。例如,这里是给定字符串s1、s2、s3的中间行

  public static void alpha(String a,String b, String c) {
      String[] array = new String[] {a,b,c};
      Arrays.sort(array);
      System.out.println(array[0] + " " + array[1] + " " + array[2]);
  }
//第一个单词
. . .
//第二个词

如果使用Java8流((s1.compareTo(s2)>=0)和&(s1.compareTo(s3)=0)和&(s2.compareTo(s3),您可以这样做:

if ( (s1.compareTo(s2)<=0) && (s1.compareTo(s3)<=0) && (s2.compareTo(s3)<=0) ) {
    // abc
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s3);
} else if (s1.compareTo(s2)<=0) && (s1.compareTo(s3)<=0) && (s2.compareTo(s3)>=0) {
    // acb
    System.out.println(s1);
    System.out.println(s3);
    System.out.println(s2);
} else if . . .

将用户输入存储在
字符串[]中
列出
并使用
数组#排序
集合#排序
这与Eclipse无关。你的问题纯粹是
Java
。你能删除
Eclipse
标记并编辑标题吗?可能的重复和第二个链接:我不能使用数组来做这件事。我在使用数组和我的教授让我重新做,只使用接受用户输入的函数。你应该在问题中提到这些额外的要求。我不能使用数组
if ( (s1.compareTo(s2)<=0) && (s1.compareTo(s3)<=0) && (s2.compareTo(s3)<=0) ) {
    // abc
    System.out.println(s1);
    System.out.println(s2);
    System.out.println(s3);
} else if (s1.compareTo(s2)<=0) && (s1.compareTo(s3)<=0) && (s2.compareTo(s3)>=0) {
    // acb
    System.out.println(s1);
    System.out.println(s3);
    System.out.println(s2);
} else if . . .
public static void alpha(String fromUser,String fromUser2, String fromUser3) {
    Stream.of(fromUser, fromUser2, fromUser3).sorted().forEach(System.out::println);
}