当前位置: 首页 > 知识库问答 >
问题:

这是类型转换错误还是参数没有正确传递给方法?

赫连昕
2023-03-14

我们被要求做以下事情:

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

这就是我所拥有的:

导入java.util。阵列;导入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;
}

}

它正在正确接受输入,但它似乎没有执行生成NewName方法。我正在使用的方法类型是否出错?是否应生成新名称返回字符串类型?如果是这样,我如何获取所有输入字符串的第二个字母并连接它们?谢谢

共有3个答案

李文轩
2023-03-14
  • 生成新名称应返回字符串,而不是字符。字符是单个字符,类似于字母 A。
  • 在要求旧名称之前,您无法生成新名称,对吗?在方法中,除非您另有说明(例如,使用循环),否则代码从上到下运行,就像指令列表一样。
卜泓
2023-03-14

“输入5个名称:”具有误导性。考虑“Entername”(x1)“(of“5”):”或类似的东西。

但是要回答你的问题:在你得到任何名字之前,你正在运行生成NewName!它正在为仅包含空元素的数组执行!

更改此:

     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)以更好地指示它们所包含的内容以及它们是什么(字符串,字符,数组等)。例如名称名称数组而不是 getNamesnew 名称输出名称而不是输出

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

凌蕴藉
2023-03-14

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

然后你必须改变它

char result = '\0';

具有

String result = "";

然后开始将字母附加(使用)到String。

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

另外,String newS=Arrays.toString(getNames);这一行没有多大意义。你想循环浏览你的名字,而不是你名字的所有字母。

我会将该循环重写为:

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

或者,使用每个循环

for (String name : names) {
  result += name.charAt(1);
}
 类似资料:
  • 当我将对象引用(数组是对象)传递给方法时,会传递值,对吗? 在以下代码中,初始值为:333。方法传递后,值将更改。为什么?在这种情况下,引用传递的是值吗? 数组是“特例”吗? 另一种方法:(逻辑“传递值”):

  • 问题内容: 我正在尝试学习go,并且一开始我想尝试组装一个超级简单的Web服务器来控制iTunes。过去,我已经多次达到这个目的,并认为我可以在这里简单地取消对osascript的调用。 注释掉的“ say 5”命令 确实 起作用。 我收到的回应如下: 我不确定从这里要去哪里,任何方向都将不胜感激。 问题答案: 我明白了 我认为exec.Command(…)如果参数中有空格,则在参数中添加双引号,

  • 有时对一个类的某些方面进行 参数化(parameterize)是很有用的。例如, 你可能需要管理不同版本的 gem 软件包,既可以为每一种版本创建分离的单独的类, 也可以使用继承和覆盖,为一个类传递一个版本号作为参数。 操作步骤 声明参数作为如下类定义的一部分: class eventmachine( $version ) { package { "eventmachine": pro

  • 几天前,我在java代码中输入了一个错误,但它编译后运行良好。(尽管结果很奇怪。) 我的代码是: 我无法找到为什么第二个作业没有错误,并且打印了124。(当然,“|”在ASCII码中是124。但为什么是“124”,而不是“|”?) 这是编译器错误吗?还是我还不知道的正确java语法?

  • 问题内容: 我有一个使用处理程序发布可运行实例的线程。它工作得很好,但是我很好奇我如何将参数传递给Runnable实例使用?也许我只是不了解此功能的工作原理。 为了避免出现“您为什么需要此问题”的问题,我有一个线程化的动画,必须调出UI线程来告诉它实际绘制的内容。 问题答案: 只需使用接受参数的构造函数实现的类就可以了, 您可以使用参数化构造函数创建Runnable类的实例。

  • 我一直认为Java使用按引用传递。 然而,我看到一篇博客文章声称Java使用传递值。 我想我不明白他们的区别。 原因是什么?