Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
正在尝试添加到数组但不工作-Java_Java_Loops_Object_For Loop - Fatal编程技术网

正在尝试添加到数组但不工作-Java

正在尝试添加到数组但不工作-Java,java,loops,object,for-loop,Java,Loops,Object,For Loop,我正在用不同的类编写一个程序,因为我是编程新手,这让我有点困惑。我不确定问题出在哪里,尽管我认为我可以用两段代码来指出它。但是为了透明起见,我将把整个代码放进去 总体目标是构建一个数组,向数组中添加人名和地址(我不需要删除任何人),这是通过用户输入从主类完成的。首先,我使用getter和setter方法。这里似乎没有问题 public class MyAddress { String name = ""; String address = ""; //@param Nam

我正在用不同的类编写一个程序,因为我是编程新手,这让我有点困惑。我不确定问题出在哪里,尽管我认为我可以用两段代码来指出它。但是为了透明起见,我将把整个代码放进去

总体目标是构建一个数组,向数组中添加人名和地址(我不需要删除任何人),这是通过用户输入从主类完成的。首先,我使用getter和setter方法。这里似乎没有问题

public class MyAddress 
{
    String name = ""; 
    String address = ""; 

//@param Name is name of addressee
//@param Address is address of addressee

    public void setName(String Name)
        {
            name = Name;
        }

    public void setAddress(String Address)
        {
            address = Address;
        }

     public String getName()
        {
            return name;
        }

    public String getAddress()
        {
            return address;
        }
 }
然后,我在这个类中使用这些方法来获取用户输入,并将其放入一个数组中

public class MyAddressBook 
{      
public void addAddress()
{
    Scanner in = new Scanner(System.in);
    System.out.println("Enter name:   ");
    String name = in.nextLine();
    System.out.println("Enter address    ");
    String address = in.nextLine();

    //Create MyAddress object that sets the address and name and then gets those values to     put into the list
    MyAddress input = new MyAddress();
    input.setName(name);
    input.setAddress(address);

    //MyAddress input = new MyAddress();
    String newName = input.getName();
    String newAddress = input.getAddress();

    //Create a list for AddressBook with max of 10 input values
    addressBook = new String[10];

    //Iterates through the list to add name and address values
    for (int i = 0; i < addressBook.length; i++)
    {
        if(addressBook[i] == null)
         {
            addressBook[i] = newName;
            addressBook[i+1] = newAddress;
            break;
         }
    }   
}
所以现在的情况是,它在我第一次运行它时起作用,但是如果我需要向数组中添加另一个名称和地址,它就不起作用了。在前面的代码中,它似乎没有进入for语句的第二次迭代。当然,这段代码中的if语句也可能是错误的,但我只是不知道我做错了什么,以便找出如何修复它?是的,我是编程新手:)

使用
.equals()
方法比较字符串

 if (answer.equals("Y"))
使用
.equals()
方法比较字符串

 if (answer.equals("Y"))

这是一个扩展评论,问题应该结束

Java中的
String
比较是通过
equals
方法而不是
=

=
正在比较内存引用,其中as
等于
比较内容

因此,与其

if (answer == "Y")
你应该使用更像

if ("Y".equalsIgnoreCase(answer))

假设您希望检查不区分大小写…

这是一个扩展注释,问题应该关闭

Java中的
String
比较是通过
equals
方法而不是
=

=
正在比较内存引用,其中as
等于
比较内容

因此,与其

if (answer == "Y")
你应该使用更像

if ("Y".equalsIgnoreCase(answer))
假设您希望检查不区分大小写…

三个主要问题(除了使用
=
将字符串与
“Y”
进行比较外):

(1) 因为您已经为10个字符串分配了空间,所以您似乎希望用户能够输入那么多的名称。但是,您的程序最多只能添加两个名称,因为
addAddress
只添加一个名称,
main
可能会调用
addAddress
一次或两次,但不会在循环中调用它。您需要在某处添加一个循环来进行输入,可能是在
main

(2)
addAddress
每次调用时都会创建一个新数组。因此,无论您在第一次
addAddress
中做了什么工作,第二次都会被扔掉。您需要在其他地方创建数组;一种方法是在
main()
中创建它,然后将它作为参数传递给
addAddress
。但它不应该是字符串的数组。。。继续读

(3) 您可以设置一个
MyAddress
类来保存名称和地址,这很好。但是,您的
addressBook
数组是一个字符串数组,这与此目的背道而驰。请注意,尽管您希望您的
地址簿
包含10个条目,但它只包含5个条目,因为每个地址簿条目使用两个数组元素。如果确实要使用阵列,最好的处理方法是:

下一步不要在
addAddress
中执行此操作!您不希望每次添加地址时都设置一个全新的空数组并丢弃所有以前的数据,是吗

//Create a list for AddressBook with max of 10 input values
addressBook = new MyAddress[10];
请注意,这是一个
MyAddress
数组,而不是
String
数组

然后,要添加条目:

//Create MyAddress object that sets the address and name and then gets those values to     put into the list
MyAddress input = new MyAddress();
input.setName(name);
input.setAddress(address);

//Iterates through the list to add name and address values
for (int i = 0; i < addressBook.length; i++)
{
    if(addressBook[i] == null)
     {
        addressBook[i] = input;
        break;
     }
}   
无需使用
setName
setAddress

三个主要问题(除了使用
==
将字符串与
“Y”
进行比较外):

(1) 因为您已经为10个字符串分配了空间,所以您似乎希望用户能够输入那么多的名称。但是,您的程序最多只能添加两个名称,因为
addAddress
只添加一个名称,
main
可能会调用
addAddress
一次或两次,但不会在循环中调用它。您需要在某处添加一个循环来进行输入,可能是在
main

(2)
addAddress
每次调用时都会创建一个新数组。因此,无论您在第一次
addAddress
中做了什么工作,第二次都会被扔掉。您需要在其他地方创建数组;一种方法是在
main()
中创建它,然后将它作为参数传递给
addAddress
。但它不应该是字符串的数组。。。继续读

(3) 您可以设置一个
MyAddress
类来保存名称和地址,这很好。但是,您的
addressBook
数组是一个字符串数组,这与此目的背道而驰。请注意,尽管您希望您的
地址簿
包含10个条目,但它只包含5个条目,因为每个地址簿条目使用两个数组元素。如果确实要使用阵列,最好的处理方法是:

下一步不要在
addAddress
中执行此操作!您不希望每次添加地址时都设置一个全新的空数组并丢弃所有以前的数据,是吗

//Create a list for AddressBook with max of 10 input values
addressBook = new MyAddress[10];
请注意,这是一个
MyAddress
数组,而不是
String
数组

然后,要添加条目:

//Create MyAddress object that sets the address and name and then gets those values to     put into the list
MyAddress input = new MyAddress();
input.setName(name);
input.setAddress(address);

//Iterates through the list to add name and address values
for (int i = 0; i < addressBook.length; i++)
{
    if(addressBook[i] == null)
     {
        addressBook[i] = input;
        break;
     }
}   

无需使用
setName
setAddress

可能的重复,您的主程序只能添加一个地址。如果您希望在第二次运行它时,您将从第一次运行中获得相同的数据——对不起,这不起作用。当你重新运行一个程序时,它会从头开始。要使此工作正常,您需要了解如何设置文件或数据库。对不起,我不知道这实际上添加了两个地址