Javaでの整数値昇順ソートプログラムでエラーが発生する

このQ&Aのポイント
  • javaを使用してn個の整数値を入力し、昇順に並べ替えるプログラムを作成しましたが、エラーが発生しています。
  • 数字を,で区切って入力するとエラーが発生し、結果が表示されません。
  • 問題を解決するために、数字の区切りを改行に変更する必要があります。また、コードに誤りがあれば指摘いただけると助かります。
回答を見る
  • ベストアンサー

javaに関する質問

n個の整数値を入力し、それらの値を昇順に並べ替えるプログラムを書いたのですがエラーにより問題が発生しました。 問題は下記の実行例のように数字を,で区切り入力すると、エラーが発生し結果が表示されないという問題です。(Enterで改行するように区切ればエラーなく実行されます) 実行例として 整数値を入力してください。 1,5,7,3 ← 手入力部分 1,3,5,7 ← 実行結果 となれば正解のようです。 これが僕の書いたコードです。 package jp.javadrive; import java.util.Arrays; import java.util.Scanner; public class Java { public static void main(String[] args) { System.out.println("整数値を入力してください。"); @SuppressWarnings("resource") Scanner a = new Scanner(System.in); @SuppressWarnings("resource") Scanner b = new Scanner(System.in); @SuppressWarnings("resource") Scanner c = new Scanner(System.in); @SuppressWarnings("resource") Scanner d = new Scanner(System.in); int a1 = a.nextInt(); int b1 = b.nextInt(); int c1 = c.nextInt(); int d1 = d.nextInt(); int[] arr = new int[]{a1,b1,c1,d1}; Arrays.sort(arr); for(int i = 0;i < arr.length;i++) System.out.print(arr[i]); } } 初めてjavaを触った為、ググりながら書いていたので仕組みを分かっていないところがあるので、間違っている箇所があればどしどしご指摘お願いします。

  • Java
  • 回答数15
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

Enterでデータの終了になります、データの個数は1個以上なら いくつでもOKです(「1,5,7,3,2,4,6」とかでも入力可能) import java.util.Arrays; import java.util.Scanner; public class test { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); String line = scanner.nextLine(); String[] item = line.split(","); int[] array = new int[item.length]; for( int i = 0; i<item.length; i++){ array[i] = Integer.parseInt(item[i]); System.out.println("main( ):" + "i=" + i + "; " + "array[i]=" + array[i] + "; " + ""); } Arrays.sort(array); for( int i = 0; i<array.length; i++){ System.out.print(array[i] + ", "); } } }

その他の回答 (14)

回答No.5

>回答No.2 amanojaku1 Scannerの場合、デフォルトでブランクが区切り文字として定義されているようですが、デフォルトの区切り文字(ブランク)を解除したい場合は「useDelimiter(~)」(区切り文字の変更)を使えば可能なようです。 例 Scanner scanner = new Scanner(System.in); scanner.useDelimiter(""); // デフォルトの区切り文字(ブランク)を解除

回答No.4

>回答No.2 amanojaku1 >Enterでデータの終了になります ↑なのでEnterで複数のデータは入力できません。 必ず「,」でデータを区切らなければなりません。

回答No.3

