【问题标题】:How do I create a name generator?如何创建名称生成器?
【发布时间】:2011-05-27 16:21:15
【问题描述】:

我正在创建一个提示名字和姓氏的程序,然后打印一个字符串,该字符串由用户名字的第一个字母,后跟用户姓氏的前五个字符,然后是范围内的随机数组成10 到 99。

我知道如何提示输入名称并找到随机数,但我不知道如何

"打印一个由名字的第一个字母,后跟姓氏的前五个字母组成的字符串。"

谁能帮帮我?我是一个非常初级的 Java 程序员。

所以我真的很接近完成这个,但它一直在说第 55 行的“非法开始表达”,我无法弄清楚。这是我的代码,对不起,我知道这是一团糟:

Random generator = new Random();

int num1;

num1 = generator.nextInt(10-99);

第 55 行:公共字符串子字符串;

String result;


System.out.println("Result:" + (beginIndex) + (firstname.substring(0,1) + lastname. substring (0,5)) + (num1) ); 

【问题讨论】:

标签: java random numbers


【解决方案1】:

对我来说似乎是作业,所以我会给出提示。第一部分查找方法substring()charAt(),第二部分查找Random class

【讨论】:

  • @MByD +1 好清晰的建议。虽然我必须说我个人会选择 Math.random() 而不是 Random 类。
  • @Boro - 谢谢,我通常使用Random 类,因为我更喜欢忽略已经完成工作的额外计算,但这对我来说并不重要:)
  • 谢谢。这是一门所谓的非主要计算机科学课程的作业,但我的老师未能从我们的书中指出正确的帮助方向。我可以轻松查找并弄清楚。感谢您的帮助。
  • @MByD 现在我在想,实际上在我的代码中处理随机数,例如掷骰子,我可以很容易地使用Random.nextInt(xx),但我使用了Math.random(),然后乘法然后施法。很好,我正在使用实用程序方法,现在修改代码会更容易:) 我必须说我在这些情况下使用 Math.random() 是错误的。谢谢 MByD。
  • @Jessica:不要忘记将 MByD 的答案标记为“正确”(与单击答案旁边的“打勾”框有关)。这会将其移至答案列表的顶部,以便以后更容易找到。
【解决方案2】:

我是 .NET 开发人员,所以我无法帮助您了解语法,但您需要获取名字的第一个字符,通常可以通过索引器访问 - firstName.charAt(0),以及第二个,范围从第一个字符(序数 0)到第五个字符(序数 4),可能类似于 lastName.substring(0, 4);并连接这两个字符串 -

concatenatedName = firstName.charAt(0) + lastName.substring(0, 4);

【讨论】:

  • +1 用于提供好的建议并正确编写“Java 风格”方法名称。在每个方法名称的开头没有那些丑陋的大写字母:)
  • :) 谢谢,显然不得不在丑陋的地方不同意你,但这是另一个时间和地点的宗教战争。
【解决方案3】:

这样就可以了

import java.lang.String;
import java.io.*;
import java.util.Random;


class Name {
    public static void main(String args[]) {

        Random rnd = new Random(); // Initialize number generator

        String firstname = "Jessica"; // Initialize the strings
        String lastname = "Craig";

        String result; // We'll be building on this string

        // We'll take the first character in the first name
        result = Character.toString(firstname.charAt(0)); // First char

        if (lastname.length() > 5)
            result += lastname.substring(0,5);
        else
            result += lastname; // You did not specify what to do, if the name is shorter than 5 chars

        result += Integer.toString(rnd.nextInt(99));


        System.out.println(result);

    }
}

【讨论】:

  • 我本来想给你一个否定的答案,但我决定不这样做。为什么?你基本上给出了一个家庭作业问题的解决方案。这不是一件好事,因为如果 OP 尝试自己解决它会更好。其次,您不能在 Java 中将数字隐式连接到字符串。第三,如果姓氏少于 5 个字符,您的程序将崩溃。
  • @darioo 我同意你的看法。你不应该给出解决方案,尤其是在家庭作业问题上。恕我直言,重点是让 OP 学习解决方案,从长远来看,它会好得多。这是一个古老的事实,就像它本身一样 :) 曾经有一个人谈论过要给鱼,但他没有拿鱼,因为他喜欢钓鱼,或者类似的东西 :)
  • @darioo 至于您的“第二”评论,您在这种情况下是错误的。您无法在不强制转换的情况下将数字分配给字符串。但是你总是可以连接它。由于x += yx = x + y 相同,因此您在分配之前先进行转换,因此它可以正常工作。
  • @Boro:你是对的。我刚试了一下,效果很好。让我有点惊讶,因为我真的没想到它会起作用。你每天都会学到新东西 ;-) 虽然我永远不想在生产代码中看到这样的东西。
  • @darioo 我刚刚更新了答案,解决了您提到的问题。我知道我们不应该帮助无助的学生。让我们只希望 OP 阅读有关主题和斗争的信息 - 现在删除答案没有多大意义,因为 OP 可能已经阅读了它。
【解决方案4】:

您缺少 println 的右括号。

我建议删除字符串 concats 周围的所有括号,它们只会让阅读变得困难。

System.out.println("Result:" + beginIndex + firstname.substring(0,1) + lastname.substring(0,5) + num1 );

如果用户输入的姓氏只有 4 个字符,会发生什么情况?

【讨论】:

    【解决方案5】:

    【讨论】:

    • 方法名全小写
    【解决方案6】:

    看看这有多容易?我给出了 4 个简单的名字,可以用单词等代替。代码中的“4”代表String中名字的个数。这很简单。对于那些想要更短的人(我所做的只是减少间距):

    import java.util.*; 
    public class characters{ 
    public static void main(String[] args){
    Random generate = new Random(); 
    String[] name = {"John", "Marcus", "Susan", "Henry"};
    System.out.println("Customer: " + name[generate.nextInt(4)]); }}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 2018-12-18
      • 1970-01-01
      • 2011-07-19
      • 2012-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多