精华内容
下载资源
问答
  • 最近使用Scanner类的hasNest()方法进行键盘输入时,发现while循环老是停那儿,等待输入,而不执行后面的语句。 比如这样段代码: import java.util.ArrayList; import java.util.Scanner; public ...

    问题

    最近在使用Scanner类中的hasNest()方法进行键盘输入时,发现while循环老是停在那儿,等待输入,而不执行后面的语句。
    比如这样一段代码:

    import java.util.ArrayList;
    import java.util.Scanner;
    
    public class blogTest {
    	
    	    public static void main(String[] args) {
    	        Scanner in = new Scanner(System.in);
    	        ArrayList<Integer> list = new ArrayList<Integer>();
    	        while(in.hasNext()) {
    	        	int a = in.nextInt();
    	        	list.add(a);
    	        }  
    	        System.out.println(list);
    	    }
    }
    
    

    键盘输入,死循环,无法结束:

    图1

    现在解释下原因:
    hasNext()这个方法是如果此扫描器的输入中有另一个标记,则返回 true。在等待要扫描的输入时,此方法可能阻塞。扫描器将不执行任何输入。所以循环会一直下去。
    此情况可以设置一个终止符,调用hasNext()的重载方法hasNext(String patten):如果下一个标记与从指定字符串构造的模式匹配,则返回 true。扫描器不执行任何输入。

    解决方式:需要指定结束符号
    1 例:以输入"0",结束输出

    //例:以输入"0",结束输出
    Scanner sc = new Scanner(System.in);
    while (!sc.hasNext("0")) {
    	System.out.println(sc.next());
    }
    

    2 以输入"quit",结束输出

    import java.util.Scanner;
    
    public class day01 {     
    	public static void main(String[] args){        
    		System.out.print("请输入值:");        
    		Scanner s = new Scanner(System.in);        
    		while(s.hasNext()){           
    			String a = s.next();  //将s.next()赋值给变量a           
    			if("quit".equals(a)){               
    				break;           
    			}else{               
    				System.out.println(a);           
    			}        	
    		}    
    	}
    }
    

    在这里插入图片描述

    3 以输入"按回车键输入空行",结束输出

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Scanner;
    
    public class InputTest {
    
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		// 输入分割为一个一个输入(不知道个数)
    		// 按回车键输入空行结束
    		Scanner scanner = new Scanner(System.in);
    		ArrayList<Integer> list = new ArrayList<Integer>();
    		do{
    			String str = scanner.nextLine();
    			if(str.equals("")){
    				break;
    			}
    			list.add(Integer.valueOf(str));
    		}while(true);
    		//System.out.println(list);
    		System.out.println(Arrays.toString(list.toArray()));
    		
    	}
    
    }
    

    在这里插入图片描述

    4 输入风格为一行(不知道个数),以空格分隔

    // 输入风格为一行(不知道个数)
    public static void main(String[] args){
        	Scanner sc = new Scanner(System.in);
            String inputString = sc.nextLine(); 
            String stringArray[] = inputString.split(" ");
            int num[] = new int[stringArray.length];
            for (int i = 0; i < stringArray.length; i++) {
                 num[i] = Integer.parseInt(stringArray[i]);
            }  
            for (int i = 0; i < stringArray.length; i++) {
                System.out.println(num[i]);
          }  
     }
    

    在这里插入图片描述

    整理这篇博客是因为:做过好几道笔试题都卡在处理输入上,特别是一个一个输入,且不知到个数的情况,题目给的测试用例一般不会指定结束符号,所以,目前还在找一个一个从键盘输入的情况下,不用指定结束符号的解决办法。

    展开全文
  • 编写一个程序,循环从键盘接收批学生的某门课的成绩,并依次保存数组score的相应元素,直到输入的成绩为999时结束。  (1)对成绩按高到低排序,然后顺序输出排序后的所有学生的成绩,  (2)再输入一个...
    /*
    

    编写一个程序,循环从键盘接收一批学生的某门课的成绩,并依次保存在数组score的相应元素中,直到输入的成绩为999时结束。

     1)对成绩按从高到低排序,然后顺序输出排序后的所有学生的成绩,

     2)再输入一个学生的成绩,并插入排序后的成绩表中并保持有序,最后再输出所有学生的成绩

     3)再输入一个成绩,并从数组中删除与该数相同的所有同学成绩,最后输出最终的成绩表

    */

    #include <stdio.h>

    #define N 1000

    int I;


    int main(void)

    {

          int i=0,n=0;

          float score[N];

          for(i=0;;i++)

          {

                printf("输入第%d个学生的成绩:",i+1);

                scanf("%f",&score[i]);

                if(score[i]==999)

                     break;

          }//输入说有的成绩

          int j;

          for(n=0;n<i-1;n++)

         {

               for(j=n+1;j<i;j++)

              {

                    int temp;

                    if(score[n]<score[j])

                    {

                           temp=score[n];

                           score[n]=score[j];

                           score[j]=temp;

                    }

              }

         }//冒泡算法排序

          printf("从高到底分数排序为:\n");

          for(n=0;n<i;n++)printf("%7.2f ",score[n]);

                 printf("\n");//输出排序后的成绩

          I=i;

          printf("请输入这个学生的成绩:");

          scanf("%f",&score[i]);

          I=I+1;

          for(n=0;n<I-1;n++)

         {

               for(j=n+1;j<I;j++)

               {

                     int temp;

                     if(score[n]<score[j])

                    {

                           temp=score[n];

                           score[n]=score[j];

                           score[j]=temp;

                    }

              }

         }

         printf("从高到底分数排序为:\n");

         for(n=0;n<I;n++)

                printf("%7.2f ",score[n]);

         printf("\n你想删除的分数:");

         float dnumber;

         scanf("%f",&dnumber);

         for(i=0;i<I;i++)

         {

               if(dnumber==score[i])

                      i++;

               else 

                      printf("%7.2f ",score[i]);

         }

        return 0;

    }


    展开全文
  • (1)从键盘循环录入录入一个字符串,输入"end"表示结束 (2)定义一个方法 public Object[] deleteSubString(String str1,String str2) { } (3)方法功能描述:str1中删除所有的str2,并返回删除后的结果,返回结果为...

    (1)从键盘循环录入录入一个字符串,输入"end"表示结束
    (2)定义一个方法 public Object[] deleteSubString(String str1,String str2) {
    }
    (3)方法功能描述:从str1中删除所有的str2,并返回删除后的结果,返回结果为Object[]数组

    • 该数组的第一个元素为删除所有的str2后的最终的字符串
    • 该数组的第二个元素为删除的str2的个数

    代码实现:

    import java.util.Scanner;
    public class StringExcise4 {
    	public static void main(String[] args) {	
    		StringExcise4 se = new StringExcise4(); //创建自己的对象,调用非静态方法
    		StringBuilder sb = new StringBuilder();
    		String s2 = "asd";
    		@SuppressWarnings("resource")
    		String s1 = new Scanner(System.in).next();
    
    		do{
    			sb.append(s1);
    			}while(sb.toString().indexOf("end")<0);
    		sb.delete(s1.length()-"end".length(),s1.length());//删除字符串s里的“end”
    			
    			Object[] oj = se.deleteSubString(sb.toString(), s2);
    			System.out.println("字符串删除后为:" + oj[0]);
    			System.out.println("删除次数为:" + oj[1]);
    			
    		
    		String s = "123asdfhjfasdgfkjasd";//测试数组s
    		Object[] o = se.deleteSubString(s,s2);
    		System.out.println("字符串删除后为:" + o[0]);
    		System.out.println("删除次数为:" + o[1]);
    	}
    	
    	public Object[] deleteSubString(String str1,String str2) {
    		int delCount = 0;
    		Object[] obj = new Object[2];
    		StringBuilder sb = new StringBuilder(str1);
    		while(true){
    			int index = sb.indexOf(str2);//查找str2在str1中的下标
    			if(index == -1)//当index等于-1时查询结束
    				break;
    			sb.delete(index, index + str2.length());//删除str1中的str2字符
    			delCount++;
    		}
    		if(delCount > 0){
    				obj[0] = sb.toString();
    				obj[1] = delCount;
    			}
    		else {
    			System.out.println("输入的数组中不包含已有的数组!");
    				obj[0] = obj[1] = -1;//不存在,返回-1
    		}
    		return obj;
    	}
    
    }
    

    输出结果:在这里插入图片描述

    展开全文
  • 2.三单元任务实训:有一个...猜数游戏:从键盘中任意输入一个数据,判断数列是否包含该数。 import java.util.Scanner; public class ArrayTest { public static void main(String[] args) { //数组初始化

    2.第三单元任务一实训:有一个数列:8、4、2、1、23、344、12,编辑实现以下功能。循环输出数列的值;求数列中所有数值的和;猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含该数。

    import java.util.Scanner;
    
    public class ArrayTest {
    	public static void main(String[] args) {
    		//数组初始化
    		int[] list = new int[]{8, 4, 2, 1, 23, 344, 12};
    		//循环输出数列的值
    		for (int i = 0; i < list.length; i++) { // 循环输出
    			System.out.println(list[i]);
    		}
    		//数列中所有数值的和
    		int sum = 0;
    		for (int i = 0; i < list.length; i++) { // 循环输出
    			sum = sum + list[i];
    		}
    		System.out.println("和是:" + sum);
    		//猜数游戏:从键盘中任意输入一个数据,判断数列中是否包含此数。
    		Scanner input = new Scanner(System.in);
    		System.out.print("请输入一个整数: ");
    		int guess = input.nextInt();
    		boolean isCorrect = false;
    		for (int i = 0; i < list.length; i++) {
    			if (guess == list[i]) {
    				isCorrect = true;
    				break;
    			}
    		}
    		if (isCorrect) {
    			System.out.println("猜对了!");
    		} else {
    			System.out.println("Sorry!");
    		}
    	}
    }
    
    


    展开全文
  • C语言 编写程序,完成:从键盘上输入一个n*n数组各元素,把每行元素循环左移1位输出。 代码: #include<stdio.h> #include <string.h> void main(){ int i,j; int a[3][3]; for(i=0;i<3;i++)//输入...
  • 从键盘输入 N 无符号数(整数,小于256),将其转换为二进制数后存放字节型缓冲区 BUF 。对这 N 数进行由大到小排序,排序后仍将其存储 BUF ,并将排序后的结果屏幕上显示出来(请用循环程序设计方法...
  • 例题:编写一个录入函数:用来从键盘接收n整型数并存放在一个整型数组主函数调用该函数计算出这n整数之和。 代码如下: /*代码分析:录入函数需要两参数:一个参数是需要用来存储数字的数组,另一个...
  • 编写程序,循环接收用户从键盘输入多字符串,直到输入“end”时循环结束,并将所有已输入的字符串按字典顺序倒序打印。 ... import java.lang.reflect.... * 8题:编写程序,循环接收用户从键盘输入多字符串,...
  • 、Scanner类简介 Java 5添加了java.util.Scanner类,这是...借助于Scanner,可以从键盘中读入数据。 二、Scanner类用法 java.util.Scanner 是 Java5 的新特征,我们可以通过 Scanner 类来获取用户的输入。 下面是...
  • //把值暂设为第一次录入的值 while (num != 0 ) { if (num ) { //如果录入的值比储存最小值还小,就替换掉 min = num; } if (num > max) { //如果录入的值比储存最大值还大,也替换掉 max = num; }...
  • 因为需要看到每一次循环输出的结果,所以我是个循环里面加了2秒的延时,我的第一个想法是这两秒的延时就用来等待键盘的输入,如果没有输入,那么过了这两秒就继续循环了。另外还有想法是再开一线程,专门...
  • 1. 代码如下: #include #include #include float angle = 0.0; float red=1.0, blue=1.0, green=1.0; void changeSize(int w, int h) { // Prevent a divide by zero, when window is too short // (you ...
  • 本人测试公司app购买课时卡的时候,需要验证一下出售数量是否显示正确,还有多次购买是否存在故障,所以写了一个循环的脚本,果然发现了安全键盘在连续购买的时候极易发生无法输入导致app卡住的BUG,已经反馈给...
  • 题目:从键盘输入一字符串 a,并的最大元素后边插入另 外输入的字符串 b。 分析:第一步要做的是找到最大的元素所在的下标,第二步就是将b字符串插入最大的元素后面。 代码如下: #include <stdio.h&...
  • 从键盘输入10字符串存放到一个二维数组,求出其中最大者并输出 算法设计如下: 1.定义一个二维数组a[10][80]用于存放输入的10字符串 2.定义一个维字符数组max[80]用于存放目前的最大字符串 3.将二维数组...
  • package fsl; import java.util.Scanner; //引入一个java输入包 public class Jpsr { //定义一个类(键盘输入)-Jpsr, public static void main(String[] args) { // TODO 自动生成的方法存根 int a[]=new
  • C语言中从键盘输入字符串时的一些问题

    万次阅读 多人点赞 2019-05-17 20:52:10
    scanf()在从键盘读入字符时并不会根据所定义的字符数组的大小来控制读入多少 , 而是scanf( ) 传入的地址开始一直访问下一个元素的内存 , 碰见空格符或者回车符时才停止读入并存入结束符’\0’ , 这就有可能...
  • 如题,近来刷字符串相关机试题时,因为要从键盘读入字符串进行判断,故采用cin.getline()函数来获取键盘写入的字符串,多次循环输入判断。 若开始输入字符串之前要输入一个数据代表输入多少组字符串。则cin....
  • 知识网络1.2 从键盘输入一个数组

    千次阅读 2018-11-01 23:54:12
    从键盘输入一个数组 固定大小的数组装入可变数量的元素 cin的特殊用法 前一节讲述了电脑自动帮我们填入数组的方式。很多情况下,我们也需要程序运行时,让用户(一般都用这词来指程序的使用者)从键盘逐个...
  • java中从键盘读入数据

    千次阅读 多人点赞 2016-06-09 15:24:52
    Java程序开发过程,需要从键盘获取输入值是常有的事,但Java它偏偏就没有像c语言给我们提供的scanf(),C++给我们提供的cin()获取键盘输入值的现成函数!Java没有提供这样的函数也不代表遇到这种情况我们就束手无策...
  • C++中键盘输入一个字符串

    万次阅读 2014-04-23 18:10:26
    小白今天编写一个c++程序时,想要键盘输入字符数组,愚笨的shi
  • 习题5.2 从键盘输入n数,求这n的最大数与最小数并输出。 代码块: package App; import java.util.*; public class App1 { public static void main(String[] args) { int num; Scanner reader=new .....
  • for (int i = 1; i ; i++) { printf("请输入%d学生的信息:\n", i); printf("学生的姓名:\n"); scanf_s("%s", su.Name,100); printf("学生的学号:\n"); scanf_s("%d", &su.StudentID); printf("学生的分数:\n...
  • 用汇编编写一个从键盘上输入并排序的程序 data segment shuzi_w db 0 key DW 100 dup(0) ;输入的数的存放位置 buffer dw 0 ;输入数字的暂存位置 输入的数字大于10 需要缓冲 n db 1 ; 总共输入的数字数 注意...
  • import java.util.Scanner;... * 从键盘输入一个班5学生的分数,求和并输出。 */ public class Test_Method07 { public static void main(String[] args) { //定义一个键盘录入功能 Sca...
  • 要实现从键盘随机输入几整数,首先编写Scanner输入方法并创建一个List用来存储输入的数: Scanner s = new Scanner(System.in); System.out.println(&quot;请输入任意多整数,以负数代表输入结束&quot...
  • 17.从键盘上输入一个正整数n,请按照以下五行杨辉三角形的显示方式, 输出杨辉三角形的前n行。请采用循环控制语句来实现。 (三角形腰上的数为1,其他位置的数为其上行相邻两数之和。) 1 1 1 1 2 1 1 3 3 1 1 ...
  • 1 #include <iostream> 2 using namespace std; 3 int main() 4 { int a,max; 5 cin>>a;//先输入一数a 6 max=a; ...i++)//再循环输入九数 ,如果输入的数较第一次输...
  • 十周-从键盘输入20整数

    千次阅读 2012-11-04 11:43:46
    上机目的:解决键盘输入的数的累加 上机任务:学会这类型的编程 [cpp] view plaincopyprint?/* * Copyright (c) 2011, 烟台大学计算机学院 * All rights reserved. * 作 者:谷志恒 * 完成日期...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 119,109
精华内容 47,643
关键字:

在第一个循环中从键盘