Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何打印出正确的输出_Java - Fatal编程技术网

Java 如何打印出正确的输出

Java 如何打印出正确的输出,java,Java,简单地说,这就是我需要的代码,用于在第四个和最后一个输入上强制转换IllegalArgumentException,并打印出错误的输入[] 我最成功的尝试是让代码在[2]输出和[1,2]输出之后打印出错误的输入[] 电流输出为 [6, 8, 9, 10] [1002] empty array [] [2] Bad input[] Bad input[] [1, 2] 但我需要它 [6, 8, 9, 10] [1002] empty array [] Bad input[] Bad input[

简单地说,这就是我需要的代码,用于在第四个和最后一个输入上强制转换IllegalArgumentException,并打印出错误的输入[]

我最成功的尝试是让代码在[2]输出和[1,2]输出之后打印出错误的输入[]

电流输出为

[6, 8, 9, 10]
[1002]
empty array []
[2]
Bad input[]
Bad input[]
[1, 2]
但我需要它

[6, 8, 9, 10]
[1002]
empty array []
Bad input[]
Bad input[]
Bad input[]
Bad input[]
下面是完整的代码

import java.util.Arrays;
import java.util.Scanner;

public class String2intArray {

    public static void main(String[] args) {
        System.out.println(Arrays.toString(str2ia("6,8 ,9 , 10")));
        System.out.println(Arrays.toString(str2ia("1002")));
        System.out.println(Arrays.toString(str2ia("")));
        System.out.println(Arrays.toString(str2ia(", 2")));
        System.out.println(Arrays.toString(str2ia("one,two")));
        System.out.println(Arrays.toString((str2ia("1,,2"))));
        System.out.println(Arrays.toString(str2ia("1 , 2 ,")));  
    }

    public static int[] str2ia(String s) {
        int arraylengt = 0;
        int arrayindex = 0;
        Scanner scan = new Scanner(s).useDelimiter(" *, *");

        if(s.length() == 0) {
            int[] emptyArray = {};
            System.out.print("empty array ");
            return emptyArray;
        }

        while (scan.hasNext()) {
            if (scan.hasNextInt()) {
                int nextInt = scan.nextInt();
                arraylengt ++;
            } else {
                // discard next token
                scan.next(); 
            }
        }

        int[] intArray = new int[arraylengt];

        Scanner scan2 = new Scanner(s).useDelimiter(" *, *");
        try {
            while (scan2.hasNext()) {
                if (scan2.hasNextInt()) {
                    intArray[arrayindex] = scan2.nextInt();
                    arrayindex++; 
                } else {
                    // discard next token
                    throw new IllegalArgumentException("Bad input");
                }    
            }
        } catch (IllegalArgumentException e) {
            System.out.print("Bad input");
            int[] emptyArray = {};
            return emptyArray;
        }

        return intArray;
    }

}

只需将
.useDelimiter(“*,*”)
更改为
.useDelimiter(“,”)

它需要一点正则表达式,而不是您使用的正则表达式

这是我的方法

1) 我将使用模式编译正则表达式(Scanner.useDelimiter在内部使用已编译的模式)

^\\s*(\\d+(\\s*,\\s*\\d+)?\\s*$

2) 我将检查字符串上是否与正则表达式匹配

3) 如果匹配检查空字符串,则返回空数组

4) 如果不使用逗号分隔法拆分字符串并将元素放置在int数组中(不要忘记修剪拆分的字符串)

