扫描input.nextInt()但输入是一个字符

时间:2017-06-02 04:51:59

标签: java arrays sorting java.util.scanner user-input

        int[] arr1 = new int[4];
        int[] arr2 = new int[2];
   \\this is a method to scan the arrays
         for (int i = 0; i < arr.length; i++) {
            try {
                if (input.hasNext()) {
                    arr[i] = input.nextInt();
                }
            } catch (Exception e) {
                System.out.println("Finished!");
            }
       \\at the main function 
            System.arraycopy(arr1, 0, arr3, 0, arr1.length);
            System.arraycopy(arr2, 0, arr3, arr1.length, arr2.length);
            for (int i = 0; i < arr3.length; i++) {
            System.out.print(arr3[i] + " ");
        }

我修复了它,但结果是错误的...第一个数组输入是4 5 h,第二个数组是7 8 1。输出是4 5 0 0 7 8 ....我不希望零也是最后一个元素是搞乱

非常感谢你们!

4 个答案:

答案 0 :(得分:3)

尝试,

while(input.hasNextInt())
   input.nextInt();
}

答案 1 :(得分:0)

  

它正在工作,但每当用户输入一个字符给我一个   关于不匹配的错误,因为扫描输入是int类型和输入   键入的用户是类型字符。

原因是,只要输入字符或字符串数​​据类型不同,就会将输入作为整数。因为编译器会给你InputMismatchException

因此,这些类型的错误称为运行时错误。您可以使用throws关键字或使用try - catch块来处理这些问题。对于这些类型的程序,try-catch块很好。

解决方案:

从以下关键字中包装您的用户输入:

try{
    if(input.nextInt()!='a')
    {
      arr[i] = input.nextInt();
    }
}catch(InputMismatchException e){
    //here you can get error message using 'e' or you can print custom error as your wish.
    System.out.println("Finished!");
}
  

结合两个数组的最简单方法是什么

int[] firstArray= {3, 4, 4, 5};
    int secondArray[] = {2, 4, 4, 5};

    int fLen = firstArray.length;
    int sLen = secondArray.length;

    int thirdArray[] = new int[fLen+sLen];

    System.arraycopy(firstArray, 0, thirdArray, 0, fLen);
    System.arraycopy(secondArray, 0, thirdArray, fLen, sLen);

    for(int i: thirdArray){
        System.out.print(i + " ");
    }

组合数组的方法有很多种。如果您熟悉这些,也可以使用Listread this question for more info

<强>更新

  

Carlos Heuberger 评论:

     
      
  1. 您真的想要将读取的整数与(ascii)代码进行比较   'a'?如果文件中的长度为97,则与“a”和“a”相同   逻辑将失败。
  2.   
  3. ifI中的nextInt读取(并消耗)整数 - 第一个值 - 因此只有每秒的值都会保存在arr中。
  4.   

变化:

因为你只想获得只有数组大小的输入,

if(input.nextInt()!='a')
{
  arr[i] = input.nextInt();
}

要:

if(input.hasNext())
{
  arr[i] = input.nextInt();
}

更新(提问后):

请不要改变整个问题因为每个人都回答错了。而不是那个问一个新问题。无论如何,

  

我修复了它,但结果是错误的...第一个数组输入是4   第二个阵列的5小时为7 8 1。输出是4 5 0 0 7 8 .... i   不希望零也是最后一个元素搞乱。

0因为你为第一个数组的四个索引分配了内存。

int[] arr1 = new int[4];

错过了最后一个元素,因为你只为两个索引记录内存。

变化:

int[] arr2 = new int[2];

要:

int[] arr2 = new int[3];

在显示时跳过0

for (int a = 0; a < arr3.length; a++) {
     if(arr3[a] != 0){
        System.out.print(arr3[a] + " ");
     }
 }

根据更新问题,这是固定程序:

public static void main(String[] args){

    Scanner input = new Scanner(System.in);

    int[] arr1 = new int[4];
    int[] arr2 = new int[3];
    int[] arr3 = new int[arr1.length + arr2.length];

    for (int i = 0; i < arr1.length; i++) {
        try {
            if (input.hasNext()) {
                arr1[i] = input.nextInt();
            }
        }catch (Exception e) {
        }

        System.arraycopy(arr1, 0, arr3, 0, arr1.length);  
    }

     Scanner input2 = new Scanner(System.in);

     for (int i = 0; i < arr2.length; i++) {
        try {
            if (input2.hasNext()) {
                arr2[i] = input2.nextInt();
            }
        }catch (Exception e) {
        }

        System.arraycopy(arr2, 0, arr3, arr1.length, arr2.length);
     }


     for (int a = 0; a < arr3.length; a++) {
        if(arr3[a] != 0)
            System.out.print(arr3[a] + " ");
     }
}

答案 2 :(得分:0)

你可以使用

public static void main(String[] args) 
 {
     Scanner in = new Scanner(System.in);
     int a[]=new int[10];
     try
     {
         for(int i=0;i<10;i++){
             a[i]=in.nextInt();
         }
     }
     catch(Exception e)
     {
         System.out.println("quit");
     }

 }

由于 任何char输入都会抛出异常 catch部分将执行。 以及关于连接两个数组: 既然你问过简单的方法:

int a[]={1,2,3,4};
int b[]={5,6,7};
int c[]=new int[a.length+b.length];
int j=0;

for(int i=0;i<a.length;i++){
    c[j]=a[i];
    j++;
   }
for(int i=0;i<b.length;i++){
    c[j]=b[i];
    j++;
   }
for(int i=0;i<c.length;i++){
    System.out.println(c[i]);
   }

答案 3 :(得分:-1)

如果你想从输入中获得第一个字符, 写在下面。

{{1}}