2 回答
TA贡献1772条经验 获得超6个赞
您的示例令人困惑,所以我不知道您到底想完成什么,但这里有一个示例,说明如何提示用户从现有公司名称列表中为每个公司选择一个新名称:
public class Company {
/**
* Array of available company names used to construct
* initial companies. These names are also used as possible
* choices when changing company names through {@link #changeCompanyNames()}
*/
private static final String[] COMPANY_NAMES = new String[]
{ "Alphabet", "Microsoft", "IBM", "Amazon", "Oracle", "Apple" };
/**
* <p>
* Array of Company objects initialized with a fixed number of
* new companies equal to the number of String entries in {@link #COMPANY_NAMES}.
* </p><p>
* Each company entry will inheriting a name from the mentioned array
* in the initialization process done in {@link #initializeCompanies()}
* </p>
*/
public static final Company[] COMPANIES = initializeCompanies();
private String name;
/**
* Internal constructor with private access to
* prevent class construction outside this class
*/
private Company(String name) {
this.name = name;
}
/**
* Should only be used internally on class loading to
* construct an array of companies from a list of company names.
*/
private static Company[] initializeCompanies() {
Company[] companies = new Company[COMPANY_NAMES.length];
for (int i = 0; i < COMPANY_NAMES.length; i++) {
companies[i] = new Company(COMPANY_NAMES[i]);
}
return companies;
}
/**
* Change any or all company names by prompting the user to choose
* a new name for each company from the list of available companies.
*/
public static void changeCompanyNames() {
java.util.Scanner scanner = new java.util.Scanner(System.in);
/*
* Create a new array of company names that is identical to the existing
* array of company names. We will change names here on user input and
* then update each new company name to values from this array.
*/
final String[] finalCompanyNames = COMPANY_NAMES.clone();
/*
* Iterate through an array of companies with a for-loop
* accessing and processing each company entry
*/
for (int i1 = 0; i1 < COMPANIES.length; i1++)
{
/* Prompt the user to choose a new company name for the
* company at index i1 from COMPANIES array.
*/
System.out.printf("Choose a new company name for %s company:%n", COMPANIES[i1].name);
/*
* Again iterate through all companies and print their names to
* console offering the user a list of possible names to choose from
*/
for (int i2 = 0; i2 < COMPANIES.length; i2++) {
System.out.printf("%d. %s%n", i2 + 1, COMPANIES[i2].name);
}
/*
* Get user input and validate it, then either update the array of
* final names with the new entry or print an error and move the index
* to the previous position if the input was an invalid number
*/
int input = scanner.nextInt();
if (input > 0 && input <= COMPANIES.length) {
finalCompanyNames[i1] = COMPANY_NAMES[input - 1];
System.out.println("You have choosen company name " + finalCompanyNames[i1]);
}
else {
System.out.printf("Error: input is not in range (1-%d)%n", COMPANIES.length);
/*
* It's imperative that we move the index to the previous
* position so we can iterate over this company entry again
*/
i1 -= 1;
}
}
// Print simple line separator
System.out.println("");
/* Print each choosen name that is different then the original
* company name and update the appropriate company name field value
*/
for (int i = 0; i < finalCompanyNames.length; i++)
{
if (!finalCompanyNames[i].equals(COMPANY_NAMES[i])) {
System.out.printf("Company %s has changed name to %s%n", COMPANY_NAMES[i], finalCompanyNames[i]);
COMPANIES[i].name = finalCompanyNames[i];
}
}
}
}
用户完成选择后的示例控制台输出:
Company Alphabet has changed name to IBM
Company Microsoft has changed name to Amazon
Company IBM has changed name to Alphabet
Company Amazon has changed name to Oracle
Company Oracle has changed name to Microsoft
Company Apple has changed name to Amazon
在这里,我们可以设置任意数量的公司,并让用户为他们选择任何提供的名称。代码对于初学者来说可能看起来有点令人生畏,但这实际上是最简单的方法,无需涉及任何更复杂的 Java 概念。
请随时提出有关此实施的任何问题。我很乐意提供帮助。
编辑:更新了代码以包含详细的注释和更易于理解的更全面的结构,并修复了索引问题。
TA贡献1831条经验 获得超10个赞
在 Java 中不可能创建动态变量(但有反射,请参见此处)
您可以创建一个数组并使用i
as 索引,例如chosenCompanies[i]
.
否则,您可以使用列表或地图。
编辑:
那看起来像这样。除了代码的意义之外,这个例子只展示了你将如何使用数组:
String[] choosenCompanieNames = new String[2]; // you only store two values, not 6 values
//lets store the values to chose in arrays
String[] possibleCompanieNames = new String[6]; // 6 possible values to choose (com1 - com6)
possibleCompanieNames[0] = "com1";
possibleCompanieNames[1] = "com2";
possibleCompanieNames[2] = "com3";
possibleCompanieNames[3] = "com4";
possibleCompanieNames[4] = "com5";
possibleCompanieNames[5] = "com6";
//I deleted the while loop, as it only has two ways and every way has its own code.
Scanner scanner = new Scanner(System.in);
int choice;
System.out.println("Choose one:");
System.out.println("1. " + possibleCompanieNames[0]);
System.out.println("2. " + possibleCompanieNames[1]);
System.out.println("3. " + possibleCompanieNames[2]);
choice = scanner.nextInt();
choosenCompanieNames[0] = possibleCompanieNames[choice-1]; //you must subtract one, as the array index starts at 0 and ends on 5
System.out.println("Choose one:");
System.out.println("1. " + possibleCompanieNames[3]);
System.out.println("2. " + possibleCompanieNames[4]);
System.out.println("3. " + possibleCompanieNames[5]);
choice = scanner.nextInt();
choosenCompanieNames[1] = possibleCompanieNames[3+choice-1]; //here you want com4, com5 and com6, so you can e.g. add 3 to index and substract one like code above. Or better add only 2, as 3-1=2
System.out.println("You have chosen: "
+ choosenCompanieNames[0] + ", " + choosenCompanieNames[1]);
添加回答
举报