Java 如果lastName的第一个字符介于A和M之间,如何返回1;如果N到Z之间,如何返回2?

Java 如果lastName的第一个字符介于A和M之间,如何返回1;如果N到Z之间,如何返回2?,java,Java,如果lastName的第一个字符在a和M之间,我需要修复getLineNumber方法以返回1;如果lastName的第一个字符在N和Z之间,则返回2 听起来很简单,但我不确定我在这里应该用什么。我不确定我是否应该使用charAt import java.util.Scanner; public class ConferenceRegistration { /** * Assists in guiding people to the proper line based o

如果lastName的第一个字符在a和M之间,我需要修复getLineNumber方法以返回1;如果lastName的第一个字符在N和Z之间,则返回2

听起来很简单,但我不确定我在这里应该用什么。我不确定我是否应该使用charAt

import java.util.Scanner;

public class ConferenceRegistration {


    /**
     * Assists in guiding people to the proper line based on their last name.
     *
     * @param lastName The person's last name
     * @return The line number based on the first letter of lastName
     */
    public int getLineNumberFor(String lastName) {
        int lineNumberOne = 1;
        int lineNumberTwo = 2;
        Scanner scanner = new Scanner(System.in);
        lastName = scanner.nextLine();
        char guess = lastName.charAt(0);

        if(lastName >= 'm'){
            return lineNumberOne;
        }
        else{
            return lineNumberTwo;
        }
    /*
      lineNumber should be set based on the first character of the person's last name
      Line 1 - A thru M
      Line 2 - N thru Z

     */

    }
}
试一试


如果(guess
必须使用
chatAt(index)
来获取要检查的字符,那么对于您的情况,可以使用如下三元运算:

public int getLineNumberFor(String lastName) {
    char c = lastName.charAt(0);
    return c >= 'A' && c <= 'M' ? 1 : c >= 'N' && c <= 'Z' ? 2 : 0;
}
public int getLineNumberFor(字符串lastName){
char c=lastName.charAt(0);

返回c>='A'&&c='N'&&c='A'&&c='N'&&c在
char
s之间使用比较的另一种解决方案是使用包含所有字母的字符串将
lastName
的第一个字母转换为整数,并比较整数

class Test {

    private static final String LETTERS = "ABCDEFGHIJKLMNOPRSTUVWXYZ";
    private static final int INDEX_OF_M = LETTERS.indexOf("M");

    public int getLineNumberFor(String lastName) {

        int indexOfFirstLetter = LETTERS.indexOf(lastName.toUpperCase().charAt(0));

        return (indexOfFirstLetter <= INDEX_OF_M) ? 1 : 2;
    }
}
类测试{
私有静态最终字符串字母=“ABCDEFGHIJKLMNOPRSTUVWXYZ”;
私有静态最终整数索引μOFμM=字母.indexOf(“M”);
public int getLineNumberFor(字符串lastName){
int indexOfFirstLetter=LETTERS.indexOf(lastName.toUpperCase().charAt(0));

return(除了主要问题之外,indexOfFirstLetter在
lastName=scanner.nextLine();
中没有意义,因为
lastName
是方法参数,所以它应该保存在使用方法时传递的值。例如,当您调用
getLineNumberFor(“Adams”)时
lastName
将保持
Adams
,您可以从中使用
charAt(0)
提取第一个字符并进行测试。将新值分配给
lastName
(并从用户处读取该值,而无需打印任何信息说明用户需要提供一些数据)有趣的事实:java
char
s是数字:因此,如果您不关心代码的维护,可以执行类似于
((猜测-'A')/13)的操作+1
-我不建议这样做,但您可以。提示:字符串可以进行比较,不区分大小写。此外,您需要为此类分析指定区域设置。否则,用户的Java实现可能会根据其环境选择一个区域设置(或者这正是您需要的吗?)虽然它看起来像是有效的解决方案,但如果在编程开始时看到它,我会害怕地运行。
if(conditionA){return1;}else if(condition2){return2;}
IMO比一系列条件运算符更具可读性。如果我错了,请帮助我更好地理解这一点。我甚至不需要Scanner类?我将变量char c设置为charAt(0)这将检查姓氏的第一个字符串。如果它等于或大于A,则返回c,如果它小于或等于M,则返回1。我猜:是指其他吗?@Joshua Thao其他是您在问题中对其进行了修改的第二部分,**如果它在N和Z之间,则返回M或其他返回2。*如果条件不正确,则可以返回一个默认值或抛出一个异常,如果你想要的话,这会让我的眼睛更容易看到。谢谢你的建议!正如你的链接页面所说,“Java实际上使用Unicode”。(Java和规范一致。)我认为这意味着不要使用该表。虽然Java字符确实是Unicode而不是ASCII,但我不认为区别是这里的重点。重点是OP的代码的比较运算符错误。要求是A到M返回1;大于或等于M的字符返回1(实际上是“m”)。FWIW,小于也是错误的。要求“小于或等于m”。
public int getLineNumberFor(String lastName) {
    char c = lastName.charAt(0);
    if (c >= 'A' && c <= 'M') {
        return 1;
    } else if (c >= 'N' && c <= 'Z') {
        return 2;
    }
    return 0;
}
class Test {

    private static final String LETTERS = "ABCDEFGHIJKLMNOPRSTUVWXYZ";
    private static final int INDEX_OF_M = LETTERS.indexOf("M");

    public int getLineNumberFor(String lastName) {

        int indexOfFirstLetter = LETTERS.indexOf(lastName.toUpperCase().charAt(0));

        return (indexOfFirstLetter <= INDEX_OF_M) ? 1 : 2;
    }
}