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

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

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

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

Q&A

解決済

3回答

1873閲覧

char配列

qwerty123

総合スコア26

Java

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

0グッド

0クリップ

投稿2015/05/27 13:00

char配列に関して、以下のプログラムを作成しました。

import java.util.Scanner;

public class Sample {
public static void main(String[] args) {
Scanner stdin = new Scanner(System.in);

//配列生成 String str = "abcdef"; System.out.print("alphabet? "); //char型の配列に入れ替える char[] ch = str.toCharArray(); //文字を入力 String let = stdin.next(); //入力されたString型をchar型にキャスト char[] letChar = let.toCharArray(); for(int i = 0; i < ch.length; i++) { if(ch[i] == letChar[0]) { System.out.println(i + 1); }else{ System.out.println("ERROR"); } } }

}

char型の配列に入れ替えて、標準入力から得た「a」から「f」までの文字が、配列の何番目かを表示するプログラムです。
indexOfは使わずに何番目かを表示したいです。

aを標準入力で入れると「1」、「f」を入れると6が返ってきてほしいのですが…

上記のプログラムだと、aを入れると

alphabet? a
1
ERROR
ERROR
ERROR
ERROR
ERROR

と表示されてしまいます。
どこを修正すれば良いでしょうか。

よろしくお願いします。

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

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

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

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

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

guest

回答3

0

lang

1import java.util.Scanner; 2 3public class SampleX { 4 5 public static void main(String[] args) { 6 Scanner stdin = new Scanner(System.in); 7 System.out.print("alphabet? "); 8 String str = stdin.next(); 9 // 入力された String を char[] に変換 10 char[] charArray = str.toCharArray(); 11 12 for (char c : charArray) { 13 System.out.println(String.format("%c: %s", c, myIndexof(c))); 14 } 15 } 16 17 static final char[] CHARS = "abcdef".toCharArray(); 18 19 // c が CHARS 中の何番目かを調べる。 20 // a なら "1 番目"、 CHARS に無い文字なら "ERROR" 21 static String myIndexof(final char c) { 22 for (int i = 0; i < CHARS.length; i++) { 23 if (CHARS[i] == c) { 24 // c を見つけた。 25 return String.format("%d 番目", i + 1); 26 } 27 } 28 // c は CHARS に無かった。 29 return "ERROR"; 30 } 31}

実行例:

alphabet? asdfあ a: 1 番目 s: ERROR d: 4 番目 f: 6 番目 あ: ERROR

投稿2015/05/27 17:19

katoy

総合スコア22324

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

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

0

ベストアンサー

これでは各文字ごとに判定を出すことになるので,次のいずれかの方法を取ります.

  1. ヒットした時点でmainメソッドから抜ける

lang

1 for(int i = 0; i < ch.length; i++) { 2 3 if(ch[i] == letChar[0]) { 4 System.out.println(i + 1); 5 return; 6 } 7 } 8 System.out.println("ERROR");
  1. ヒットしたか否かを保持するboolean変数を用意し,ループ外で判定

lang

1 boolean found = false; 2 for(int i = 0; i < ch.length; i++) { 3 4 if(ch[i] == letChar[0]) { 5 System.out.println(i + 1); 6 found = true; 7 break; 8 } 9 } 10 if(!found) 11 System.out.println("ERROR");
  1. ループカウントの数値をループの外に置き,ループを抜けた時の数値で判定

lang

1 int i; 2 for(i = 0; i < ch.length; i++) { 3 4 if(ch[i] == letChar[0]) { 5 break; 6 } 7 } 8 //ヒットせずにループを抜けた場合,i=ch.lengthになって抜けていることになる 9 System.out.println(i == ch.length ? "ERROR" : Integer.toString(i));

投稿2015/05/27 13:17

swordone

総合スコア20651

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

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

0

for文は止めない限りは回数分(この場合は6回)必ず繰り返します。なので、どの文字を入力しても、必ず6行表示されます。
System.out.printlnを書くのはforループの後ろにするのが正解です。
判定結果は変数に格納して、for文が終わったら、if文で見つかったかどうかを判定し、結果を出力します。

投稿2015/05/27 13:06

argius

総合スコア9388

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問