为了账号安全,请及时绑定邮箱和手机立即绑定

是否可以在 for 或 while 循环中声明引用变量?

是否可以在 for 或 while 循环中声明引用变量?

小怪兽爱吃肉 2022-12-15 15:22:47
我写了一段简短的代码,从名为“ChosenCompanies”的类中声明了 6 个引用变量,以练习 Java 中的类和构造函数。它是以下内容:public static void main(String[] args) {    String[] FinalCompaniesName = new String[6];    ChosenCompanies com1 = new ChosenCompanies();    ChosenCompanies com2 = new ChosenCompanies();    ChosenCompanies com3 = new ChosenCompanies();    ChosenCompanies com4 = new ChosenCompanies();    ChosenCompanies com5 = new ChosenCompanies();    ChosenCompanies com6 = new ChosenCompanies();    Scanner scanner = new Scanner(System.in);    int choice;    int count = 1;    while(count <= 2) {        switch(count) {        case 1:            System.out.println("Choose one:");            System.out.println("1. " + com1.name);            System.out.println("2. " + com2.name);            System.out.println("3. " + com3.name);            choice = scanner.nextInt();            switch(choice) {            case 1:                FinalCompaniesName[0] = com1.name;                break;            case 2:                FinalCompaniesName[0] = com2.name;                break;            case 3:                FinalCompaniesName[0] = com3.name;                break;            }        break;        case 2:            System.out.println("Choose one:");            System.out.println("1. " + com4.name);            System.out.println("2. " + com5.name);            System.out.println("3. " + com6.name);            choice = scanner.nextInt();            switch(choice) {            case 1:                FinalCompaniesName[1] = com4.name;                break;            case 2:                FinalCompaniesName[1] = com5.name;                break;            case 3:                FinalCompaniesName[1] = com6.name;                break;            }            break;        }            count++;    }        System.out.println("You have chosen: " + FinalCompaniesName[0] + ", " + FinalCompaniesName[1]);}我想知道我是否可以通过使用 for 或 while 循环来最小化上面的代码量,因为引用变量的名称增加了 1,就像公共 for 语句中的整数“i”一样。简而言之,是否可以使用循环来声明引用变量?
查看完整描述

2 回答

?
梦里花落0921

TA贡献1772条经验 获得超5个赞

您的示例令人困惑,所以我不知道您到底想完成什么,但这里有一个示例,说明如何提示用户从现有公司名称列表中为每个公司选择一个新名称:


    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 概念。


请随时提出有关此实施的任何问题。我很乐意提供帮助。


编辑:更新了代码以包含详细的注释和更易于理解的更全面的结构,并修复了索引问题。


查看完整回答
反对 回复 2022-12-15
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

在 Java 中不可能创建动态变量(但有反射,请参见此处

您可以创建一个数组并使用ias 索引,例如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]);


查看完整回答
反对 回复 2022-12-15
  • 2 回答
  • 0 关注
  • 72 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信