使用计数器将值添加到数组

时间:2019-04-09 10:00:18

标签: java arrays

最近1.5个月我一直在学习Java。现在,讲师已经要求我们创建一个程序,该程序将从用户那里获取姓名和电话号码(但以某种方式),直到用户输入“ E”为止。然后,程序应打印存储在所有阵列中的所有信息。

该程序具有一个主菜单,用户将输入“ 1”以创建一个帐户(名称和电话号码),然后再次出现主菜单,并且用户创建另一个帐户,依此类推...直到他从菜单中选择另一个选项,或输入“ E”以存在并打印所有帐户的摘要。

我的问题是我试图创建一个计数器来引用数组中每个帐户点(数组中的索引);因此,每次用户输入名称和数字后,计数器将加1,数组索引将加1,然后移至下一个位置……但这没用。

我没有完成代码,选择1停下来测试创建帐户方法

    public static void addDonor(String[] a1, String[] a2, char[] a3, int[] a4, int [] a5){
    Scanner input = new Scanner(System.in);


    System.out.print("  Enter the name (first and last):" + " ");
    String name = input.nextLine();
    System.out.print("  Enter Mobile No.:" + " ");
    String phone = input.next();

    if (phone.length() < 10 && phone.startsWith("0") == false){
        while (true){
            System.out.println("Wrong Mobile NO... try again!");
            System.out.print("  Enter Mobile No.:" + " ");
            phone = input.next();
            if (phone.length() > 10 || phone.startsWith("0") == true)
                break;
        }
    }

    System.out.print("  Enter Blood Group Type (A, B or O):" + " ");
    char blood =  input.next().charAt(0);

        while (blood != 'a' || blood != 'b' || blood != 'c'){
            System.out.println("Wrong Blood Group Type... try again!");
            System.out.println("    Enter Blood Group Type (A, B or O):" + " ");
            blood =  input.next().charAt(0);
            if (blood == 'A' || blood == 'B' || blood == 'O')
                break;    
        }
        int counter = 0;
        a1[counter] = name;
        a2[counter] = phone;
        a3[counter] = blood;
        a4[counter] = 1;
        a5[counter] = 1;
        counter++;

}

    public static void main(String[] args) {
    Scanner input = new Scanner(System.in);

        String[] Name = new String[20];
        String[] Mobile = new String[20];
        char[] Blood_Gp = new char[20];
        int[] Count_o_Donation = new int[20];
        int[] Blood_Stock = new int[20];



        while (true){
            displayMainMenu();
        readAndVerify();
        String choice = readAndVerify();

            switch (choice){
                case "1":
                    addDonor(Name, Mobile, Blood_Gp, Count_o_Donation, Blood_Stock);
                    break;
            }
           if (choice.equals("e")) 
               break;
        }


        System.out.println(Name[0]);
        System.out.println(Name[1]);



}

3 个答案:

答案 0 :(得分:0)

问题在于您正在addDonor方法内创建变量索引。因此,每次调用该方法时,都会创建一个值为0的新变量,这就是为什么它不会移动的原因。您应该在方法外部创建该变量并将其作为参数传递。

类似这样的东西:

public static void main(String[] args) {
Scanner input = new Scanner(System.in);

    String[] Name = new String[20];
    String[] Mobile = new String[20];
    char[] Blood_Gp = new char[20];
    int[] Count_o_Donation = new int[20];
    int[] Blood_Stock = new int[20];
    int index = 0;

    while (true){
        displayMainMenu();
    readAndVerify();
    String choice = readAndVerify();

        switch (choice){
            case "1":
                addDonor(Name, Mobile, Blood_Gp, Count_o_Donation, Blood_Stock, index);
                index++
                break;
        }
       if (choice.equals("e")) 
           break;
    }


    System.out.println(Name[0]);
    System.out.println(Name[1]);

}

   public static void addDonor(String[] a1, String[] a2, char[] a3, int[] a4, int [] a5), int index{
Scanner input = new Scanner(System.in);


System.out.print("  Enter the name (first and last):" + " ");
String name = input.nextLine();
System.out.print("  Enter Mobile No.:" + " ");
String phone = input.next();

if (phone.length() < 10 && phone.startsWith("0") == false){
    while (true){
        System.out.println("Wrong Mobile NO... try again!");
        System.out.print("  Enter Mobile No.:" + " ");
        phone = input.next();
        if (phone.length() > 10 || phone.startsWith("0") == true)
            break;
    }
}

System.out.print("  Enter Blood Group Type (A, B or O):" + " ");
char blood =  input.next().charAt(0);

    while (blood != 'a' || blood != 'b' || blood != 'c'){
        System.out.println("Wrong Blood Group Type... try again!");
        System.out.println("    Enter Blood Group Type (A, B or O):" + " ");
        blood =  input.next().charAt(0);
        if (blood == 'A' || blood == 'B' || blood == 'O')
            break;    
    }

    a1[index] = name;
    a2[index] = phone;
    a3[index] = blood;
    a4[index] = 1;
    a5[index] = 1;

答案 1 :(得分:0)

这里有很多错误。

首先,您应该真正收集课堂上需要的所有信息。这样,您可以轻松地将所有内容存储在一个数组中。

public class donor{
String name;
String mobile
...
}

第二,因为您不知道要获取多少输入,而数组实际上是存储它的一种愚蠢方法。如果您使用列表,则只需执行以下操作即可:

List<Donor> donors = new ArrayList<>();
donors.add(donor);

如果需要使用数组,可以尝试使用计数器。我可能会这样做:

public static void main(String[] args) 
{
    Scanner input = new Scanner(System.in);

    String[] name = new String[20];
    String[] mobile = new String[20];
    char[] bloodGroup = new char[20];
    int[] countODonation = new int[20];
    int[] bloodStock = new int[20];
    int counter = 0;
    boolean continue = true;
    while (continue){
        displayMainMenu();

    String choice = readAndVerify();
        switch (choice){
            case "1":
                name[counter] = readName();
                ...
                counter++;            
                break;
        }
       if (choice.equals("e"))
          continue = false; 
      }
}

但是再次,您应该真正使用一个类来提供捐助者的东西。还有一个清单。

答案 2 :(得分:0)

这实际上不是Java问题,而是调试问题。您的计数器在其所在方法的本地,因此每次调用该方法时,都会重置该计数器。

变量具有作用域。变量的范围取决于定义的位置。在方法块内(或在参数部分内),变量将与方法​​块一样长。如果在类内将其定义为非静态的,则它将与实例一样长。如果在类中定义为静态,它将在该类中生存(在大多数情况下,这意味着永远)

在您的情况下,您有2个选项:将变量设为静态,在addDonor方法之外定义它,然后按值将其传递到addDonor方法中(因此您无法在addDonor内部对其进行递增,无论在何处调用addDonor都可以执行此操作)。

如果使用static变量,则代码将保持不变。静态变量通常在类的顶部定义。

如果将传递变量向下放入addDonor,则main方法将负责保持和递增计数器变量。确保仅在成功的迭代中将其递增。

您还可以做其他事情,但是它们需要您了解对象。