公共静态模式数组\u Pattern=Pattern
.编译(“^\\s*(\\d+(\\s*,\\s*\\d+)?\\s*$”;
公共静态int[]getArray(字符串str){
int[]emptyArray={};
Matcher match=ARRAY_pattern.Matcher(str);
if(match.matches()){
如果(str.length()>0){
字符串[]arr=str.split(“,”);
int[]intarray=新int[arr.length];
对于(int i=0;i
我个人会这样做:

// Determine the length of the array:
int arraylength = 0;
Scanner scan = new Scanner(s).useDelimiter(",");
while(scan.hasNextInt()){
  scan.nextInt(); // Discard the integer
  arraylength++;
}

// Fill the result-array:
int[] intArray = new int[arraylength];
int index = 0;
Scanner scan2 = new Scanner(s).useDelimiter(",");
while(scan2.hasNextInt()){
  intArray[index] = scan2.nextInt();
  index++;
}
return intArray;
步骤1:删除所有空白:

// Remove all spaces from the input:
s = s.replaceAll("\\s", "");
步骤2:验证输入是否为空。如果是,请打印并返回

// Is the input empty? Return an empty array
if(s.isEmpty()){
  System.out.print("empty array ");
  int[] emptyArray = {};
  return emptyArray;
}
// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
  System.out.print("Bad input ");
  int[] emptyArray = {};
  return emptyArray;
}
第3步:验证输入是单个数字,还是多个由逗号分隔的数字。如果不是,请打印并返回

// Is the input empty? Return an empty array
if(s.isEmpty()){
  System.out.print("empty array ");
  int[] emptyArray = {};
  return emptyArray;
}
// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
  System.out.print("Bad input ");
  int[] emptyArray = {};
  return emptyArray;
}
步骤4:现在我们可以确定输入是有效的。因此,我们可以用逗号(
)拆分输入并创建整数数组。这可以通过您已有的
扫描仪来完成,尽管我个人会使用
字符串[]strArray=s.split(“,”)
然后将此
字符串
-数组转换为
int
-数组

使用
扫描仪
时,它将如下所示:

// Determine the length of the array:
int arraylength = 0;
Scanner scan = new Scanner(s).useDelimiter(",");
while(scan.hasNextInt()){
  scan.nextInt(); // Discard the integer
  arraylength++;
}

// Fill the result-array:
int[] intArray = new int[arraylength];
int index = 0;
Scanner scan2 = new Scanner(s).useDelimiter(",");
while(scan2.hasNextInt()){
  intArray[index] = scan2.nextInt();
  index++;
}
return intArray;

作为参考,这里是一个不带
扫描仪的可能实现:

String[] strArray = s.split(",");
int arrayLength = strArray.length;
int[] intArray = new int[arrayLength];
for(int index = 0; index < arrayLength; index++){
  // No need to try-catch the ParseException, since we already validated the String above
  intArray[index] = Integer.parseInt(strArray[index]);
}
return intArray;
String[]strArray=s.split(“,”);
int arrayLength=strArray.length;
int[]intArray=新的int[arrayLength];
对于(int index=0;index

我会首先在“str2ia”方法的开头删除字符串中的空白,然后在while循环中使用一个变量来跟踪前一个字符-如果它是非整数且当前字符是非整数,则抛出异常。-这是解决问题的一种方法。
scan.nextInt()这将仅返回
int
s<代码>“1,2”
将跳转到
2
,它将忽略无法转换为
int
的内容。就我个人而言,我会首先验证整个输入,然后将其转换为整数数组。例如:步骤1:删除输入中的所有空白。步骤2:输入字符串是否为空?打印
空数组
并返回空数组。步骤3:输入字符串是否无效(例如,
如果(!s.matches(“(\\d+,)*\\d+”)
)?打印
错误输入
并返回空数组。步骤4:将现在已验证的字符串转换为整数数组(我个人会使用逗号上的str.split,但如果需要,您仍然可以使用扫描仪)。这是家庭作业吗,或者你想将这些字符串转换成整数数组,用于你正在进行的与学校无关的项目?@KevinCruijssen这或多或少是一个有趣的暑期项目,只是一个更大项目的一部分。如果我正确地理解了你说的话,我不确定你的意思是什么,但我不确定这是否与代码的其余部分兼容。这将导致
6,8,9,10
也输出
错误的输入[]
。试过了,就像凯文说的那样。啊,是的,当然了,很明显,我总是这样做,并且使它变得更复杂。我真的不知道为什么我浪费了这么多时间,而我可以用Delimeter作为逗号。但是一个小问题是,有没有一种简单的方法可以让它打印出“错误输入”?