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

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

新規登録して質問してみよう
ただいま回答率
85.48%
多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

5回答

1871閲覧

どうやったらintとcharが両方入った2D Arrayを作れますか?

Momomo.

総合スコア22

多次元配列

1次元配列内にさらに配列を格納している配列を、多次元配列と呼びます。

Java

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

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2017/11/06 23:54

編集2017/11/07 02:43

###前提・実現したいこと

学校の課題で、チャートを作成してそこから九九の表のように表を縦軸と横軸で見て該当する数字を表示させないといけないのですが、intとchar両方が入った多次元配列を作れず困っています。

###発生している問題・エラーメッセージ

この表をインプットしなければならなく、イメージ説明

サンプルのアウトプットがこれです。
(ユーザーが2つのStringを入力し、それを計算します)
イメージ説明

私が書いているコードはこちらなのですが、初心者なので右も左もわからずここから苦戦しています。検索しても教科書を読んでも理解できません。。。
イメージ説明
イメージ説明

###該当のソースコード

java

1import java.util.Scanner; 2public class ProteinScore { 3 public static void main(String[] args){ 4 5 Scanner sc = new Scanner(System.in); 6 7 char[][] protein = { 8 {' ','A','R','N','D','C','Q','E','G','H','I','L','K','M','F','P','S','T','W','Y','V','*'}, 9 {'A','4','-1','-2','-2','0','-1','-1','0',''-2','-1','-1','-1','-1','-2','-1','1','0','-3','-2','0','-4'}, 10 {'R','-1','5','0','-2','-3','1','0','-2','0','-3','-2','2','-1','-3','-2','-1','-1','-3','-2','-3','-4'}, 11 {'N',-2,0,6,1,-3,0,0,0,1,-3,-3,0,-2,-3,-2,1,0,-4,-2,-3,-4}, 12 {'D',-2,-2,1,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,-4}, 13 {'C',0,-3,-3,6,-3,0,2,-1,-1,-3,-4,-1,-3,-3,-1,0,-1,-4,-3,-3,-4}, 14 {'Q',-1,1,0,0,-3,5,2,-2,0,-3,-2,1,0,-3,-1,0,-1,-2,-1,-2,-4}, 15 {'E',-1,0,0,2,-4,2,5,-2,0,-3,-3,1,-2,-3,-1,0,-1,-3,-2,-2,-4}, 16 {'G',0,-2,0,-1,-3,-2,-2,6,-2,-4,-4,-2,-3,-3,-2,0,-2,-2,-3,-3,-4}, 17 {'H',-2,0,1,-1,-3,0,0,-2,8,-3,-3,-1,-2,-1,-2,-1,-2,-2,2,-3,-4}, 18 {'I',-1,-3,-3,-3,-1,-3,-3,-4,-3,4,2,-3,1,0,-3,-2,-1,-3,-1,3,-4}, 19 {'L',-1,-2,-3,-4,-1,-2,-3,-4,-3,2,4,-2,2,0,-3,-2,-1,-2,-1,1,-4}, 20 {'K',-1,2,0,-1,-3,1,1,-2,-1,-3,-2,5,-1,-3,-1,0,-1,-3,-2,-2,-4}, 21 {'M',-1,-1,-2,-3,-1,0,-2,-3,-2,1,2,-1,5,0,-2,-1,-1,-1,-1,1,-4}, 22 {'F',-2,-3,-3,-3,-2,-3,-3,-3,-1,0,0,-3,0,6,-4,-2,-2,1,3,-1,-4}, 23 {'P',-1,-2,-2,-1,-3,-1,-1,-2,-2,-3,-3,-1,-2,-4,7,-1,-1,-4,-3,-2,-4}, 24 {'S',1,-1,1,0,-1,0,0,0,-1,-2,-2,-0,-1,-2,-1,4,1,-3,-2,-2,-4}, 25 {'T',0,-1,0,-1,-1,-1,-1,-2,-2,-1,-1,-1,-1,-2,-1,1,5,-2,-2,0,-4}, 26 {'W',-3,-3,-4,-4,-2,-2,-3,-2,-2,-3,-2,-3,-1,1,-4,-3,-2,11,2,-3,-4}, 27 {'Y',-2,-2,-2,-3,-2,-1,-2,-3,2,-1,-1,-2,-1,3,-3,-2,-2,2,7,-1,-4}, 28 {'V',0,-3,-3,-3,-1,-2,-2,-3,-3,3,1,-2,1,-1,-2,-2,0,-3,-1,4,-4}, 29 {'*',-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,-4,1}, 30 }; 31 32 System.out.println("This program will score protein sequences."); 33 34 System.out.println("Please enter protein sequence."); 35 String p1 = sc.nextLine(); 36 37 System.out.println("Please enter an additional protein sequence."); 38 String p2 = sc.nextLine(); 39 40 for(int i=0;i<p1.length();i++){ 41 for(int j=0;j<protein.length;j++){ 42 if(p1.charAt(i)==protein[j]) 43 } 44 45 } 46 47 } 48} 49 50```java 51 52###試したこと 53教科書を隅々まで読みました。 54それと日本語と英語でやり方を検索しましたが参考になる答えは得られませんでした。 55 56###補足情報(言語/FW/ツール等のバージョンなど) 57Java

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

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

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

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

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

fuzzball

2017/11/07 01:25

「ユーザーが2つのStringを入力し」とありますが、質問に書かれている例は、何と何を入力したときのものなのでしょうか?あと、コードを囲えていません。 ``` です。
Momomo.

2017/11/07 02:32

例はユーザーが「ACKRFYYA」と「CRRFY」を入力したときのものです。
fuzzball

2017/11/07 02:40 編集

CRRFYの前後の * は、どういう規則で付いているのでしょうか?あと、最初の ``` に言語名を付けて ```java にすると、javaのシンタックスハイライトになります。
Momomo.

2017/11/07 02:43

2つのStringを同じ長さにするためで、もし2つめが1つめより1文字短い場合は2つ目のStringの最初に*をつけます。その後もう1文字短い場合は語尾に*をつけます。それでもまだ1つめより短い場合は語尾にさらに*を足すという形です。
fuzzball

2017/11/07 02:48 編集

最初だけ前で、その後は全て語尾ということでしょうか?一つ目の方が短い場合も同様に * を付けるのでしょうか?
Momomo.

2017/11/07 02:50

はい!その通りです。
guest

回答5

0

他の方々の回答の通りなのですが、String型を既に習っているのなら、charの配列を使い検索する代わりに

JAVA

1String code="ARNDCQEGHILKMFPSTWYV*"; 2int idx=code.indexOf("入力された文字");

で、アクセスすべき数値のインデックスを得る方法もあります。
実現するためのコードの実装方法は色々ありますが、仰るような制約事項が先に判っていないと、抽象的になってしまい、思った通りの回答は得にくいかも知れません。

投稿2017/11/07 02:22

tsuntsun

総合スコア199

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

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

Momomo.

2017/11/07 03:35

ありがとうございます! この方法全く思いつきませんでした。。。 試してみます!
guest

0

質門としては、「charとintの混在した配列の作り方」だと思いますが、
Object型の配列にすれば、作成できます。

Java

1Object[][] protein = { 2 { ' ', 'A', 'R', 'N', 'D', 'C', 'Q', 'E', 'G', 'H', 'I', 'L', 'K', 'M', 'F', 'P', 'S', 'T', 'W', 'Y', 'V', '*' }, 3 { 'A', 4, -1, -2, -2, 0, -1, -1, 0, -2, -1, -1, -1, -1, -2, -1, 1, 0, -3, -2, 0, -4 }, 4 { 'R', -1, 5, 0, -2, -3, 1, 0, -2, 0, -3, -2, 2, -1, -3, -2, -1, -1, -3, -2, -3, -4 }, 5 { 'N', -2, 0, 6, 1, -3, 0, 0, 0, 1, -3, -3, 0, -2, -3, -2, 1, 0, -4, -2, -3, -4 }, 6 { 'D', -2, -2, 1, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, -4 }, 7 { 'C', 0, -3, -3, 6, -3, 0, 2, -1, -1, -3, -4, -1, -3, -3, -1, 0, -1, -4, -3, -3, -4 }, 8 { 'Q', -1, 1, 0, 0, -3, 5, 2, -2, 0, -3, -2, 1, 0, -3, -1, 0, -1, -2, -1, -2, -4 }, 9 { 'E', -1, 0, 0, 2, -4, 2, 5, -2, 0, -3, -3, 1, -2, -3, -1, 0, -1, -3, -2, -2, -4 }, 10 { 'G', 0, -2, 0, -1, -3, -2, -2, 6, -2, -4, -4, -2, -3, -3, -2, 0, -2, -2, -3, -3, -4 }, 11 { 'H', -2, 0, 1, -1, -3, 0, 0, -2, 8, -3, -3, -1, -2, -1, -2, -1, -2, -2, 2, -3, -4 }, 12 { 'I', -1, -3, -3, -3, -1, -3, -3, -4, -3, 4, 2, -3, 1, 0, -3, -2, -1, -3, -1, 3, -4 }, 13 { 'L', -1, -2, -3, -4, -1, -2, -3, -4, -3, 2, 4, -2, 2, 0, -3, -2, -1, -2, -1, 1, -4 }, 14 { 'K', -1, 2, 0, -1, -3, 1, 1, -2, -1, -3, -2, 5, -1, -3, -1, 0, -1, -3, -2, -2, -4 }, 15 { 'M', -1, -1, -2, -3, -1, 0, -2, -3, -2, 1, 2, -1, 5, 0, -2, -1, -1, -1, -1, 1, -4 }, 16 { 'F', -2, -3, -3, -3, -2, -3, -3, -3, -1, 0, 0, -3, 0, 6, -4, -2, -2, 1, 3, -1, -4 }, 17 { 'P', -1, -2, -2, -1, -3, -1, -1, -2, -2, -3, -3, -1, -2, -4, 7, -1, -1, -4, -3, -2, -4 }, 18 { 'S', 1, -1, 1, 0, -1, 0, 0, 0, -1, -2, -2, -0, -1, -2, -1, 4, 1, -3, -2, -2, -4 }, 19 { 'T', 0, -1, 0, -1, -1, -1, -1, -2, -2, -1, -1, -1, -1, -2, -1, 1, 5, -2, -2, 0, -4 }, 20 { 'W', -3, -3, -4, -4, -2, -2, -3, -2, -2, -3, -2, -3, -1, 1, -4, -3, -2, 11, 2, -3, -4 }, 21 { 'Y', -2, -2, -2, -3, -2, -1, -2, -3, 2, -1, -1, -2, -1, 3, -3, -2, -2, 2, 7, -1, -4 }, 22 { 'V', 0, -3, -3, -3, -1, -2, -2, -3, -3, 3, 1, -2, 1, -1, -2, -2, 0, -3, -1, 4, -4 }, 23 { '*', -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, -4, 1 }, 24};

ですが、他の方も言っている通り、見出しの配列と、内容の配列は分けた方がいいでしょうね。
まず、見出しの配列から検索をかけると、場所が分かります。
内容の配列から、その場所にアクセスすれば取得できるだろうという考えですね。

投稿2017/11/07 01:37

root_jp

総合スコア4666

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

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

Momomo.

2017/11/07 03:36

ありがとうございます。 ずっと両方を配列に同居させないといけないと思っていたので目から鱗です。
guest

0

ベストアンサー

まず、すでに出ている通り上の行と左の列はただのインデックスなので、配列に入れる必要はありません。
入力された文字から行番号・列番号への対応がわかれば、二次元配列から答えを出すことができるわけです。

行も列も、A,R,N,D,C,Q,E,G,H,I,L,K,M,F,P,S,T,W,Y,V,*の順に並んでいるため、Aなら0、Rなら1という具合に対応すればいいわけです。
配列を作ってその中から探すという方法もありますが、ここでStringのindexOfが使えそうではありませんか…?

投稿2017/11/07 01:22

swordone

総合スコア20651

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

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

Momomo.

2017/11/07 03:37

わかりやすい回答ありがとうございます! この方法試してみます。
guest

0

教科書を読んで理解できないときは、先生に聞くのが普通のやり方です。

2次元配列に入れるのは数値だけでよさそうに見えますが。

投稿2017/11/07 00:22

otn

総合スコア84538

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

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

Momomo.

2017/11/07 00:44

先生は「宿題だから自分で解決するように」と言って全く質問に答えてくださりません。 もし二次元配列に数値だけを入れたとして、どうやってユーザーが入力したアルファベットを元に表の数字を表示すれば良いのでしょうか?
otn

2017/11/07 00:56

なるほど。先生に質問をした上での ここでの質問ですね。 アルファベットの配列を作り、その添え字で、2次元配列を参照します。
Momomo.

2017/11/07 01:04

書いておくべきでしたね。誤解させてしまって申し訳ないです(>_<) もうこれ以上方法がないところまで自分で試して、それでも無理だったので質問させていただきました。 回答してくださり感謝します。 アルファベットだけの配列を1つ作って、そこからindexで表の数字を探せばいいということでしょうか?
otn

2017/11/07 02:19

そうですね。例えば、"R"だと文字列配列の2番目に見つかるので、2次元配列の2番目を見ればいい
Momomo.

2017/11/07 03:37

わかりやすく教えてくださりありがとうございました。 試してみます!
guest

0

そもそも、テーブルの外側の文字は見出しなので、テーブルのデータとして入れること自体が不適当なのではないかと思います。

右側、上側とも順番は同じようですので、中身のテーブルをint[][]で、文字とテーブルのインデックスの関係を別個で管理する、というような形が適当ではないかと思います。

投稿2017/11/07 00:22

maisumakun

総合スコア145183

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

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

Momomo.

2017/11/07 00:46

回答ありがとうございます。 もしも文字を別で管理したとすれば、ユーザーがStringを入力した時にどのようにしてそのアルファベットにあたる表の数字を表示すれば良いのでしょうか?
maisumakun

2017/11/07 00:49

java.util.HashMapのようなデータ構造を使えばいいでしょう(キーと値のペアを管理できますので、キーを文字、値を行/列の番号、というデータ構造ですね)。
Momomo.

2017/11/07 01:06

まだ習っていないコードなのでHashMapが使えないんです(>_<) 使えるのは基礎的な配列、多次元配列、ループ、indexOf、charAt、equalsなどの基礎的なコードだけでこの問題を解かなければならなくて。。。 このような基礎的なコードだけで書くことは可能なのでしょうか?
maisumakun

2017/11/07 01:10

こういう、「習っていないから書いてはいけない」って、(既存のライブラリを理解するために自分で書かせるようなものは別として)教育上有害でしかないと思うんですよね…
Momomo.

2017/11/07 01:13

賛成です。 私も習ってなくても学んだことはどんどん使いたいんですが、学部のポリシーで習っていないコードを使った場合は大幅に減点されることになっていて。。。 そのためGoogleなどで検索しても習った範囲でのやり方を見つけられず苦戦している状態です。
maisumakun

2017/11/07 01:17

char[]の配列に入れて、ループして一致するか探す、という手段しかないですね。 「検索しても見つからない」のは、「実用上そんなことをするメリットがない」からで間違いないです(Javaの場合、「環境が整わなくて自力で実装しないといけない」ということはそうないですし)。
Momomo.

2017/11/07 03:38

回答ありがとうございました。 とても参考になりました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問