Java Scanner多次使用问题

/*

  • 1、考虑元素唯一性问题:给出一个整数集合,假定这些整数存储在数组 A[1…n]中,确定
    它们中是否存在两个相等的元素。请设计出一个有效算法来解决这个问题,你的算法的时间
    复杂性是多少?

具体要求
输入:输入的第一行是一个正整数 m,表示测试例个数。接下来几行是 m 个测试例的数
据,每个测试例的数据由两行组成,其中第一行为一个正整数 n (n<=500),表示整数序列
的长度,第二行给出整数序列,整数之间用一个空格隔开。
输出:对于每个测试例输出一行,若该组测试例存在两个相等的元素则输出 Yes,否则,
输出No。每个测试例的输出数据用一行表示。
*/

import java.util.Scanner;
public class T1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		System.out.println("请输入测试用例数:");
		int m = sc.nextInt();
		for(int i=0;i<m;i++) {
			System.out.println("请输入数组包含元素数:");
			int n = sc.nextInt();
			getMessage a = new getMessage(n);			
			System.out.println("请依次输入数组元素并用空格隔开:");
			a.inputArgs();
			System.out.println("查找是否有相同元素:"+a.search());
			System.out.println();
		}
		sc.close();
	}
}

/*
 *  ArrayList的源码if (i >= size) throw new NoSuchElementException();
 *  在使用迭代器的时候注意next()方法在同一循环中不能出现俩次
 */

class getMessage{
	private int n;
	private int args[] = new int [n];
	public getMessage(int n) {
		this.n = n;
	}
	public void inputArgs() {
		int args[] = new int[n];
		Scanner sc = new Scanner(System.in);
		for(int i=0;i<n;i++) {
			args[i] = sc.nextInt();
	    }
		this.args=args;
		sc.close();
	}
	public void printArgs() {
		for (int i=0;i<n;i++) {
			System.out.print(this.args[i]+" ");
		}
	}
	public boolean search() {
		for(int i=0;i<n-1;i++) {
			for(int j=i+1;j<n;j++) {
				if(this.args[i]==this.args[j]) {
					return true;
				}
			}
		}
		return false;
	}
}

编译这段程序后开始出现警告,但没有报错。
运行时却出现只能运行第一次方法内容,不能运行第二次。
运行结果

然后我开始想是什么问题导致只能运行一次完整过程。刚开始我以为是类不能实例化多次,于是我开始找资料,结果都没有发现有这样的说法。方法同样也是可以多次调用的,我就很奇怪,究竟是哪里出现了问题。

过了很久之后,我开始认真看警告的内容,

是scanner出现了问题,本着学术的精神,我开始查关于scanner类的文档。

最后发现是因为scanner被关闭了,才导致后面的数据无法读入。

于是我把类方法中的sc.close();删掉之后

public void inputArgs() {
		int args[] = new int[n];
		Scanner sc = new Scanner(System.in);
		for(int i=0;i<n;i++) {
			args[i] = sc.nextInt();
	    }
		this.args=args;
	}

程序顺利运行。

程序运行结果

总结:只要在main方法中最后关闭一次scanner即可。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 使用Java Scanner可以实现连续多次输入。可以使用循环结构,如while或for循环,来重复读取输入。在每次循环中,使用Scanner的next方法读取输入,并进行相应的处理。可以使用器或其他条件来控制循环次,以达到需要的输入。同时,需要注意在读取完最后一个输入后,及时关闭Scanner对象,以释放资源。 ### 回答2: Java ScannerJava 语言提供的一个输入流处理工具,主要用于读取用户从命令行输入据或者文件中的据。当我们需要连续多次输入时,就可以使用 Scanner 来实现用户输入据的读取。 在使用 Scanner 连续多次输入时,可以通过一个循环不断读取用户输入据,直到用户结束输入为止。具体步骤如下: 1. 创建 Scanner 对象。可以通过 System.in 来获取从命令行输入据。 ``` Scanner scanner = new Scanner(System.in); ``` 2. 使用循环不断读取用户输入据。一般情况下,使用 while 循环或者 do-while 循环均可。 ``` while (scanner.hasNext()) { String input = scanner.nextLine(); // 对输入进行处理 } ``` 或者 ``` do { String input = scanner.nextLine(); // 对输入进行处理 } while (scanner.hasNext()); ``` 3. 在循环中对用户输入据进行处理。可以根据具体需求进行相应的处理操作,如将用户输入的字符串转换为字、输出用户输入的内容等。 ``` int num = Integer.parseInt(input); System.out.println("您输入字是:" + num); ``` 4. 如果用户输入结束,则退出循环。 在使用 Scanner 进行连续多次输入时,还需要注意一些问题: 1. 需要注意输入据的格式和类型,以免出现据转换错误等问题。 2. 需要对输入据进行校验,避免用户输入不正确的据。 总之,使用 Scanner 进行连续多次输入需要掌握 Scanner 的基本使用方法,同时需要注意处理输入据,避免出现错误。 ### 回答3: Java中的Scanner类是一个常用的输入工具。它可以帮助我们从标准输入流(通常是键盘)中读取用户的输入Scanner类的使用非常简单,我们只需要创建Scanner对象并指定要读取的流,然后通过next()方法获取输入的字符串即可。但是,如果我们需要连续多次输入,该如何处理呢? 一种处理多次输入的方式是使用循环结构,比如while循环或for循环。在循环体中,我们可以通过Scanner对象获取输入的字符串,并根据需要进行处理。如,我们可以使用一个字符串组用于存储用户输入的字符串,并在循环结束后逐个输出这些字符串。 另一种方式是使用Scanner的nextLine()方法,该方法可以读取一行完整的输入。在多次输入的情况下,我们可以在循环中多次调用该方法,每次输入一行,并进行相应的处理。如,我们可以使用一个StringBuilder对象用于拼接多行输入的字符串,并在输入结束后输出整个字符串。 需要注意的是,在使用Scanner连续多次输入时,需要在每次输入之间加上一些控制字符(比如空格、分隔符等),否则Scanner可能会无法读取输入。另外,如果用户输入据类型与我们需要的据类型不匹配,还需要进行类型转换。 总之,Scanner类是Java中常用的输入工具,它可以帮助我们获取用户的输入。在多次输入的情况下,我们可以使用循环结构或者nextLine()方法,根据需要进行输入、处理、输出等操作。需要注意输入的格式和据类型,以确保程序的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值