0

問題は :

ユーザー 2 人のフルネームを読み取り、2 人が兄弟かどうかを判断するプログラムを作成します。

サンプルラン:

2 つの名前を入力してください:

- First name:  Ali Ibrahim Mohammed
- Second name: Ahmad Ibrahim Mohammed

Ali and Ahmad are brothers

import java.util.*;

public class Test
{
static Scanner scan = new Scanner (System.in);

   public static void main(String args[])
    {
String name1 = ""; //the name1 without first name
String name2 = ""; //the name2 without first name

String firstname1="";//only the first name of name1
String firstname2="" ;//only the fist name of name2

String fname ="";
String lname ="";

String string, string2;

int space ;
int i =0;
 int j=0;

System.out.println("Enter 2 names :");
while ( i<2 )
{
if (i==0)
    System.out.println("- First name :"); 
    else
        System.out.println("- Second name :"); 
        
  while (j==i)
   {
    string = scan.nextLine();
     
    space= string.indexOf(" ");
    fname = string.substring(0,space);
      
    string2 = string.toLowerCase();  
    lname = string.substring(space);
     
    string2 = lname.toLowerCase(); 
    j++;

  }
     if(i==0){
     firstname1=fname;
     lname=name1;
     }
     
     else if(i==1){
     firstname2=fname;
     lname=name2;
     }
     
    i++;
}

if ( name1.equals(name2))
System.out.println(firstname1 + " and " + firstname2 + " are brothers ");
else 
System.out.println(firstname1 + " and " + firstname2 + " are NOT brothers ");


}
}

私は自分のコードを書こうとしましたが、姓が同じでなくても、彼らは常に兄弟です!

4

5 に答える 5

1

私はあなたが欲しいと思います

if ( lname1.equals(lname2))

それ以外の

if ( name1.equals(name2))

他にも問題があるかもしれませんが、これは少なくともそのうちの 1 つです。

于 2013-11-04T06:11:59.247 に答える
1

私はトークナイザーを使用してこれを実装しました。このアプローチにより、プログラムは複数の人が兄弟であるかどうかを見つけることができます。これがどのように機能するかは、人物のフル ネームを ArrayList に格納することです。次に、トークナイザーを使用してそれらの名前を分割し、姓のみを新しい配列に格納します。次に、姓が同じすべての人をチェックし、兄弟であることを表示します。

   List<String> names = new ArrayList <String>();

    Scanner scanner = new Scanner(System.in);

    //gets user name
    for (int x = 0; x < 4; x++)
    {
        System.out.printf("Enter Full Name #%d: ", (x + 1));
        names.add(scanner.nextLine());
    }
    String [] lastName = new String [names.size()];

    //gets lastName
    for (int x = 0; x < names.size(); x++)
    {
        StringTokenizer token = new StringTokenizer(names.get(x));
        while (token.hasMoreTokens())
                lastName[x] = token.nextToken();
    }

    //check for brothers
    for (int x = 0; x < names.size(); x++)
        for (int i = x + 1; i < names.size();i++)
        {
            if (lastName[x].equalsIgnoreCase(lastName[i]))
                System.out.printf("%s and %s are brothers",names.get(x),names.get(i));
        }

出力:

 Enter Full Name #1: Andree Freemantle
 Enter Full Name #2: Mario Dennis
 Enter Full Name #3: Kyle Freemantle
 Enter Full Name #4: Steve dennis
 Andree Freemantle and Kyle Freemantle are brothers 
 Mario Dennis and Steve dennis are brother
于 2013-11-04T06:55:32.690 に答える
1

問題を小さな問題に分割し、それぞれをコーディングしてみてください。例えば、

  1. 人の名前をどのように表す必要がありますか? 全員にファーストネーム、ミドルネーム、ラストネームがありますか? 誰かがGeorge Bootだけを入力するとどうなりますか?
  2. Nameクラスを書くことはできますか?
  3. より良い変数名のセットは何でしょうか?
  4. コードをどのようにテストしますか?

また、 ですべてを実行しないようにしてくださいmain。テストが難しくなります。

于 2013-11-04T06:29:33.320 に答える
0

以下の修正版のコードを参照してください。これで問題が解決することを願っています。

public static void main(String[] args) {
    String n1="Ali Ibrahim Mohammed";
  String n2="Ahmad Ibrahim Mohammed";

  String name1FirstName=n1.split(" ")[0]; 
  String name2FirstName=n2.split(" ")[0];

  String name1LastName=n1.split(" ")[2]; 
  String name2LastName=n2.split(" ")[2];

  String name1MiddleName=n1.split(" ")[1]; 
  String name2MiddleName=n2.split(" ")[1];

  if(name1LastName.equals(name2LastName)){ // Check if Last name is same or not

      if(name1MiddleName.equals(name2MiddleName)){ // Check if middle name is same or not
          System.out.println(name1FirstName+"  and "+name2FirstName+" are brothers");
      }else{
          System.out.println(name1FirstName+"  and "+name2FirstName+" are not brothers");
      }



  }else{
      System.out.println(name1FirstName+"  and "+name2FirstName+" are not brothers");
  }

}
于 2013-11-04T06:23:58.620 に答える