对于输入一个整数的情况,nextInt()和nextLine()再parseInt()有什么区别

fiona_tian2010 2018-11-04 04:15:40
Scanner sc = new Scanner(System.in);
// K = sc.nextInt();

String sk = sc.nextLine(); //---------①
K = Integer.parseInt(sk);



String s = sc.nextLine(); //---------②

我的目的是第一个参数输入序列的个数,然后回车,第二行输入所有序列数(以空格分割,最后回车),如:
5
-2 3 5 -1 3


问题:
为什么第一个参数K用nextInt()不行,在我分割第二个参数 s 时会提示格式错误
(新人,只有一点积分,请谅解)

...全文
231 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fiona_tian2010 2018-11-06
  • 打赏
  • 举报
回复
引用 5 楼 qq_39936465 的回复:

public class test4 {

public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
String sk = sc.nextLine();
int K = Integer.parseInt(sk);
System.out.println(K);
String s = sc.nextLine();
String str[] = s.split(" ");
for (String i : str) {
System.out.println(i);
}

}

}



5
5
-2 3 5 -1 3
-2
3
5
-1
3


以上是我的代码测试,完全没问题,下次代码要贴全,可能问题出在其他地方。

嗯嗯,这种用法没问题,我问的是另一个问题,不过也谢谢你了
fiona_tian2010 2018-11-06
  • 打赏
  • 举报
回复
引用 4 楼 CEOCAO 的回复:
注意顺序 这会报错
int K = sc.nextInt();
String sk = sc.nextLine();
int K2 = Integer.parseInt(sk);
这就不会报错了
String sk = sc.nextLine();
int K2 = Integer.parseInt(sk);
int K = sc.nextInt();
你可以将你之前的代码顺序改换下,也可以重新定义个Scanner参数

那个,程序要求必须先读入一个整数,顺序不能变,我理解了,反正如果要用nextInt()就得定义两个Scanner参数对吧,多谢
qq_39936465 2018-11-05
  • 打赏
  • 举报
回复

 public class test4 {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sc = new Scanner(System.in);
		String sk = sc.nextLine();
		int K = Integer.parseInt(sk);
		System.out.println(K);
		String s = sc.nextLine();
		String str[] = s.split(" ");
		for (String i : str) {
			System.out.println(i);
		}

	}

}

5
5
-2 3 5 -1 3
-2
3
5
-1
3
以上是我的代码测试,完全没问题,下次代码要贴全,可能问题出在其他地方。
咸哼酒家 2018-11-04
  • 打赏
  • 举报
回复

注意顺序 这会报错
int K = sc.nextInt();
String sk = sc.nextLine();
int K2 = Integer.parseInt(sk);
这就不会报错了
String sk = sc.nextLine();
int K2 = Integer.parseInt(sk);
int K = sc.nextInt();
你可以将你之前的代码顺序改换下,也可以重新定义个Scanner参数
fiona_tian2010 2018-11-04
  • 打赏
  • 举报
回复
引用 2 楼 CEOCAO 的回复:
[quote=引用 1 楼 CEOCAO 的回复:]
Scanner sc=new Scanner(System.in);
int k = sc.nextInt();
Scanner sc1=new Scanner(System.in);//是不是很奇怪? 为什么还要定义一次,如果一直用sc.nextLine()或者先sc.nextLine()后sc.nextInt()也不会报错
String sk = sc.nextLine();

nextInt()方法时,将空格看作是两个输入的数据的间隔,转换自然报错拉
K = sc.nextInt(); //你输入数据了
--这个时候你按了enter,
String sk = sc.nextLine(); //于是获取到了字符串enter
K = Integer.parseInt(sk);//那么转换就报错啦

不好意思,红色字体下面
String sk = sc.nextLine();
改为
String sk = sc1.nextLine(); [/quote]




嗯嗯,我明白了,是nextLine()获取到了回车符导致解析出问题,但是这和 nextInt()“将空格看作是两个输入的数据的间隔,转换自然报错拉” 有什么关系呢? 还有,碰到我这种输入情况如果要用nextInt()是不是必须要定义两个Scanner参数?因为感觉nextInt()表意更清晰些
咸哼酒家 2018-11-04
  • 打赏
  • 举报
回复
引用 1 楼 CEOCAO 的回复:
Scanner sc=new Scanner(System.in);
int k = sc.nextInt();
Scanner sc1=new Scanner(System.in);//是不是很奇怪? 为什么还要定义一次,如果一直用sc.nextLine()或者先sc.nextLine()后sc.nextInt()也不会报错
String sk = sc.nextLine();

nextInt()方法时,将空格看作是两个输入的数据的间隔,转换自然报错拉
K = sc.nextInt(); //你输入数据了
--这个时候你按了enter,
String sk = sc.nextLine(); //于是获取到了字符串enter
K = Integer.parseInt(sk);//那么转换就报错啦

不好意思,红色字体下面
String sk = sc.nextLine();
改为
String sk = sc1.nextLine();
咸哼酒家 2018-11-04
  • 打赏
  • 举报
回复
Scanner sc=new Scanner(System.in);
int k = sc.nextInt();
Scanner sc1=new Scanner(System.in);//是不是很奇怪? 为什么还要定义一次,如果一直用sc.nextLine()或者先sc.nextLine()后sc.nextInt()也不会报错
String sk = sc.nextLine();

nextInt()方法时,将空格看作是两个输入的数据的间隔,转换自然报错拉
K = sc.nextInt(); //你输入数据了
--这个时候你按了enter,
String sk = sc.nextLine(); //于是获取到了字符串enter
K = Integer.parseInt(sk);//那么转换就报错啦

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