java类和静态方法

时间:2013-05-18 21:26:37

标签: java class

我有一个问题,关于如何将我已经在方法中使用的变量用于另一个方法以及如何设置用户可以输入的限制,例如,我需要编写的一个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()静态方法中编码的新生成的名称。

3 个答案:

答案 0 :(得分:2)

您永远不会致电generateNewName()。你应该把它贴在主处。如果你想让它运行。

答案 1 :(得分:1)

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

    str6 = c.readLine("Please enter a family member's name: ");
    generateNewName();
}

答案 2 :(得分: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()