【问题标题】:How do I reference a user-entered int?如何引用用户输入的 int?
【发布时间】:2014-03-14 20:23:47
【问题描述】:

简单的问题(我是初学者!)...我的 java 程序需要引用存储为变量“a”和“z”的用户输入的整数。这两个变量是使用 Scanner 和 nextInt() 方法初始化的。这是我的代码:

Scanner in = new Scanner(System.in);
    int a;
    int z;
    int x;

    System.out.println("Please provide a lower bound (integer): ");
    a = in.nextInt();

    System.out.println("Please provide an upper bound (integer): ");
    z = in.nextInt();

所以现在我需要在稍后出现的 for 循环中引用这些用户输入的变量,但我不知道执行此操作的语法。我需要 for 循环从“a”开始并一个接一个地继续直到“z”。

for(a ; a <= z ; a++) {
    //code irrelevant to my question
}

Java 非常清楚我不能只在 for 循环中编写变量,那么我该怎么做呢?谢谢!

【问题讨论】:

  • 错误信息是什么?
  • 您遇到什么错误?假设您的变量 az 在范围内,则执行 for(; a &lt;= z; a++) P 应该可以。
  • 您只需要参考 a 和 z 还是两者之间的所有数字?

标签: java for-loop java.util.scanner user-input


【解决方案1】:

你想用循环计数器来做到这一点,让它成为i

for (int i = a; i <= z; i++) {
    //process i
}

这样你就有了i,它从a开始,一直增加到z

【讨论】:

  • 这可行,但我仍然不确定为什么 OP 发布的内容不起作用......当答案解释问题所在时,我喜欢它,而不仅仅是显示可能的解决方案跨度>
  • @JuanMendes 我也无法弄清楚,因为 OP 表示这可能无关紧要,但这似乎是问题的关键。
  • 这是因为 a by itsels 不是声明。让它a=a 可以解决这个问题。我在答案中发布了错误
【解决方案2】:

从 a 开始并在 z 结束,包括:

for(; a <= z ; a++) {

在 z 之前停止:

for(; a < z ; a++) {

这将改变变量a

您不需要在第一个分号之前填充该空格。那是“初始化计数器”点,您已经根据循环上方(之前)的用户输入初始化了计数器。

如果您不希望 a 更改,则只需将其值复制到一个临时值中,如@skiwi 的回答:

for(int i = a; i <= z; i++)  {

这里有一些很好的信息:https://www.google.com/search?q=for+loop+java

【讨论】:

  • 可能是想创建一个新变量而不是修改a
  • 所以当你在初始化程序中只有a 时,java 会抛出一个错误?让它a = a; a &lt; z; a++ 也可以工作(虽然很笨拙)?
  • 我没有测试它,但是在初始化程序中只有aa = a 有什么意义?或者在任何情况下。
  • 只是为了了解实际问题是什么。就是 a 本身不是一个有效的语句,a=a 只是使它成为一个有效的 java 语句,我不建议你这样做,只是解释你为什么会出错。
【解决方案3】:

如果你想包含 z:

for(int i=a;i<=z;i++){
    [stuff]
}

或者,如果您希望它排除 z:

for(int i=a;i<z;i++)
    [stuff]
}

这是因为 for 循环的格式是 for(int [counter]=[start value];[counter][condition][limit];[counter][change amount])。例如,如果您想要循环到(包括)两个(包括零),您的代码将是for(int i=0; i&lt;3;i++),而如果您希望它从两个循环到零,它将是for(int i=2; i&gt;=0;i--)。 要使循环跳过值只需更改计数器增加/减少的量,例如i+=2,或i-=2

【讨论】:

    【解决方案4】:

    现有答案告诉您如何解决它,但不解释问题所在。如果您尝试编译该类,您将看到以下错误

    $ javac SomeClass.java
    SomeClass.java:16: error: not a statement
    for(a ; a <= z ; a++) {
    ^
    

    那是因为a 本身并不是一个声明。

    最简单的方法是省略a,因为您不需要初始化它

    for(; a <= z ; a++) {}
    

    或者,您可以创建一个循环变量,这样您就不会影响a,您可以在循环中对其进行初始化,使其看起来更像一个普通循环。

    for(int i = a; i <= z ; i++) {}
    

    【讨论】:

    • Language Specs 回答您关于评论的问题。 ForInit是声明列表...这导致我们发现一些有趣的怪癖:a++是声明/a + 1不是; getA() 是一个声明/new Integer(a) 是一个声明,a = a 也是一个声明。值得庆幸的是,Java 认证并没有试图强制执行有关语言规范的知识水平。
    • 胡安。其实没有。声明 a 不是声明与声明 ForInit 是不同的。实际上,我什至说ForInit 不是根据语言规范的声明:)。我可以写一个关于我陈述的目的的陈述,但我最好不要,进一步的陈述会使每个人都陷入深深的困惑状态。只是不要假设我的陈述是在陈述显而易见的事情(它们只对记住陈述规范的人来说是显而易见的:D)。相信我,我知道我的陈述!
    • 很好的信息。我会考虑在未来的答案中更多地解决“问题是什么”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-30
    • 2021-07-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多