gpt4 book ai didi

java - 如何打印出正确的输出

转载 作者:行者123 更新时间:2023-12-02 10:59:45 25 4
gpt4 key购买 nike

简单来说,这几乎就是我需要的代码,用于在第四个和最后一个输入上转换 IllegalArgumentException 并打印出 Bad input[]

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

当前输出为

[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;
}

}

最佳答案

我个人会做这样的事情:

第 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;
}

第 3 步:验证输入是单个数字还是用逗号分隔的多个数字。如果不是,则打印并返回。

// Is the input not valid? Return a bad result
if(!s.matches("(\\d+,)*\\d+")){
System.out.print("Bad input ");
int[] emptyArray = {};
return emptyArray;
}

第 4 步:现在我们确定输入是有效的。因此,我们可以用逗号 (,) 分割输入并创建整数数组。这可以使用您已有的 Scanner 来完成,尽管我个人会使用 String[] strArray = s.split(","); 然后转换此 String-数组到 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;

Try it online.

作为引用,这里是一个没有 Scanner 的可能实现:

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;

Try it online.

关于java - 如何打印出正确的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51423478/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com