java程序无法读取字符串
请参阅上面的代码,它是无错误的,但在我输入双精度后,程序不会读取字符串,而是直接显示输出。但是当我注释int和double的扫描语句时,程序就会读取我的字符串。为什么会这样?更改此行java程序无法读取字符串,java,Java,请参阅上面的代码,它是无错误的,但在我输入双精度后,程序不会读取字符串,而是直接显示输出。但是当我注释int和double的扫描语句时,程序就会读取我的字符串。为什么会这样?更改此行 import java.util.*; class DataTypes { public static void main(String args[]) { int i = 4; double d= 4.0; String s = "Hackerrank"
import java.util.*;
class DataTypes {
public static void main(String args[]) {
int i = 4;
double d= 4.0;
String s = "Hackerrank";
Scanner scan = new Scanner(System.in);
int j = scan.nextInt();
double d1 = scan.nextDouble();
String s1 = new String();
s1 = scan.nextLine();
j = j+i;
System.out.println(j);
d1 = d1+d;
System.out.println(d1);
System.out.println(s+" "+s1);
scan.close();
}
}
到
您并没有按照您想要的方式读取字符串,只需使用下面的代码使其按您想要的方式工作即可
s1 = scan.next();
有关更多信息,请参阅此
编辑:如果输入由带空格的字符串组成,则可以执行以下操作:
s1 = scan.next();
这是因为nextDouble()
,此方法不会使用输入的最后一个换行符,因此在下次调用nextLine()
时会使用该换行符。在读取字符串之前添加newLine()
将消耗新行,您将能够输入字符串。尝试以下操作:
scan.nextLine();
s1 = scan.nextLine();
换线
import java.util.*;
class Demo{
public static void main(String args[]){
int i = 4;
double d= 4.0;
String s = "Hackerrank";
Scanner scan = new Scanner(System.in);
int j = scan.nextInt();
double d1 = scan.nextDouble();
String s1 = scan.next();
j = j+i;
System.out.println(j);
d1 = d1+d;
System.out.println(d1);
System.out.println(s+" "+s1);
scan.close();
}
}
下线
s1 = scan.nextLine();
将起作用。这是因为您输入:,所以在获得新行之前,它不能转到下一行 因此,对于非字符串使用示例: int j=scan.nextInt();scan.nextLine() 将此行替换为
import java.util.*;
class DataTypes {
public static void main(String args[]) {
int i = 4;
double d = 4.0;
String s = "Hackerrank";
Scanner scan = new Scanner(System.in);
// System.out.print("Enter j: ");
int j = scan.nextInt();
scan.nextLine();
// System.out.print("Enter dl: ");
double d1 = scan.nextDouble();
scan.nextLine();
String s1 = new String();
// System.out.print("Enter s1: ");
s1 = scan.nextLine();
j = j + i;
System.out.println(j);
d1 = d1 + d;
System.out.println(d1);
System.out.println(s + " " + s1);
scan.close();
}
}
出现此问题是因为对
nextDouble
的调用只会消耗号码本身,而不仅仅是后面的换行
发生这种情况:
0.1\n
0.1\n
\n
推回其缓冲区\n
double d1 = Double.parseDouble(scan.nextLine());
1 3.5I'm a short string
手动使用代码中不需要的行字符:
double d1 = Double.parseDouble(scan.nextLine());
1 3.5I'm a short string
呼叫下一步而不是下一行:
double d1 = Double.parseDouble(scan.nextLine());
1 3.5I'm a short string
注意,这一次只消耗1个单词
double d1 = scan.nextDouble();
scan.nextLine();
String s1 = scan.nextLine();
通过调用nextline:
double d1 = Double.parseDouble(scan.nextLine());
1 3.5I'm a short string
这将限制您的程序使用换行符分隔的数字,而不允许使用任何分隔符:
double d1 = scan.nextDouble();
String s1 = scan.next();
如果已经设置了值,为什么要使用
扫描仪
?@foxdie value已经设置为s而不是s1。我想通过从用户处读取s1来打印s和s1的连接字符串。他说的是“new string()”@Andy.inamdar扫描仪允许您输入值在控制台中…它用于验证结果是否正确或变量是否具有良好的值。这不是一个可以格式化的GUI。。。这更多的是一个信息。如果输入是“这是下一行”怎么办?是的。很明显。但是OP要求扫描新的“行”,而不是第一个单词。更好。另外,如果您解释为什么不应该使用“new String()”,您的答案将是完整的。请参阅问题中的“strings1=newstring();”一行。@LalitVerma非常感谢。它起作用了。但为什么它现在起作用了?为什么我们需要在s1=scan.nextLine()之前使用scan.nextLine()?我可以知道原因吗?这将对我有帮助。:)但是它不占用stringstry thisdouble d1=double.parseDouble(scan.nextLine())中的空间代码>请格式化您的代码,因为它几乎不可读。您还可以添加一些说明,而不是现成的解决方案