java scan.next_关于java:替换不必要的scan.nextLine();的更好方法; 找到标准字符串?...

我一直在研究HackerRank问题,并尝试在向任何社区寻求帮助之前一直研究解决方案。当我设法使当前的代码正常工作时,我感到其中包含一些不必要的代码,并且有人可以教我如何做得更好,因为我不想因为它有用而养成不良习惯。

在本课程HackRank 30天的代码中(第2天),我们被要求从Stdin读取3行(Int,Double和String),并使用扫描仪读取,保存和操作它们。

Scanner scan = new Scanner(System.in);

/* Declare second integer, double, and String variables. */

int myI = scan.nextInt();

double myDouble = scan.nextDouble();

scan.nextLine();

String myString = scan.nextLine();

扫描Int和Double很容易,但是当我尝试扫描String时遇到了一些问题:

A)如果我使用scan.next();我找了一个单词,而不是完整的字符串。

B)如果我使用scan.nextLine();我回到了空白行。

经过一番研究之后,我发现有人建议这样做,因为我刚刚做了一次scan.nextDouble();。 scan.nextLine();只是在读取该行末尾的空格(这对我来说没有多大意义),并且如果我添加了额外的" scan.nextLine();"在声明我的字符串之前,它应该起作用。

果然做到了。我真的不明白为什么,当然也不觉得这是解决此问题的正确方法。看来,如果我不得不经常这样做,会膨胀代码吗?

任何人都可以阐明以下几点:

1)为什么用scan.nextLine();返回空白,直到我添加一个额外的?

2)是否有更好的方法从扫描中找到字符串?

要用更少的行编写代码,您可以读取换行符并在同一行中解析myDouble。

int myI = scan.nextInt();

double myDouble = Double.parseDouble(scan.nextLine());

String myString = scan.nextLine();

尽管行数较少,但实际上要做的事情数量相同,所以我无法想象它的处理强度较低,但格式肯定更好。 我想我是在问是否有办法完全不需要额外的" nextLine"。

scan.nextLine()返回所有内容,直到下一个新的行定界符或 n。

所以,我假设输入看起来像这样:

1 2.5

whatever

因此,该字符串实际上在第一行和第二行之间具有下一行定界符。 以前,当您没有多余的nextLine()时,会将您的字符串分配给一个空字符串,因为它占用了下一行定界符。

多余的nextLine()消耗了不必要的下一行分隔符,因此可以将您的字符串分配给您想要的字符串。

通过使用nextDouble,这有助于解决这个问题,我只是挑选出double而不是整个行! 有没有更雄辩的解决方案呢?

@ AdamS.Cochran据我所知,不是真的。 这是我现在使用的方法。 另外,请记住将其标记为正确,如果这对您有帮助!

scan.nextLine();

为什么在这里? 我认为这就是为什么将其弄乱。

我如何学会做到的也是这样。

System.out.println("Enter String");

String string = read.nextLine();

上面的代码段按原样工作。 我只是想知道是否有更好的方法。 如果只有一个输入,您的方法也可以工作,在此测试用例中,我们同时为3个输入传递了一个Int,Double和String。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值