【问题标题】:Using an array to store input from the user使用数组存储用户的输入
【发布时间】:2013-07-17 19:40:24
【问题描述】:

我目前正在做这个项目:

  1. 创建一个简单的 Friends 类,至少包含以下内容:

    -姓名和年龄字段

    -适当的构造函数

    -获取/设置方法

    -toString() 方法

  2. 创建一个好友数组列表。

  3. 编写一个程序来管理您的朋友列表。

  4. 从具有以下选项的菜单中运行程序:

    -添加好友

    -删除好友

    -显示所有好友

    -退出

我已经走了一条路,但我不确定我是否朝着正确的方向前进。

这是我目前所得到的:

import java.util.ArrayList;
import java.util.Scanner;

public class Friends
{
    public static void main( String[] args )
    {
        int menu;
        menu = 0;
        int choice;
        choice = 0;


        Scanner input = new Scanner(System.in);
        ArrayList< Friends > name = new ArrayList<  >();
        ArrayList< Friends > age = new ArrayList<  >();

        System.out.println(" 1. Add a Friend ");
        System.out.println(" 2. Remove a Friend ");
        System.out.println(" 3. Display All Friends ");
        System.out.println(" 4. Exit ");
        menu = input.nextInt();

        while(menu != 4)
        {    

        switch(menu)
        {                     

        case 1:
            while(choice != 2)
            {
                System.out.println("Enter Friend's Name: ");
                name.add = input.next();
                System.out.println("Enter Friend's Age: ");
                age.add(input.nextInt());                    
                System.out.println("Enter another? 1: Yes, 2: No");
                choice = input.nextInt();
            } break;

            case 2:
                System.out.println("Enter Friend's Name to Remove: ");
                name.remove(input.next()); break;

            case 3:
                for(int i = 0; i < name.size(); i++)
                {
                System.out.println(name.get(i));
                }
                for(int k = 0; k < age.size(); k++)
                {    
                System.out.println(age.get(k));
                }break;
        }
        System.out.println(" 1. Add a Friend ");
        System.out.println(" 2. Remove a Friend ");
        System.out.println(" 3. Display All Friends ");
        System.out.println(" 4. Exit ");
        menu = input.nextInt();
        }
        System.out.println("Thank you and goodbye!");
}


public String name;
public int age;

public Friends( String friendsName, int friendsAge )
{
    this.name = friendsName;
    this.age = friendsAge;
}
public String toString()
{
    return super.toString();
}
public void setName( String friendsName )
{
    name = friendsName;
} 
public void setAge( int friendsAge )
{
    age = friendsAge;
}
public String getName()
{
    return name;
}
public int getAge()
{
    return age;
}
}   

我有几个问题:

  1. 如何使用 Friends 类来存储用户输入? (第 34 行和第 36 行有什么问题?)
  2. 当我显示朋友时,它会显示:

    约翰

    杰夫
    22
    24
    26

我希望将姓名和年龄放在一起,而不是全部放在一条线上。任何帮助将不胜感激!

这是我现在所处的位置,但我搞砸了,现在它不允许我在“FriendsTest f = new FriendsTest();”中输入参数,但是当我没有朋友列表时只是说“null 0”

package friends;

import java.util.ArrayList;
import java.util.Scanner;


public class FriendsTest
{
    public static void main( String[] args )
    {
        int menu;       
        int choice;
        choice = 0;      

        Scanner input = new Scanner(System.in);
        ArrayList< FriendsTest > friends = new ArrayList<  >();       

        System.out.println(" 1. Add a Friend ");
        System.out.println(" 2. Remove a Friend ");
        System.out.println(" 3. Display All Friends ");
        System.out.println(" 4. Exit ");
        menu = input.nextInt();

    while(menu != 4)
    {    

    switch(menu)
        {                     

    case 1:
                while(choice != 2)
                {

                System.out.println("Enter Friend's Name: ");
                String name = input.next();
                System.out.println("Enter Friend's Age: ");
                int age = input.nextInt();                               
                FriendsTest f = new FriendsTest(name, age);
                friends.add(f);
                System.out.println("Enter another? 1: Yes, 2: No");
            choice = input.nextInt();
        } break;

            case 2:
                System.out.println("Enter Friend's Name to Remove: ");
                friends.remove(input.next()); break;

            case 3:
                for(int i = 0; i < friends.size(); i++)
                {
                    System.out.println(friends.get(i).name + " " + friends.get(i).age);                        
                }
                break;
        }
    System.out.println(" 1. Add a Friend ");
    System.out.println(" 2. Remove a Friend ");
    System.out.println(" 3. Display All Friends ");
    System.out.println(" 4. Exit ");
    menu = input.nextInt();
    }
    System.out.println("Thank you and goodbye!");

}
public String name;
public int age;
}

【问题讨论】:

  • 第 34 行和第 36 行有什么问题?老兄,我数数太少了。

标签: java arrays


【解决方案1】:

