字符串的新手,所以如何管理这个标题应用程序



在阅读了一章中的字符串方法描述后,我试图解决这个编程练习。就在这里。编写一个程序,询问用户的姓名,然后将该姓名写在显示器上,前面有"女士"或"先生",具体取决于姓名是女性还是男性。假设唯一的女性名字是

Amy
Buffy
Cathy

唯一的男性名字是

Elroy
Fred
Graham

所有其他名称都将在没有标题的情况下进行呼应。程序继续循环,直到用户在不首先键入名称的情况下点击"回车"为止。

C:>java Title
Enter a name:
Amy Johnson
Ms. Amy Johnson
Enter a name:
Fred Smith
Mr. Fred Smith
Enter a name:
Zoltan Jones
Zoltan Jones
Enter a name:
C:>

这是我的代码,我知道它错了,因为我很困惑。

import java.util.Scanner;
class titleApplier {
     public static void main(String[] args) {
          String name;
          String male = {"Elroy" , "Fred " , " Graham"};
          String females = {"Amy", "Buffy", "Cathy"};
          Scanner scan = new Scanner(System.in);
          while(name.hasNext()) {
               System.out.println("Enter a name ");
               name = scan.nextLine();
               if(name.equals(male)) {
                    System.out.println("Mr " + male);
               }
               else if (name.equals(females)) {
                    System.out.println(" Mrs " + females);
               }
               else {
                    System.out.println(scan.nextLine());
               }
          }
     }
}

你基本上走在了正确的轨道上,干得好!

您可以直接在if语句中引用它们,而不是将名称单独存储在String中:

if(name.equals("Elroy") || name.equals("Fred") || name.equals("Graham")) {
    System.out.println("Mr " + male);
}

此外,由于您提供的是名字和姓氏,我认为您不应该使用equals方法进行匹配,而是检查名称是否包含以下名称之一:

if (name.contains("firstName"))

因为这看起来像是家庭作业,所以你自己也要为女性做一些同样的事情。如果你还有问题,请告诉我。祝你好运

程序中有很多错误需要更正。最好试一试。我使用了BufferedReader,因为Scanner类在循环中获取几个输入值时会导致一些问题。:-

import java.io.*;
import java.util.*;
class MF{
static boolean search(String arr[],String st){
    for(int i=0;i<arr.length;i++){
        if(arr[i].equalsIgnoreCase(st)==true)
        return true;
    }
    return false;
}
public static void main(String args[])throws IOException{
  String male[]={"Elroy","Fred","Graham"};
String fem[]={"Amy","Buffy","Cathy"};
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
while(true){
System.out.println("Enter name:-");
String st=br.readLine();
if(st.equals("")==false){
StringTokenizer str=new StringTokenizer(st);
String tok=str.nextToken();
if(search(male,tok)==true)
System.out.println("Mr."+st);
if(search(fem,tok)==true)
System.out.println("Ms."+st);
}
else
break;
}
System.out.println("Program terminates.");
}
}

代码中的一些观察结果:

  1. 雄性和雌性应该是字符串的数组,而不仅仅是单个字符串。(即String[] females = {"Amy", "Buffy", "Cathy"};
  2. 注意前导空格和尾随空格。除非调用String.trim()方法,否则"Fred"one_answers"Graham"永远不会通过比较
  3. 方法hasNext()没有在String类中定义;从而产生编译错误。如果您是在Eclipse之类的IDE上写这篇文章,请阅读您得到的错误并解决它们。即使对于初学者来说,这也不难
  4. 输入名称后,程序会提示用户。如果将代码封装在do/while中而不是while循环中,这可能会更容易。这是一个偏好的问题,或者说是理所当然的。此外,通常您希望用户输入与提示显示在同一行中,因此使用System.out.print()而不是System.out.println()作为提示
  5. 当你在学习时,你应该总是用非常可控的输入来尝试你的程序。在这种情况下,您应该尝试使用单个男性名称和女性名称的程序,一旦该部分工作正常,那么您应该尝试扩展您的解决方案以处理多个名称
  6. 您的代码允许输入LINE(用空格分隔的单词),而不是String(没有空格的字符数组)。因此,您需要将该行拆分为标记(单词),检查第一个标记(名字)或第二个标记(姓氏),并将其与数组中的名称进行比较。否则,equals()方法将返回false。这是因为"Elroy-Smith"不等于"Elroy"。您可以执行我刚才解释的操作,也可以使用其他String方法,如contains()startsWith()
  7. 您应该将标题附加到输入的名称,而不是字符串数组中的第一个名称。您的程序应该输出"Amy Smith夫人",而不是输出"Amy Smith夫人"
  8. 您的while()子句没有捕捉到这一要求:"程序继续循环,直到用户点击"回车"而不首先键入名称。"即使行的长度为零,此方法也将始终返回true。相反,仅当输入的String的长度大于零时,才使用输入的String并循环
  9. 为了消除不必要的处理,您可以使用boolean变量来查看是否找到了名称,以便break(退出循环)或continue(跳到下一次迭代)

这是一个潜在的解决方案(可能不是最有效的,但对你来说很容易遵循):

public static void main(String[] args)
{
    String name;
    String[] males = {"Elroy", "Fred ", " Graham"};
    String[] females = {"Amy", "Buffy", "Cathy"};
    Scanner scan = null;
    do
    {
        System.out.print("Enter a name: ");
        scan = new Scanner(System.in);
        name = scan.nextLine();
        boolean found = false;
        // Search all possible male names
        for (String temp: males)
        {
            if (name.startsWith(temp))
            {
                System.out.println("Mr. " + name + "n");
                found = true;
                break; // stop looping if found
            }
        }
        if (found) { continue; }  // skip the rest of the loop if name has been found
        // Search all possible female names (only if name has not been found)
        for (String temp: females)
        {
            if (name.startsWith(temp))
            {
                System.out.println("Ms. " + name + "n");
                found = true;
                break;
            }
        }
        if (name.length() > 0 && !found)
        {
            // A name was entered but it was never found
            System.out.println("Unknown name entered.n");
        }
    } while (name.length() > 0);
    scan.close();
}

输出:

Enter a name: Fred Smith
Mr. Fred Smith
Enter a name: Buffy Vampire Slayer
Ms. Buffy Vampire Slayer
Enter a name: Cathy Doe
Ms. Cathy Doe
Enter a name: 
Exiting program.

最新更新