2015-05-21 57 views
0

与此相同question我想在用户给我输入字符串时从用户那里获得输入。但不同之处在于,在我拿到字符串之前,我必须得到26个数字。所以这段代码在得到myStrings时工作不正常。我该怎么办?获取输入java

错误代码:

for (int i = 97; i < 123; i++) { 
     alphabet[i] = scan.nextFloat(); 
    } 
    String infix; 
    int i = 0; 
    String[] myStrings = new String[100]; 

    while (scan.hasNextLine()) { 
     infix = scan.nextLine(); 
     if (infix.length() > 0) { 
      myStrings[i] = infix; 
      i++; 
     } else { 
      break; 
     } 
    } 

编辑:错误的方法,当我调试它,我才给的字符串作为输入,此行:(“while (scan.hasNextLine())”)通(提供具体数字后),并infix在这一行(infix = scan.nextLine();是“”),所以while,不正确。然后再打破。

+0

您是什么意思?为什么它错了? – Stultuske

+0

链接问题的第一个注释也适用于此处:“此代码以什么方式工作错误”?请在你的问题中更具体一些,否则人们会倾向于关闭它们。 – Thomas

+0

“我想从用户那里得到输入,而他/她给我的字符串。”而这段代码并没有这样做@Stultuske – user4615534

回答

0

问题是,在从扫描仪读取一个浮点数后,扫描仪中会保留换行符"\n",这意味着当第一个scan.nextLine()运行时,会得到剩下的换行符,导致您的代码碰到else块,并打破循环。

你可以得到你的循环之前的下一行:

String infix; 
int i = 0; 
String[] myStrings = new String[100]; 
infix = scan.nextLine(); //Get it here to throw away the new line 

while (scan.hasNextLine()) { 
    infix = scan.nextLine(); //Should contain whatever the user entered 
    //code 
} 

或者,当你从环路获得浮动,你可以使用Float.parseFloat()scan.nextLine()结合起来,就像这样:

for (int i = 97; i < 123; i++) { 
    alphabet[i] = Float.parseFloat(scan.nextLine()); 
} 

当您收到最后一个浮点数后,将停止在扫描仪中留下一条新线

0

这是Java中的一个常见问题。在用户使用Scanner获得输入后,像nextInt(); nextDouble();你需要消耗一行空scan.nextLine();因为这些方法不消耗新的行表达式“\ n”。 ,然后才能获得一些字符串。

+0

非常感谢你:) – user4615534