将所有输入添加到数组中
Adding all inputs into an array
预期功能:用户应该输入 1,2 或 3。1 应该允许用户向数组添加一个数字,2 应该允许用户访问数组中该点的数字,3 应该退出程序。
问题:当用户被要求输入一个数字并选择 'yes' 添加另一个数字时,只有最后输入的数字被添加到数组中。应添加所有输入的数字。为什么只加了最后一个?
import java.util.Scanner;
public class PhoneBookV2 {
public static void main(String[] args){
String[] numbers = {};
String[] moreNumbers = new String[numbers.length + 1];
numbers = moreNumbers;
print(numbers);
task(numbers, moreNumbers);
}
public static void task(String[] numbers, String[] moreNumbers){
Scanner scan = new Scanner(System.in);
System.out.println("Please Pick A Task: \n 1:Add A Number to Speed Dial \n 2:Speed Dial A Number \n 3:Exit");
String choice = scan.nextLine();
switch(choice){
case "1":
AddNumber(numbers , moreNumbers);
break;
case "2":
CallNumber(numbers);
break;
case "3":
System.out.println("Goodbye!");
System.exit(0);
break;
}
}
private static String[] AddNumber(String[] numbers,String[] moreNumbers) {
Scanner scanner = new Scanner(System.in);
boolean cont = false;
do{
System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
moreNumbers[moreNumbers.length - 1] = scanner.nextLine();
System.out.print("Would you like to add another? Yes or No: ");
String answer = scanner.nextLine().toLowerCase();
if(answer.equals("yes")) continue;
else if(answer.equals("no")) {
print(numbers);
cont = true;
}
}while(!cont);
System.arraycopy(numbers, 0, moreNumbers, 0, numbers.length);
return moreNumbers;
}
public static void printPhoneBook(String[][] keys){
for(String[] row : keys){
for(String s : row){
System.out.print(s);
}
System.out.println();
}
}
public static void print(String[] numbers){
for(int i = 0; i< numbers.length; i++){
System.out.println((i+1) + ") " + numbers[i]);
}
}
}
那是因为 Java 中的数组是固定大小的。让我们看看您的代码:
String[] numbers = {};
String[] moreNumbers = new String[numbers.length + 1];
您正在创建一个长度为 0 的字符串数组 numbers
和另一个长度为 numbers
的字符串数组 moreNumbers
添加到 1(例如,长度 1)。
然后,将这些数组传递给 task
方法,在该方法中向 moreNumbers
数组添加一个数字。
moreNumbers[moreNumbers.length - 1] = scanner.nextLine();
在这里,您将值 (scanner.nextLine()
) 设置为 moreNumbers
的索引 0(因为 moreNumbers
的长度为 1)。当你获取另一个值时,它被设置为相同的索引 0,因为 moreNumbers
没有改变它的大小。
可以使用ArrayList
的add
方法,可以调整大小:
import java.util.ArrayList;
// ...
private static ArrayList<String> AddNumber() {
// Create a new ArrayList to store the numbers
final ArrayList<String> numbers = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
boolean cont = false;
do {
System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
// Add the next number to the ArrayList
numbers.add(scanner.nextLine());
System.out.print("Would you like to add another? Yes or No: ");
String answer = scanner.nextLine().toLowerCase();
if (answer.equals("yes")) continue;
if (answer.equals("no")) {
print(numbers);
cont = true;
}
} while (!cont);
return numbers;
}
预期功能:用户应该输入 1,2 或 3。1 应该允许用户向数组添加一个数字,2 应该允许用户访问数组中该点的数字,3 应该退出程序。
问题:当用户被要求输入一个数字并选择 'yes' 添加另一个数字时,只有最后输入的数字被添加到数组中。应添加所有输入的数字。为什么只加了最后一个?
import java.util.Scanner;
public class PhoneBookV2 {
public static void main(String[] args){
String[] numbers = {};
String[] moreNumbers = new String[numbers.length + 1];
numbers = moreNumbers;
print(numbers);
task(numbers, moreNumbers);
}
public static void task(String[] numbers, String[] moreNumbers){
Scanner scan = new Scanner(System.in);
System.out.println("Please Pick A Task: \n 1:Add A Number to Speed Dial \n 2:Speed Dial A Number \n 3:Exit");
String choice = scan.nextLine();
switch(choice){
case "1":
AddNumber(numbers , moreNumbers);
break;
case "2":
CallNumber(numbers);
break;
case "3":
System.out.println("Goodbye!");
System.exit(0);
break;
}
}
private static String[] AddNumber(String[] numbers,String[] moreNumbers) {
Scanner scanner = new Scanner(System.in);
boolean cont = false;
do{
System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
moreNumbers[moreNumbers.length - 1] = scanner.nextLine();
System.out.print("Would you like to add another? Yes or No: ");
String answer = scanner.nextLine().toLowerCase();
if(answer.equals("yes")) continue;
else if(answer.equals("no")) {
print(numbers);
cont = true;
}
}while(!cont);
System.arraycopy(numbers, 0, moreNumbers, 0, numbers.length);
return moreNumbers;
}
public static void printPhoneBook(String[][] keys){
for(String[] row : keys){
for(String s : row){
System.out.print(s);
}
System.out.println();
}
}
public static void print(String[] numbers){
for(int i = 0; i< numbers.length; i++){
System.out.println((i+1) + ") " + numbers[i]);
}
}
}
那是因为 Java 中的数组是固定大小的。让我们看看您的代码:
String[] numbers = {};
String[] moreNumbers = new String[numbers.length + 1];
您正在创建一个长度为 0 的字符串数组 numbers
和另一个长度为 numbers
的字符串数组 moreNumbers
添加到 1(例如,长度 1)。
然后,将这些数组传递给 task
方法,在该方法中向 moreNumbers
数组添加一个数字。
moreNumbers[moreNumbers.length - 1] = scanner.nextLine();
在这里,您将值 (scanner.nextLine()
) 设置为 moreNumbers
的索引 0(因为 moreNumbers
的长度为 1)。当你获取另一个值时,它被设置为相同的索引 0,因为 moreNumbers
没有改变它的大小。
可以使用ArrayList
的add
方法,可以调整大小:
import java.util.ArrayList;
// ...
private static ArrayList<String> AddNumber() {
// Create a new ArrayList to store the numbers
final ArrayList<String> numbers = new ArrayList<>();
Scanner scanner = new Scanner(System.in);
boolean cont = false;
do {
System.out.print("Please Enter The Number You Wish To Save Under Speed Dial: ");
// Add the next number to the ArrayList
numbers.add(scanner.nextLine());
System.out.print("Would you like to add another? Yes or No: ");
String answer = scanner.nextLine().toLowerCase();
if (answer.equals("yes")) continue;
if (answer.equals("no")) {
print(numbers);
cont = true;
}
} while (!cont);
return numbers;
}