import java.util.ArrayList;
import java.util.HashMap;
public class test{
public static void main(String[] args){
int i = 0;
List〈String〉 trylist = new ArrayList〈String〉();
trylist.add(“Apple”);
trylist.add(“Orange”);
trylist.add(“Peach”);
HashMap〈Integer, String〉trymap = new HashMap〈〉();
for(int j: trylist){
trymap.put(i , trylist.get(j));
i ++;
}
for(int k : trymap){
System.out.println(trymap.get(k));
}
}
}
以上のプログラムをコンパイルすると
エラー:不適合な型:Stringをintに変換できません
for(int j: trylist)
エラー:for-eachは式のタイプに使用できません
for(int k : trymap)
期待値:配列またはjava.lang.Iterable
検出値:HashMap〈Integer,String〉
と表示されます。for文だと問題なく実行できるのですが拡張for文だとうまく行きません。
trylizt.sizeやtrymap.KeySetにかえたりもしましたがfor-eachは式のタイプに使用できませんやシンボルを見つけられませんとエラーがでます。
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
No.3 の補足について
put 時に指定したキーで get を呼んでいますか?
今回の場合なら 0,1,2 の三つです。
総称(ジェネリック)が絡むと型名の記載量が多くなりがちなので、
作業用変数などは自動推測してくれる var で代用するのが一般的です。
それでも var を使ってはいけない特別な理由があるのならば、
JavaDoc 等を調べて適切な型をご自身で推測してください。
例)
1. entrySet() の戻り値は Set<Map.Entry<K,V>> と定義されている
2. 具象化すれば Set<Map.Entry<Integer,String>>
3. 個々の要素は Map.Entry<Integer,String>
4. 拡張 for 文の変数は Map.Entry<Integer,String> 型と決まる
参考)
https://docs.oracle.com/javase/jp/15/language/lo …
No.3
- 回答日時:
誤:〈String〉
正: <String> ← U+0060 と U+0062 で囲む
誤: “Apple”
正: "Apple" ← 両方とも U+0022 で囲む
誤:
for(int j: trylist){
trymap.put(i , trylist.get(j));
正:
for(String j: trylist){ ← String の配列なので String で受ける
trymap.put(i , j);
誤:
for(int k : trymap){
System.out.println(trymap.get(k));
正:
for(var k : trymap.entrySet()){ ← 拡張 for で処理できるオブジェに変換
System.out.println(k.getValue()); ← 値だけを取る
別解:
for(var k : trymap.values()){
System.out.println(k);
拡張 for 文は Iterable 型を処理するものなので、
Iterable を継承している ArrayList 型は処理可能。
継承していない HashMap 型は不可能だが、
継承しているオブジェへ変換することで、間接的に処理可能
参考)
https://docs.oracle.com/javase/jp/15/docs/api/ja …
https://docs.oracle.com/javase/jp/15/docs/api/ja …
https://docs.oracle.com/javase/jp/15/docs/api/ja …
No.2
- 回答日時:
>もちろんそう考えてintをStringにも変えてみたのですが、
>不適合な型:Stringをintに変換できません
>というちがうエラーがでたのでintに戻しました
戻しては駄目。
forはコレクションから要素をとり出しているのに
それをキーやインデックスが取得されると思い込んで
他のコートが書かれてます。これではエラーだらけは
当たり前です。
mapにforを直に使うのも駄目ですよ。
.values()とforで値を列挙するか
.keySet()とforでキーを列挙しましょう。
No.1
- 回答日時:
trylistはArrayList<Sting> 型なんだから
for(String k: trylist) +{
じゃないと当然まわせないよね?
kにとり出されるのはインデックスじゃなくてリストの中味(要素)
そのものですよ?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java 配列<選挙> 4 2023/07/31 15:07
- Java 直し方について教えて頂きたいです。 4 2022/08/13 02:11
- C言語・C++・C# ポインタの型変換、どうやるんでしたっけ? 2 2022/03/28 11:00
- C言語・C++・C# C++初心者です stirng 2 2022/09/20 20:43
- C言語・C++・C# 未解決の外部シンボル _printfが関数_mainで参照されました 1 2022/09/18 15:28
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Ctrl+Zが入力されると終了する...
-
コマンドライン引数の例外処理...
-
数値⇒漢数字変換 java
-
Java、2の0乗~10乗の表示
-
階乗の式
-
総称型ArrayList<E>への参照...
-
Java 入力した整数値の合計を、...
-
countに実行した回数をいれたい...
-
入力された入力値と最大値、最...
-
javaで2重forループを使い 123 ...
-
2つのスクロールバーを連動させ...
-
16進数数字を結合して、10進数...
-
javaが上手くいきません
-
配列を逆順させて表示させる方...
-
【java】標準入力の受け取り方
-
javaの数字当てゲーム
-
javaについての質問です
-
Java 配列 勝敗、引き分け判定...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ループ処理の際、最後だけ","を...
-
java キーボード入力された値の...
-
Java、2の0乗~10乗の表示
-
数値⇒漢数字変換 java
-
論理演算子”||”またはの入力方法
-
コマンドライン引数の例外処理...
-
JAVAのfor文で困っています。
-
続・ZZZ,ZZZ,ZZ9形式の金額形式...
-
Java 入力した整数値の合計を、...
-
7つ数字を表示したら改行すると...
-
テキストボックスに入力された...
-
countに実行した回数をいれたい...
-
総称型ArrayList<E>への参照...
-
Randomメソッドの確率設定
-
Ctrl+Zが入力されると終了する...
-
学校で課題を出されて困ってい...
-
Java キーボードから負の数が入...
-
キーボードから10人分の点数を...
-
階乗の式
-
Java 配列<選挙>
おすすめ情報
回答ありがとうございます。
もちろんそう考えてintをStringにも変えてみたのですが、不適合な型:Stringをintに変換できませんというちがうエラーがでたのでintに戻しました。
またその際もうひとつのエラーはかわらずでてました。
細かな指摘ありがとうございます。
〈〉や“”などはスマホでこの質問を記入しているのでご容赦下さい、コードはしっかりと入力さしております。
for(String j:trylist){
trymap.put(i,j);
i ++;
}
としてみたのですがエラーはでませんでしたがtrymapをgetで出力すると全てnullになっていたので値が上手く格納できていないようです。
またvarはまだテキストにでてこないので使用しなくてもできる方法があると思うのですがいかがでしょうか?entrySetはでてました。
よろしくお願いします。
trymap.put(i , j);
としてます。