Javaでキーボードから入力された文字列をソートする方法

このQ&Aのポイント
  • Javaのプログラムでキーボードから入力された文字列をソートする方法について教えてください。
  • Java初心者です。キーボードから入力された文字列をソートするプログラムを作成したのですが、エラーが発生してしまいます。どうすれば解決できるでしょうか。
  • JavaのソートプログラムでNullPointerExceptionエラーが発生しています。どうすればこのエラーを解決できるでしょうか。
回答を見る
  • ベストアンサー

Javaでキーボードから入力された文字列をソートするプログラムについて。

Java初心者です。今回、タイトル通りのプログラムを作成する事になったのですが、 import java.io.*; import java.util.*; public class dicsort { public static void main(String args[]) throws NumberFormatException, IOException{ String[] diclist = new String[4]; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); for(int i=1; i<diclist.length; i++){ System.out.print("ソートしたい単語を入力して下さい。"+i+"語目"); diclist[i] = in.readLine(); } Arrays.sort(diclist); System.out.println("答えは"); for(int n=1; n<diclist.length; n++){ System.out.println(diclist[n]); } System.out.println("である。"); } } というプログラムを実行したところ、 ソートしたい単語を入力して下さい。1語目あさ ソートしたい単語を入力して下さい。2語目さか ソートしたい単語を入力して下さい。3語目かさ Exception in thread "main" java.lang.NullPointerException at java.util.Arrays.mergeSort(Unknown Source) at java.util.Arrays.sort(Unknown Source) at dicsort.main(dicsort.java:11) というエラーが発生してしまいました。 ソートの部分で問題が起きているらしいのですが、自分では考えが凝り固まってしまい間違いが発見出来ません。 どなたか原因を教えて頂けないでしょうか、よろしくお願いします。

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

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

public class dicsort { public static void main(String args[]) throws NumberFormatException, IOException{ /* これで使えるのはdiclist[0],diclist[1],diclist[2],diclist[3] の 4つ。*/ String[] diclist = new String[4]; BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); /* diclist[0]にもちゃんと値を与えてやる */ for(int i=0; i<diclist.length; i++){ /* 俺の修正に伴い、最初が0語目になるのを修正した。 かつ、俺は数値と文字列を足す、というのが嫌いなので文字列に変換した。 質問者のコードと違い、4つの言葉を入力する。 */ System.out.print("ソートしたい単語を入力して下さい。"+Integer.toString(i + 1)+"語目"); diclist[i] = in.readLine(); } Arrays.sort(diclist); System.out.println("答えは"); for(int n=0; n<diclist.length; n++){ System.out.println(diclist[n]); } System.out.println("である。"); } } /* おまけ: 1.濁点や半濁点についても調べてみよう 2.java.util.Dictionary<K,V>とか。(同じ物が複数入力した時の処理は頑張れ) */

koatory
質問者

お礼

ぬああああ、ありがとうございます。 配列の0飛ばしは初歩中の初歩の間違いでした、何で気付けなかったんだろう・・・ 濁点の方もまた盲点でした。こちらも色々試行してみようと思います。 重ね重ねありがとうございました。