你的逻辑是错误的。您永远不会构建 Friends 数据结构。此外,您应该有一个朋友数组列表并称其为朋友:

ArrayList<Friends> friends = new ArrayList<>();

这将存储你的朋友数据结构。接下来您需要做的是将您的朋友信息添加到朋友数据结构中:

 while (choice != 2) {
       System.out.println("Enter Friend's Name: ");
       String name = input.next();
       System.out.println("Enter Friend's Age: ");
       String age= input.nextInt();
       Friends f = new Friends(name, age);
       friends.add(f);
       System.out.println("Enter another? 1: Yes, 2: No");
       choice = input.nextInt();
  }

然后要删除一个朋友,你有一个稍微复杂的方法,你必须遍历 arrayList 朋友,直到找到朋友的名字,然后使用 .remove() 方法。

然后打印你会做的朋友:

for(int i=0;i<friends.length;i++) {
   friends.get(i).toString();
}

Friends 类中的 toString() 方法应该如下所示:

public void toString()
{
    System.out.println(this.getName() + " " + this.getAge());
}

【讨论】:

  • 感谢您的帮助!当我使用“ArrayList.get(i).toString();”我是否必须以某种方式使用其他 get/set 方法来说出我想要打印的内容,或者“friends.add(f)”是否以某种方式使用它们?
  • @user2585969 我对你的问题有点困惑,但我编辑了。但是friends.get(i) 将返回一个Friends 结构,该结构具有您定义的toString() 方法,但可能需要修改。检查我的编辑。
【解决方案2】:

假设 nameage 数组大小相同,您可以这样做:

case 3:
                for(int i = 0; i < name.size(); i++)
                {
                System.out.println(name.get(i) + age.get(i));
                }     

另外,考虑到你有一个Friends 类,没有理由将年龄和姓名存储在单独的数组中。只需将所有数据存储在ArrayList&lt;Friends&gt;

ArrayList<Friends> friendList = new ArrayList<Friends>();
string name ="";
int age ="";

            System.out.println("Enter Friend's Name: ");
            name = input.next();
            System.out.println("Enter Friend's Age: ");
            age = input.nextInt();
            friendList.Add(new Friends(name,age);  

【讨论】:

  • 感谢您的回复!当我输入“friends.add(new Friends(name,age);”时出现错误:Friends 类中的构造函数 Friends 不能应用于给定类型。不需要参数,但找到 String,string。
  • 我更新了我的答案 - age 属性应该是一个整数,而不是一个字符串。
  • 啊,太棒了。知道了。谢谢!
  • 不要忘记为您认为有用的答案投票并接受对您最有帮助的答案:)
【解决方案3】:

以下内容无法编译,因为 age 已定义为 ArrayList&lt;Friends&gt;

类型
age.add(input.nextInt()); // can't add an `Integer` to a list of `Friends`

为了更正显示修改 case 3 以使用单个 for 循环和单个 println()

case 3:
    for(int i = 0; i < name.size(); i++)
    {
        System.out.println(name.get(i) + " " + age.get(i));
    }
    break;

【讨论】:

  • 非常感谢您的帮助!
【解决方案4】:

Java 遵循类和对象的概念。您需要做的是创建一个名为 Friend 的类,其中包含必填字段。在不同的 java 文件中创建 Friend CLASS 的数组列表,或者可以命名为 ManageFriends 的类。还要添加此标题下的 4 个案例。

【讨论】:

    【解决方案5】:

    这里有一些错误。首先,你的数组列表没有正确参数化,你可以只用一个列表来做同样的事情。你想要的是:

    ArrayList<Friends> listOfFriends = new ArrayList<Friends>();
    

    然后您想修改您的案例 1 以将新朋友实例添加到列表中,因此您可以编写:

    listOfFriends.add(new Friends(name, age));
    

    和 remove 可以简化为

    listOfFriends.remove(new Friends(name, age));
    

    对于第二个问题,您可以通过将打印语句更改为:

    for(int i = 0; i < name.size(); i++)
    {
        System.out.println(listOfFriends.get(i).name + " " + listOfFriends.get(i).age);
    }
    break;
    

    应该这样做。祝你好运!!

    【讨论】:

    • 感谢您的帮助!当我为“listofFriends.add(new Friends(name, age));”输入参数时它告诉我它不需要参数,只有在 () 为空白时才会满足。但是当我显示我的朋友列表时,它出现在“null 0,null 0,null 0”,但它确实与列和所有内容看起来都正确。
    【解决方案6】:

    您应该使用一个 ArrayList 来存储所有信息。如果朋友类具有名称和年龄的属性,那么您不需要两个数组列表来存储它们。如果你遵循这种方法,那么

    name.Remove(input.next());
    

    将同时删除姓名和年龄。 为了在一行中显示姓名和年龄,只使用一个循环来显示两者(假设您将姓名和年龄替换为一个名为朋友的数组列表):

    for(Friend cFriend:friends){
        System.out.println(cFriend.getName()+"\t"+cFreind.getAge());
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 2016-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多