例: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);
}
}
}
入力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を持っている人がいないかもしれません。 :)
Java 8は、手動反復に代わるストリームベースの代替手段を提供します。
int[] intArray = Arrays.stream(input.split(","))
.mapToInt(Integer::parseInt)
.toArray();
入力に整数に変換できない文字シーケンスが含まれる可能性がある場合は、NumberFormatException
をキャッチする準備をしてください。
「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);
}
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));
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));
作業の順序を少し変更します。特別な理由もなく、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);
}
}
}
あなたは整数除算を行っているので、ユーザーが偶然奇数個の入力を行うと正しい長さを失います-それは私が気づいた1つの問題です。このため、「1,2,3,4,5,6,7」の入力でコードを実行すると、最後の値は無視されます...