関連するQ&A

  • java 入力命令

    以下うまくどうさしません、教えてください。 public class Main { public static void main(String[] args){ System.out.println("名前"); String name = new java.util.Scanner(System.in) .nextLine(); System.out.println("年齢"); int age = new java.util.Scanner(System.in) .nextInt(); System.out.println (age + name); } }

  • 文字列を整数に型変換してソート

    コマンドライン入力で文字列を入力してそれを整数型に変換。そして、それをソートするプログラムを作ってるんですが、なぜかうまくいかず、出力される数字がすべて0になります。 どなたかヘルプおねがいします>< class sort32 { public static void main(String[] args) { System.out.println("------------------------"); int i=0; int j=i+1; int vals[]; vals = new int[args.length]; for(i=0;i>args.length ;i++) { vals[i] = Integer.parseInt(args[i]); } java.util.Arrays.sort(vals); for(int k=0; k<vals.length; k++) System.out.println("<"+vals[k]+">"); } }

  • キーボードから文字列を入力する際の質問です。

    キーボードから文字列を入力する際の質問です。 どうしてもカタカナでしか日本語の入力が出来ません。 ローマ字入力です。 import java.io.*; class Sample4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力してください。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました。"); } }

    • ベストアンサー
    • Java
  • 下記のようなjavaのプログラムで、* や / を入力しても,

    下記のようなjavaのプログラムで、* や / を入力しても, 必ず判定がfalseのほうになるんですけど、どうすれば良いですか? あまりjavaには詳しくないので、分かりやすく教えていただければ幸いです。お願いします。 import java.io.*; public class test{ public static void main(String[] args) throws IOException{ BufferedReader input = new BufferedReader(new InputStreamReader(System.in)); String a; a = input.readLine(); if((a == "*") ^ (a == "/")){ System.out.println("OK"); }else{ System.out.println("エラー"); } } }

    • ベストアンサー
    • Java
  • キーボードからの文字列検索

    いつもお世話になっております。 文字列検索をするプログラムを作っているのですが、キーボードから検索したい文字を入力して検索する方法がわかりません。コマンドラインからの検索はできたのですが、スペースが入ると思うように検索できないんです。 どなたかご教授頂けると大変うれしいです。 よろしくお願い致します。 import java.io.*; import java.util.*; class Search{ public static void main(String[] args) throws IOException, InterruptedException{ FileInputStream fis = new FileInputStream("input.txt"); InputStreamReader in = new InputStreamReader(fis); BufferedReader br = new BufferedReader(in); String msg = br.readLine(); Camera mySearch = new Camera(); String target = (args[0]); mySearch.setFocus(target.length()); BufferedReader console = new BufferedReader(new InputStreamReader(System.in)); System.out.println(msg); for(int i = 0; i < msg.length(); i++ ){ mySearch.shift(msg.charAt(i)); if(mySearch.compare(target)){ System.out.println("Pattern '" + target + "' is found at index of " + (i - target.length() + 1)); break; } } } }

  • 変数のキーボード入力について

    何度も質問してすみません。javaについて質問できるのここしかないんで・・・。早速質問なのですが、変数のキーボードから入力する方法で import java.io.*; class Sample4 { public static void main(String args[]) throws IOException { System.out.println("文字列を入力してください"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); System.out.println(str + "が入力されました"); } } とメモ帳に保存して、コンパイルしたら【文字列を入力してください】(【】は実際には入力してません)とちゃんと出てくるのに次の行にキーボードから入力すると日本語入力が出来なくなります。コマンドプロンプトには日本語入力できないのですか?教えてください。

    • ベストアンサー
    • Java
  • JAVAのプログラムについて

    独学でJAVAを勉強中なのですが、 import java.io.*; public class ExserciseD5L3_2{ public static void main(String args[]){ BufferedReader br = new BufferedReader(newInputStreamReader(System.in),1); try{ System.out.println("■■■計算クイズ■■■"); System.out.println("計算してください。"); String Que[] = {"10×50=?","21-7=?","360÷6=?"}; int Ans[] = {500,14,60}; int counter; for(counter = 0; counter <=2; counter++ ){ System.out.println(Que[counter]); System.out.println("答えは?"); String str = br.readLine(); int i = Integer.parseInt(str); if(i == Ans[counter]){ System.out.println("おめでとう!大当たりです。"); } else{ System.out.println("残念!答えは"+Ans[counter]+"です。"); } } } catch(IOException e){ System.out.println("IOエラーが発生しました。"); } catch(NumberFormatException ne){ System.out.println("入力された数値が正しくないようです。"); } } } これを実行すると ■■■計算クイズ■■■ 計算してください。 10×50=? 答えは? 500 おめでとう!大当たりです。 21-7=? 答えは? 14 おめでとう!大当たりです。 360÷6=? 答えは? 60 おめでとう!大当たりです。 となるのですが、これに おめでとう!正解数は3つです。とか正解数は2つですなどのように 正解数も出るようにするにはどのようにしたらいいのでしょうか?

    • ベストアンサー
    • Java
  • JAVAのソートプログラムについて

    List1.txtの内容の単語の数を数え、その数を単語の隣に表示するプログラムを作りました。 (1)List1.txtの内容 ゲーム ゲーム 麻雀 麻雀 野球 ゲーム (2)実行結果 C:\>java Lists ゲーム 3 野球 1 麻雀 2 (3)プログラム import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); }} } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); }}} このプログラムを上から単語の数が多い順に表示したいのですがどこをどう修正したらいいのか悩んでます。 C:\>java Lists ゲーム 3 麻雀 2 野球 1 と表示されればOKです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaのソートプログラムについて

    List1.txtの内容の単語の数を数え、その数を単語の隣に表示するプログラムを作りました。 (1)List1.txtの内容 ゲーム ゲーム 麻雀 麻雀 野球 ゲーム (2)実行結果 C:\>java Lists ゲーム 3 野球 1 麻雀 2 (3)プログラム import java.io.BufferedWriter; import java.nio.charset.Charset; import java.util.Map; import java.util.Map.Entry; import java.util.Scanner; import java.util.TreeMap; import java.io.BufferedReader; import java.io.FileNotFoundException; import java.io.InputStreamReader; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.sql.Statement; import java.util.List; import java.util.*; public class Lists { public static void main(String[] args) throws IOException{ File file3 = new File("C:\\List1.txt"); BufferedReader br3 = new BufferedReader(new FileReader(file3)); FileWriter filewriter3 = new FileWriter(file3,true); TreeMap<String,Integer> tm = new TreeMap<String,Integer>(); String line; while((line = br3.readLine()) != null){ String[] words = line.split("\\s"); for(String s : words){ if(!tm.containsKey(s)){ tm.put(s,1); }else{ tm.put(s,tm.get(s).intValue()+1); }} } for(String s : tm.keySet()){ System.out.println(s + " " + tm.get(s) ); }}} このプログラムを上から単語の数が多い順に表示したいのですがどこをどう修正したらいいのか悩んでます。 C:\>java Lists ゲーム 3 麻雀 2 野球 1 と表示されればOKです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • Javaの文字列比較について

    学校のJavaの課題で分からない問題がありました。習い始めたばかりなので全然うまくいきません。問題は、下のようです。 「円周率(3.14159265358979323846) の小数点以下の数値を一個ずつ入力していき、間違えたところでそこまでの桁数を表示するプログラムを作成しなさい。最大で小数点第20桁までとする。」です。 一応自分なりに考えてみたソースコードがこれです。 <ソースコード> import java.io.*; class Kadai0303 { public static void main(String[] args) throws IOException { String[] pied = {"14159265358979323846"}; int i; BufferedReader br= new BufferedReader(new InputStreamReader(System.in)); for(i=0;i<20;i++){ String str= br.readLine(); if(str.equals(pied)){ System.out.println(str[i]); } else{ break; } } System.out.println(i+1 + "桁まで正解"); } } おそらく文法も正しく書かれていないと思うので、馬鹿じゃないかと思うかもしれませんが、自分なりに考えてみたので、ぜひわかる方がいれば、間違っているところとどのように直したらいいかをサポートしてくださるとうれしいです。 P.S すいません。変なソースコードで。

    • ベストアンサー
    • Java