-2

我有一个关于如何将我已经在一个方法中使用的变量用于另一个方法以及如何设置用户可以输入的限制的问题,例如,对于我的一个 java 家庭作业,我需要编写一个程序需要 3 到 6 个名称,然后我需要创建一个名为 geneateNewName() 的新静态方法,它必须使用 3 到 6 个名称来显示名称,并获取每个名称的第二个字母并生成一个新名称,我该怎么做,谢谢。另外,这是我到目前为止的代码:

public class Testing{
    public static void main(String args[]){
        Console c = System.console();
        String str1;
        String str2;
        String str3;
        String str4;
        String str5;
        String str6;
        str1 = c.readLine("Please enter a family member's name: ");
        str2 = c.readLine("Please enter a family member's name: ");
        str3 = c.readLine("Please enter a family member's name: ");
        str4 = c.readLine("Please enter a family member's name: ");
        str5 = c.readLine("Please enter a family member's name: ");
        str6 = c.readLine("Please enter a family member's name: ");
    }

    public static void generateNewName(){
        System.out.println((str1.charAt(1)));
        System.out.print(str22.charAt(1));
        System.out.print(str33.charAt(1));
        System.out.print(str44.charAt(1));
        System.out.print(str55.charAt(1));
        System.out.print(str66.charAt(1));
    }
}

当我在命令行上运行这个程序时,它只询问六个名称,它不显示在 generateNewName() 静态方法中编码的新生成的名称。

4

3 回答 3

2

你从不打电话generateNewName()。你应该把它放在主要的某个地方。如果你想让它运行。

于 2013-05-18T21:28:47.663 回答
1

您应该在最后读取的行之后调用 generateNewName 方法,如下所示:

    str6 = c.readLine("Please enter a family member's name: ");
    generateNewName();
}
于 2013-05-18T21:28:55.750 回答
0

就像其他人说的那样,你永远不会打电话generateNewName(),所以它不会运行。但这里有更大的问题。

您应该使用Scanner来读取用户输入。您还声明了main()限制其范围的字符串变量,因此generateNewName()无法看到它们。有几种方法可以使您的字符串可用于generateNewName(),包括单独传入所有字符串或将它们全部存储在一个数组中并传入。但是,出于您的目的,您可以将所有字符串声明为静态类变量。

class Testing
{
    public static String str1;
    public static String str2;
    public static String str3;
    public static String str4;
    public static String str5;
    public static String str6;

    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);

        System.out.println("Please enter a family member's name: ");
        str1 = scanner.next();
        System.out.println("Please enter a family member's name: ");
        str2 = scanner.next();
        System.out.println("Please enter a family member's name: ");
        str3 = scanner.next();
        System.out.println("Please enter a family member's name: ");
        str4 = scanner.next();
        System.out.println("Please enter a family member's name: ");
        str5 = scanner.next();
        System.out.println("Please enter a family member's name: ");
        str6 = scanner.next();

        generateNewName();
    }

    public static void generateNewName()
    {
        System.out.print(str1.charAt(1));
        System.out.print(str2.charAt(1));
        System.out.print(str3.charAt(1));
        System.out.print(str4.charAt(1));
        System.out.print(str5.charAt(1));
        System.out.print(str6.charAt(1));
    }
}

由于我假设您仍然是初学者,因此上面的代码将非常适合您。但我想向您展示如何使用您可能已经学习或希望很快学习的技术来减少您拥有的代码行数。通过使用for循环和字符串数组,您不必在每次想要提示和收集用户数据时都写出所有这些行。从那里您可以将名称数组传递给generateNewName()并使用另一个for循环打印出您的新名称。现在您不需要单独声明您的字符串,您可以通过简单地更改数组的大小来控制提示用户提供输入的次数。

class Testing
{
    public static void main(String args[])
    {
        Scanner scanner = new Scanner(System.in);
        int arraySize = 0;
        while(arraySize > 6 || arraySize < 3)
        {
            //Get user input here.
        }
        String[] names = new String[arraySize];
        for(int i = 0; i < names.length; i++)
        {
            System.out.println("Please enter a family member's name: ");
            names[i] = scanner.next();
        }

        generateNewName(names);
    }

    public static void generateNewName(String[] names)
    {
        for(int i = 0; i < names.length; i++)
        {
            System.out.print(names[i].charAt(1));
        }
    }
}

要在一行上打印出生成的名称,请确保使用System.out.print()而不是System.out.println().

于 2013-05-19T05:37:18.220 回答