关于java编程的问题,有关Scanner

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于java编程的问题,有关Scanner相关的知识,希望对你有一定的参考价值。

源代码:
int r;
Scanner jin = new Scanner(System.in);
while (true)

try

r = jin.nextInt();
break;

catch (Exception e)

System.out.println("非法输入,请重新输入:");



该段代码的原意是输入一个整数,如果输入不合法,则重复输入过程直到输入正确。
但是,实际运行则是,一旦输入异常则直接死循环。

求解释并给出解决方案(使用scanner,并在原有代码上修改)。

加了一条打印语句,Exception里加了个next

import java.util.Scanner;

public class MyTest 

public static void main(String[] args) 
int r;
Scanner jin = new Scanner(System.in);
while (true) 
try 
r = jin.nextInt();
System.out.println("r = " + r);
break;
 catch (Exception e) 
System.out.println("非法输入,请重新输入:");
jin.next();




在eclipse 运行结果如下

参考技术A

根据我刚才试验的,可能是因为scanner缓存中始终存在异常没有清空导致的死循环,两种方法建议:

    将Scanner jin = new Scanner(System.in)块移入try块第一行;

    清空错误缓存,在catch块中增加jin.nextLine();这一句

本回答被提问者采纳
参考技术B   输入错误了之后,jin.nextInt()从控制台中读取数据,此时控制台中的数据是“非法输入,请重新输入”,而非int于是就接着进入catch语句
  import java.util.Scanner;

  public class Test
  public static void main(String[] args)
  int r;
  Scanner jin = new Scanner(System.in);
  boolean flag = false;
  while (true)
  
  try
  
  if(flag)
  jin.nextLine();
  //System.out.println(jin.nextLine());
   r = jin.nextInt();
   break;
  
  
  catch (Exception e)
  
  System.out.println("非法输入,请重新输入:");
  flag = true;
  
  
  
  
  

  

java中有关类数组定义问题

技术图片
package ahaAlgorithm.chapter1;

import java.util.Scanner;

/**
 * 
 * @Title: BubbleSort1.java
 * @Package ahaAlgorithm.chapter1
 * @Description: TODO(类在排序中的应用)
 * @author YoungSone
 * @date 2020年7月29日 上午10:03:09
 * @version V1.0
 */
public class BubbleSort1 {
    private static Scanner in;

    public static void main(String[] args) {

        Student t = new Student();
        int i, j, n, score;
        String name;
        in = new Scanner(System.in);
        System.out.println("有多少人参加?");
        n = in.nextInt();
        Student[] student = new Student[n];//定义Student类数组
        for (i = 0; i < n; i++) {
            student[i]=new Student(); //new Student类
            student[i].setName(in.next());
            student[i].setScore(in.nextInt());
        }
        for (i = 0; i < n - 1; i++) {
            for (j = 0; j < n - 1 - i; j++) {
                if (student[j].getScore() > student[j + 1].getScore()) {
                    t = student[j];
                    student[j] = student[j + 1];
                    student[j + 1] = t;
                }
            }
        }
        for (Student s : student) {
            System.out.println(s.getName() + " " + s.getScore());
        }

    }
}
class Student{
    private String name;
    private int score;
    
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getScore() {
        return score;
    }
    public void setScore(int score) {
        this.score = score;
    }
    
}
View Code

java中关于类数组要进行两次new定义

Student student =new Student[n] //声明student数组

sutdent[i]=new student()//声明 student(i)为一个新的类student

第一次定义:

student[1] student[n]

 

 

第二次定义

student[1]        student[n]

student类

变量 score 和 name

student类

 

以上是关于关于java编程的问题,有关Scanner的主要内容,如果未能解决你的问题,请参考以下文章

C++关于网络编程的问题

Java流程控制

Java流程控制

Java流程控制

Java--输入与输入

关于intellij的Java 9迁移问题与模块系统有关