>回答No.2 amanojaku1 >public class test { ↑クラス名は自分のプログラムのクラス名に変更して下さい。

  • bunjii
  • ベストアンサー率43% (3589/8248)
回答No.1

>問題は下記の実行例のように数字を,で区切り入力すると、エラーが発生し結果が表示されないという問題です。 複数の値を一括入力するにはスペース区切りにするようです。 また、提示のコードでは入力が4回になっているので1回毎にEnterキーの打鍵が必要のようです。 入力は次の2行で良く、 @SuppressWarnings("resource") Scanner a = new Scanner(System.in); 変数に取り込むときは4つの変数へスペース区切りで区分けすれば良いのではないでしょうか? int a1 = a.nextInt(); int b1 = a.nextInt(); int c1 = a.nextInt(); int d1 = a.nextInt(); int[] arr = new int[]{a1,b1,c1,d1}; 標準コンソールへの出力にはarrの要素毎に区切り記号を付加しないと複数桁の数値について判定が困難になるでしょう。 System.out.print(arr[i] + ",");

関連するQ&A

  • Javaで先頭の0を含め整数の桁数を取得したい

    Javaで整数の桁数を取得したいのですが、 Scanner ids = new Scanner(System.in); int i = ids.nextInt(); String s = String.valueOf(i); int keta = s.length(); こうした場合に 12345678 と入力すれば8が取得できるのですが、 09876543 と入力したときに7と取得してしまいます。 先頭の0を無視せずに取得するにはどうすればよいでしょうか。 宜しくお願い致します。

    • ベストアンサー
    • Java
  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print("整数値:");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • javaのfor文

    nの値の和を求めるのはこれ以外に書き方はありますか? import java.util.*; class SampleGoo{ public static void main(String args[]){ Scanner std = new Scanner(System.in); System.out.print(\"整数値:\");int n = std.nextInt(); int ans = 0; for (int i = 1;i <= n;i++){ ans = ans + i; } System.out.println(Integer.toString(ans)); } }

  • 教科書に載っていた、Javaのプログラムなのですがなぜかコンパイルでき

    教科書に載っていた、Javaのプログラムなのですがなぜかコンパイルできません。 import java.until.Scanner; class ScanInteger{ public static void main(String[] args){ Scanner scan = new Scanner(System.in); System.out.print("整数値:"); int x = scan.nextInt(); System.out.println(x + "と入力しましたね。"); } } エラーの内容としては、ScannerクラスのSに何か原因があると言うようなものが出ます。 よろしくお願いします。

  • Javaで配列のソートを行ったとき、その要素を得る

    こんにちは Javaで、 int[] arr=new int[]{3,1,5,4,6,2}; Arrays.sort(arr); で、一発で、大きさ順になるようですが、 このとき、大きさの番号順を得た得たいのですが int[] arr2=new int [7]; でarr2[1]=2;arr2[2]=6;arr2[3]=1;////という結果が得たいのですがそうするのでしょうか?

  • javaのプログラム

    int型の配列の各要素に1~10の乱数を代入し、各要素の値を縦向きの*のグラフで表示するプログラムを作っているのですが、結果がランダムででるので、自分の書いたプログラムが正しいのかわかりません。ソースを載せますので合っているのか間違っているか教えて下さい。もし間違っているならどこが間違いなのか教えていただけると嬉しいです。よろしくお願いします。 ●ソース import java.util.Random; import java.util.Scanner; class Graph { public static void main(String[] args){ Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int n = stdIn.nextInt(); int a[] = new int[n]; for (int i = 0; i < n; i++) a[i] = 1 + rand.nextInt(10); for (int i = 1; i <= 10; i++){ for (int j = 0; j < n; j++) if (a[j] <= i) System.out.print("* "); else System.out.print(" "); System.out.println(); } } } ●実行例 要素数:12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *

    • ベストアンサー
    • Java
  • javaプログラミングについて!

    ただいまjavaプログラミングの勉強をしております。 そこで数字を複数回入力させ、-1を入力すると終了し、その数字の最大、最小、平均を出力するプログラムを作っているのですが、 public static void main(String[] args) { int max = 0; int min = 100; int sum = 0; int count = 0; Scanner sc = new Scanner(System.in); System.out.println("正の整数を入力してください"); int n = sc.nextInt(); while (num01 != -1){ System.out.println("正の整数を入力してください"); sum += n; n = sc.nextInt(); count++; if(max < n) max = n; if(min > n) min = n; } System.out.println("入力された整数の最大は" + max); System.out.println("入力された整数の最小は" + min); System.out.println("入力された整数の平均は" + sum/count); } } このようなプログラミングが作れたのですが、たとえば30と10を入力したときに 最大10 最小-1 平均20 と表示されてしまいます。色々試行錯誤してみたのですが、改善されなかったため質問させて頂きました。原因と解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • JAVAで配列を使って * を縦向きのグラフで表示したいです。

    JAVAの勉強をしています。 このプログラムは配列に乱数を生成して * を 横向きにするプログラムです。 練習問題で、以下のプログラムを書き換えて、* を縦向きのグラフで表示する問題なのですが、解く方法がわかりません。 どなたか答えもしくはヒントを下さい。 よろしくお願いします。 import java.util.Random; import java.util.Scanner; public class Test06_04 { public static void main (String[] args) { Random rand = new Random(); Scanner stdIn = new Scanner(System.in); System.out.print("要素数 : "); int n = stdIn.nextInt(); //要素数を読み込む int[] a = new int[n]; //配列を生成 for (int i = 0; i < n; i++) { a[i] = 1+ rand.nextInt(10); } for (int i = 0; i < n; i++) { System.out.print("a[" + i + "] : "); for (int j = 0; j < a[i]; j++) System.out.print('*'); System.out.println(); } } }

    • ベストアンサー
    • Java
  • JAVAの演習問題

    現在JAVAを独学中なのですが、以下の演習問題でつまずいております。 (解答がない演習問題なので、このサイトにて質問することにしました。) 実行例 1からnまでの和を求めます。 nの値:5 1から5までの和は15です。 (5はキーボードにて入力された値。15はその結果の値。) 自分の解答は以下になるのですが、実行例のようになりません。 ご解答頂けると大変助かります。 import java.util.Scanner; class Ensyuu413 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("1からnまでの和を求めます。"); System.out.print("nの値:"); int n = stdIn.nextInt(); for ( int i = 0, j = 0; i <= n; i++, j += i) System.out.println("1から"+n+"までの和は"+j+"です。"); } }

  • java enum

    エラー内容 int cannot be dereferenced 何が原因でエラーになっているのですか? import java.util.*; enum light{ red,yellow,blue } class m1{ public static void main(String[] args){ int light; Scanner ss = new Scanner(System.in); System.out.println("整数値を入力 : "); int i = ss.nextInt(); if(i == light.red.ordinal()){ System.out.println("信号は赤色です"); } else if(i == light.yellow.ordinal()){ System.out.println("信号は黄色です"); } else if(i == light.blue.ordinal()){ System.out.println("信号は青色です"); } } }