質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

1回答

2294閲覧

コマンドラインと引数を扱いたい。

TomofumiKimura

総合スコア65

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2017/05/02 07:57

今 コマンドの扱い方のクラスを書いてるのですが、いまいちどうしたらいいのかがわかりません。このクラスでhandleLineメソッドは コマンド make-new もしくは最初の文字mが入力されたらOverhandShuffler のmakeNew を発動したいのですが、ユーザーが make-new(もしくはm)スペース、13と入力した場合は0から12の配列の数字が新しく作られるのですが、このmake-new もしくはmはできているのですが、その隣のargument引数の数字をmake(その数字)のように発動したいのですが、どうしたらその数字を使う?ことができるのでしょうか??

java

1import java.util.*; 2 3public class OverhandApp{ 4 public static void main(String [] args){ 5 StringBuilder s = new StringBuilder(); 6 Scanner input = new Scanner(System.in); 7 // an instance of OverhandShuffler 8 while(input.hasNextLine()){ 9 handleLine(s, input.nextLine()); 10 } 11 } 12 13 private static int[] getNums(Scanner input){ 14 List<Integer> numlist = new ArrayList<Integer>(); 15 while(input.hasNextInt()){ 16 numlist.add(input.nextInt()); 17 } 18 int[] num = new int[numlist.size()]; 19 for(int i = 0; i<num.length; i++){ 20 num[i] = numlist.get(i); 21 } 22 return num; 23 } 24 25 public static void handleLine(StringBuilder str, String input){ 26 Scanner scan = new Scanner(input);// user type 27 OverhandShuffler shuffler = new OverhandShuffler(); 28 if (scan.hasNext()){ 29 String command = scan.next();// command 30 switch(command){ 31 case "make-new": case "m":// make-new or just m 32 shuffler.makeNew(str); 33 break; 34 case "print":case "p": 35 /** Print a string representation of the current deck*/ 36 // code here 37 System.out.println("baka"); 38 break; 39 } 40 } 41 } 42 43} 44

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

coco_bauer

2017/05/02 08:53

「コマンドの扱い方」とは具体的に何をすることですか? 発動というのは、関数を呼び出すことを意味していますか? もうしわけありませんが、質問の日本語がよく判りません。
guest

回答1

0

ベストアンサー

  • ユーザーが make-new(もしくはm)スペース、13と入力した場合は0から12の配列の数字が新しく作られるのですが、
  • このmake-new もしくはmはできているのですが、
  • その隣のargument引数の数字をmake(その数字)のように発動したいのですが、どうしたらその数字を使う?ことができるのでしょうか??

やりたいことをどう表現したらいいかも含め、なかなか苦労されているようですね。

  • make-new(もしくはm)に続けてスペース、数値(N)を入力した場合に0からN-1の配列を作りたい
  • make-new(もしくはm)が入力されたかどうかの判定処理は書けた
  • コマンドに続く数値(N)をmakeNewの引数に整数(int型)として渡したいがその整数値の取り出し方がわからない

ということかと思います。Scannerクラスにはスペース文字で区切られた単語(トークン)を文字列として取り出すnextメソッドのほかにトークンが数値表現だった場合に整数や実数で取り出すことができるメソッドがあります。そのトークンが整数ならnextIntがあります。

java

1Scanner scan = new Scanner("m 12"); 2String command = scan.next(); // -> command には String型の値"m"が入る 3int number = scan.nextInt(); // -> number には int型の値12が入る

詳しくはリファレンスも見てほしいのですが、nextIntを使う場合、「トークンが整数でなかった場合は例外が発生する」のでそれにも注意してください。つまり上記のコードでScannerの引数が"m 12x"などとなっていた場合、nextIntメソッドはトークン"12x"が整数でないため例外を発するのです。そのため、以下のいずれかの方法でプログラムが異常終了しないように配慮しましょう。

java

1switch (command) { 2case "make-new": case "m": 3 if (scan.hasNextInt()) { // 事前に整数かどうかチェックする 4 shuffler.makeNew(scan.nextInt()); 5 } else { 6 System.err.println("integer expected after make-new command"); 7 } 8 break; 9 ... 10 11// or 12 13switch (command) { 14case "make-new": case "m": 15 try { 16 shuffler.makeNew(scan.nextInt()); 17 } catch (NoSuchElementException e) { // 事前にチェックせずに例外を捕捉する 18 System.err.println("integer expected after make-new command"); 19 } 20 break; 21 ...

投稿2017/05/02 09:02

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問