Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.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 正在拆分字符串并将其放在int数组中_Java_Arrays_String_Int - Fatal编程技术网

Java 正在拆分字符串并将其放在int数组中

Java 正在拆分字符串并将其放在int数组中,java,arrays,string,int,Java,Arrays,String,Int,我必须输入一个带有数字的字符串,例如:1,2,3,4,5。 这是输入的一个样本,然后我必须把它放在INT数组中,这样我就可以对它进行排序,但它没有按它应该的方式工作 package array; import java.util.Scanner; public class Array { public static void main(String[] args) { String input; int length, count, size;

我必须输入一个带有数字的字符串,例如:1,2,3,4,5。
这是输入的一个样本,然后我必须把它放在INT数组中,这样我就可以对它进行排序,但它没有按它应该的方式工作

package array;

import java.util.Scanner;

public class Array {

    public static void main(String[] args) {
        String input;
        int length, count, size;
        Scanner keyboard = new Scanner(System.in);
        input = keyboard.next();
        length = input.length();
        size = length / 2;
        int intarray[] = new int[size];
        String strarray[] = new String[size];
        strarray = input.split(",");

        for (count = 0; count < intarray.length ; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}
封装阵列;
导入java.util.Scanner;
公共类数组{
公共静态void main(字符串[]args){
字符串输入;
整数长度、计数、大小;
扫描仪键盘=新扫描仪(System.in);
输入=键盘。下一步();
长度=输入。长度();
尺寸=长度/2;
int intarray[]=新的int[size];
字符串字符串[]=新字符串[大小];
strarray=input.split(“,”);
对于(计数=0;计数
对于输入
1,2,3,4,5
输入长度为9<整数数学中的code>9/2=4,因此您只存储前四个变量,而不是全部5个变量

即使你修复了这个问题,如果你输入
10,11,12,13

如果您使用
1,2,3,4,50
作为输入,那么它(偶然)会起作用,奇怪的是:-)

你做这样的事情会更好

String[] strArray = input.split(",");
int[] intArray = new int[strArray.length];
for(int i = 0; i < strArray.length; i++) {
    intArray[i] = Integer.parseInt(strArray[i]);
}
String[]strArray=input.split(“,”);
int[]intArray=新的int[strArray.length];
对于(int i=0;i

作为将来的参考,当您遇到错误时,我强烈建议将其与代码一起发布。您可能没有一个拥有jdk的人随时可以编译代码来调试它!:)

您正在进行整数除法,因此如果用户碰巧输入奇数个输入,您将丢失正确的长度-这是我注意到的一个问题。正因为如此,当我用“1,2,3,4,5,6,7”的输入来运行代码时,我的最后一个值被忽略…

让我们考虑输入为“1,2,3,4”。 这意味着输入的长度是7。那么现在你写的大小是7/2=3.5。但由于大小是一个
int
,因此将四舍五入为3。简而言之,您正在丢失1个值

如果您按照以下方式重写代码,它应该可以工作:

String input;
int length, count, size;
Scanner keyboard = new Scanner(System.in);
input = keyboard.next();
length = input.length();

String strarray[] = input.split(",");
int intarray[] = new int[strarray.length];

for (count = 0; count < intarray.length ; count++) {
    intarray[count] = Integer.parseInt(strarray[count]);
}

for (int s : intarray) {
    System.out.println(s);
}
字符串输入;
整数长度、计数、大小;
扫描仪键盘=新扫描仪(System.in);
输入=键盘。下一步();
长度=输入。长度();
字符串strarray[]=input.split(“,”);
int intarray[]=新int[strarray.length];
对于(计数=0;计数
String input=“2,1,3,4,5,10100”;
String[]strings=input.split(“,”);
int[]number=新的int[strings.length];
for(int i=0;i
稍微改变一下你做事的顺序。你似乎被2除了,没有什么特别的原因

虽然您的应用程序不能保证输入由分号分隔的变量组成的字符串,但您可以很容易地让它这样做:

package com;

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        // Good practice to initialize before use
        Scanner keyboard = new Scanner(System.in);
        String input = "";
        // it's also a good idea to prompt the user as to what is going on
        keyboardScanner : for (;;) {
            input = keyboard.next();
            if (input.indexOf(",") >= 0) { // Realistically we would want to use a regex to ensure [0-9],...etc groupings 
                break keyboardScanner;  // break out of the loop
            } else { 
                keyboard = new Scanner(System.in);
                continue keyboardScanner; // recreate the scanner in the event we have to start over, just some cleanup
            }
        }

        String strarray[] = input.split(","); // move this up here      
        int intarray[] = new int[strarray.length];

        int count = 0; // Declare variables when they are needed not at the top of methods as there is no reason to allocate memory before it is ready to be used
        for (count = 0; count < intarray.length; count++) {
            intarray[count] = Integer.parseInt(strarray[count]);
        }

        for (int s : intarray) {
            System.out.println(s);
        }
    }
}
package-com;
导入java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args){
//使用前初始化的良好实践
扫描仪键盘=新扫描仪(System.in);
字符串输入=”;
//提示用户正在发生什么也是一个好主意
键盘扫描仪:用于(;;){
输入=键盘。下一步();
如果(input.indexOf(“,”>)=0{//实际上,我们希望使用正则表达式来确保[0-9],…等分组
断开键盘扫描仪;//断开循环
}否则{
键盘=新扫描仪(System.in);
继续keyboardScanner;//如果必须重新开始,请重新创建扫描仪,只需进行一些清理
}
}
String strarray[]=input.split(,“”;//将其移到此处
int intarray[]=新int[strarray.length];
int count=0;//在需要时声明变量,而不是在方法的顶部,因为在准备使用内存之前没有理由分配内存
对于(计数=0;计数
类似这样的内容:

  public static void main(String[] args) {
   String N = "ABCD";
   char[] array = N.toCharArray();

   // and as you can see:
    System.out.println(array[0]);
    System.out.println(array[1]);
    System.out.println(array[2]);
  }

Java 8提供了一种基于流的手动迭代替代方案:

int[] intArray = Arrays.stream(input.split(","))
    .mapToInt(Integer::parseInt)
    .toArray();
如果输入可能包含无法转换为整数的字符序列,请准备捕获
NumberFormatException

List-stringList=new-ArrayList(Arrays.asList(arr.split(“,”));
List<String> stringList = new ArrayList<String>(Arrays.asList(arr.split(",")));
List<Integer> intList = new ArrayList<Integer>();
for (String s : stringList) 
   intList.add(Integer.valueOf(s));
List intList=new ArrayList(); 用于(字符串s:stringList) intList.add(Integer.valueOf(s));
“没有按应有的方式工作”以什么方式?错误?在输入错误的情况下不起作用?s总是空的?
strArr=input.split(',')
然后只需将strArr复制到一个整数,我建议您改为使用:numbers[i]=Integer.parseInt(strings[i].trim()),否则,如果字符串为“4,22,42”,则会引发异常。存在除以2的原因是假设每个数字都有一个对应的逗号。当然,我们知道这是一个有缺陷的假设,但我确信这是OP当时的想法。@下一个投票者,至少要评论下一个投票的原因。@K_7“输入一个数字字符串,例如:
1,2,3,4,5
”而不是“ABCD”注意:对于Android开发者,您还需要min SDK版本24和Java 8。这并不能回答问题。问题在于创建一个int数组,而不是
列表
List<String> stringList = new ArrayList<String>(Arrays.asList(arr.split(",")));
List<Integer> intList = new ArrayList<Integer>();
for (String s : stringList) 
   intList.add(Integer.valueOf(s));