Java 如果lastName的第一个字符介于A和M之间,如何返回1;如果N到Z之间,如何返回2?
如果lastName的第一个字符在a和M之间,我需要修复getLineNumber方法以返回1;如果lastName的第一个字符在N和Z之间,则返回2 听起来很简单,但我不确定我在这里应该用什么。我不确定我是否应该使用charAtJava 如果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
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
(并从用户处读取该值,而无需打印任何信息说明用户需要提供一些数据)有趣的事实:javachar
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;
}
}