3 回答
TA贡献1886条经验 获得超2个赞
问题是你在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;
TA贡献1818条经验 获得超8个赞
这里有很多错误。
首先,您应该在课堂上真正收集所需的所有信息。这样,您可以轻松地将其全部存储在一个数组中。
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;
}
}
但是,再一次,您应该真正使用一个类来表示捐赠者的东西。还有一个列表。
TA贡献1780条经验 获得超1个赞
这并不是一个真正的java问题,而是一个调试问题。您的计数器是其所在方法的本地计数器,因此每次调用该方法时,计数器都会重置。
变量具有作用域。变量的作用域取决于定义它的位置。在方法块内部(或参数部分内部),变量将与方法块一样长。如果在类中定义为非静态,则它将与实例一样长。如果在类中定义为静态,它将与类一样长(大多数情况下这意味着永远)
在你的情况下,你有2个选项:要么使变量静态,要么在addDonor方法之外定义它,然后按值将其传递到addDonor方法中(因此你不能在addDonor内部增加它,无论你在哪里调用addDonor,都可以这样做)。
如果使用静态变量,则代码保持不变。静态变量通常在类的顶部定义。
如果将传递变量向下移动到 addDonor 中,则 main 方法将负责保留和递增计数器变量。确保它仅在成功的迭代中递增。
您还可以执行其他操作,但它们需要您了解对象。
添加回答
举报