最近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]);
}
答案 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方法将负责保持和递增计数器变量。确保仅在成功的迭代中将其递增。
您还可以做其他事情,但是它们需要您了解对象。