【问题标题】:Is this a type casting error or are arguments not being passed to the method properly?这是类型转换错误还是参数没有正确传递给方法?
【发布时间】:2014-04-02 07:46:41
【问题描述】:

我们被要求做以下事情:

接收您家庭成员的名字(3 到 6 个家庭成员之间),创建一个字符串数组。 编写一个名为 generateNewName() 的静态方法,如下所示: 它接收字符串数组作为参数。 它通过使用数组中每个字符串的第二个字符创建一个新的名字 示例:如果您输入名字 Rocky、Ashley、Ocarina、Baron、Ernest,则结果名称应为 oscar。 显示输入的名称和新生成的名称

这就是我所拥有的:

导入 java.util.Arrays; 导入 java.util.Scanner;

公共课山麓{

static Scanner input;

public static void main(String[] args) {

    input = new Scanner (System.in);

    String[] getNames = new String[5];
    char Output;

    Output = generateNewName(getNames);

    System.out.println(Output);

    for(int x = 0; x < 5; x++){

        System.out.println("Enter 5 names: ");
        getNames[x] = input.nextLine();
    }

}

public static char generateNewName(String[] getNames)
{
    String newS = Arrays.toString(getNames);
    char result = '\0';

    for(int j = 0; j < getNames.length; j++){

    result = (char) (result + newS.charAt(1));
    }

    return result;
}

}

它正确地接受了输入,但是它似乎没有执行 generateNewName 方法。我使用的方法类型有问题吗? generateNewName 应该返回一个字符串类型吗?如果是这样,我如何获取所有输入字符串的第二个字母并将它们连接起来?谢谢,

【问题讨论】:

  • 一件事,接收名称作为命令行参数意味着名称将在 main 方法的 args 参数中
  • 对,我刚刚编辑了那个 -- 不需要 CL。

标签: java arrays types


【解决方案1】:

您的 generateNewName() 方法应该返回一个字符串,而不是一个字符。

那你就得改了

char result = '\0';

String result = "";

然后您开始将字母附加(使用 +)到字符串。

您还可以阅读有关 StringBuilder 的信息,这将使代码更高效。

另外,String newS = Arrays.toString(getNames); 那行没有多大意义。您希望循环遍历您的姓名,而不是遍历您姓名的所有字母。

我会将该循环重写为:

for (int i = 0 ; i < names.length ; i++) {
  result += names[i].charAt(1);
}

或者,使用 for-each 循环

for (String name : names) {
  result += name.charAt(1);
}

【讨论】:

  • 谢谢...解决了错误的问题,但我只得到第一个输入的第二个字母重复 5 次而不是所有 5 个字符串的第二个字符的输出:结果= (String) (result + newS.charAt(2));
【解决方案2】:

"Enter 5 names:" 具有误导性。考虑"Enter name " + (x + 1) + " (of " + 5 + "):" 或类似的东西。

但要回答您的问题:您在获得任何名称之前正在运行generateNewName!它正在为一个只有空元素的数组执行!

改变这个:

     Output = generateNewName(getNames);
     System.out.println(Output);
     for(int x = 0; x < 5; x++){
         System.out.println("Enter 5 names: ");
         getNames[x] = input.nextLine();
     }

到这里

     for(int x = 0; x < 5; x++){
         System.out.println("Enter 5 names: ");
         getNames[x] = input.nextLine();
     }
     Output = generateNewName(getNames);
     System.out.println(Output);

:)

还可以考虑将变量重命名为 (a) 遵循命名约定,例如变量名称应为小写,以及 (b) 更能说明它们所包含的内容和它们是什么(字符串、字符、数组等)。比如namesnameArray而不是getNamesnewNameoutputName而不是Output

最后,正如其他人所说,您在generateNewName 中使用并返回了一个字符,显然名称是一个字符串,而不是一个字符。

【讨论】:

    【解决方案3】:
    • generateNewName 应该返回一个字符串,而不是一个字符。 char 是单个字符,例如字母 A。
    • 在询问旧名称之前,您不能生成新名称,对吧?在一个方法中,除非您另有说明(例如使用循环),否则代码会从上到下运行,就像指令列表一样。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-02
      • 2012-02-03
      • 2019-05-29
      • 2017-01-14
      • 1970-01-01
      • 2015-04-17
      • 2018-06-13
      • 1970-01-01
      相关资源
      最近更新 更多