web-dev-qa-db-ja.com

文字列を分割して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;
        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);
        }
    }
}
26
user1076331

入力1,2,3,4,5の入力の長さは9です。9/2 = 4は整数演算であるため、5つすべてではなく、最初の4つの変数のみを格納しています。

それを修正したとしても、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]);
}

将来の参考のために、エラーが発生した場合は、コードとともに投稿することを強くお勧めします。コードをコンパイルしてデバッグできるjdkを持っている人がいないかもしれません。 :)

52
corsiKa

Java 8は、手動反復に代わるストリームベースの代替手段を提供します。

int[] intArray = Arrays.stream(input.split(","))
    .mapToInt(Integer::parseInt)
    .toArray();

入力に整数に変換できない文字シーケンスが含まれる可能性がある場合は、NumberFormatExceptionをキャッチする準備をしてください。

20
Andy Brown

「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);
}
2
Tapan Thaker
String input = "2,1,3,4,5,10,100";
String[] strings = input.split(",");
int[] numbers = new int[strings.length];
for (int i = 0; i < numbers.length; i++)
{
  numbers[i] = Integer.parseInt(strings[i]);
}
Arrays.sort(numbers);

System.out.println(Arrays.toString(numbers));
0
Trevor Freeman
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));
0
egroque

作業の順序を少し変更します。特別な理由もなく、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);
        }
    }
}
0
Mike McMahon

あなたは整数除算を行っているので、ユーザーが偶然奇数個の入力を行うと正しい長さを失います-それは私が気づいた1つの問題です。このため、「1,2,3,4,5,6,7」の入力でコードを実行すると、最後の値は無視されます...

0
Colby