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

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

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

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

Java

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

Q&A

解決済

2回答

1624閲覧

【java】txtファイルの暗号表を読み込み、標準入力を暗号化する。

varm

総合スコア11

多次元配列

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

Java

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

0グッド

0クリップ

投稿2019/05/04 13:05

編集2019/05/04 14:03

前提・実現したいこと→出来ていること

 
自分が実現したいことは、配布された暗号表を二次元配列に格納し、その後、標準入力した値と同じ要素が入っている格納場所の要素番号を暗号とする。
自分の書いたプログラムだと、Goodと入力しても、出力では空白で返ってきてしまいます。
プログラムのどの部分を直したら、 71 55 55 34 と出力できるのかを知りたいたいです。

暗号表を読み込み、二次元配列に格納することまでは確認できました。
(↓配布されたsample.txt)

A,B,C,D,E,F,G,H,I J,K,L,M,M,O,P,Q,R S,T,U,V,W,X,Y,Z,a b,c,d,e,f,g,h,i,j k,l,m,n,o,p,q,r,s t,u,v,w,x,y,z,1,2 3,4,5,6,7,8,9,!,' #,$,”,&,(,),=,.,[ @,{,},:,;,-, ,?,_

入力が Good だとすると、
出力が 71 55 55 34 となる。

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

困っていることにエラーメッセージは出ず、自分の考えでは繰り返しfor文の部分が
間違えているのではないかと思っています。

現段階のソースコード

java

1package ABC; 2 3import java.io.File; 4import java.io.FileNotFoundException; 5import java.util.Scanner; 6 7public class abc { 8 public static void main(String[] arg){ 9 10 String[][] data=new String[10][10]; 11 String[] data1=new String[1000]; 12 int M=1,N=1; 13 14 //ファイル:sample.txtを読み出す 15 try{ 16 File f=new File("sample.txt"); 17 Scanner s=new Scanner(f); 18 s.useDelimiter(",|\n"); 19 20 //読み出したデータを2次元配列に格納する 21 while(s.hasNext()){ 22 data[M][N]=s.next(); 23 System.out.print(data[M][N]); 24 if(M<9) { 25 M++; 26 }else { 27 N++; 28 M=1; 29 } 30 } 31 }catch(FileNotFoundException e){ 32 System.out.println("ファイルがありません"); 33 } 34 35    //暗号化したい文字を入力する。 36 System.out.print("入力:"); 37 Scanner u=new Scanner(System.in); 38 String sentence =u.nextLine(); 39 String[] sentenceArray=new String[sentence.length()]; 40          41    //入力した文字を一文字ずつ配列に格納する。 42 System.out.print("暗号化:"); 43 for(int i=0;i<sentence.length();i++){ 44 sentenceArray[i]=String.valueOf(sentence.charAt(i)); 45 } 46 47     //↓からうまく作動しない 48 for(int i=0;i<sentenceArray.length;i++) { 49 String value1=sentenceArray[i]; 50 for(M=1;M<10;M++) { 51 for(N=1;N<10;N++) { 52 String value=data[M][N]; 53 if(value==value1) { 54 System.out.print(M+N+" "); 55 } 56 } 57 } 58 } 59 } 60}

試したこと

for文が間違っているのではと思い、do-while文やwhile文に変えましたがうまくいきませんでした。

///GW中に理解できるようにしたいのでよろしくお願いします。///

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

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

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

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

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

swordone

2019/05/04 13:17

で、何が問題なの?
varm

2019/05/04 13:48

自分の書いたプログラムだと、Goodと入力しても、出力では空白で返ってきてしまいます。 プログラムのどの部分を直したら、 71 55 55 34 と出力できるのかを知りたいたいです。 上手く質問できず、すみません。
swordone

2019/05/04 13:57

それを質問本文に書き加えてください。
guest

回答2

0

if(value==value1) {
System.out.print(M+N+" ");
}

のプログラムをswordoneさんのご指摘から以下のように直しました。

if(value.equals(value1)) {
System.out.print(M);
System.out.print(N+" ");
}

投稿2019/05/04 14:00

varm

総合スコア11

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

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

0

ベストアンサー

おかしいのはここです。

java

1 if(value==value1) { 2 System.out.print(M+N+" "); 3 }
  • Stringを比較するときは…?
  • 上記の問題をクリアしても、そのまま実行すると「57」と表示されるべきところが「12」になります。

投稿2019/05/04 13:21

swordone

総合スコア20651

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

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

varm

2019/05/04 13:57

swordoneさんのご指摘いただいた箇所を、調べて直してみたら、うまく作動しました。 回答、ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問