外出自粛中でも楽しく過ごす!QAまとめ>>

2つのリストのマージ方法について
下記の要件を満たしたいと考えています。

・リスト1・2をkeyをキーにマージしたい。
 リスト1[0]:key=2, value1=b
 リスト1[1]:key=3, value1=d
 リスト1[2]:key=4, value1=e
 ・
 ・
 ・

 リスト2[0]:key=1, value2=A
 リスト2[1]:key=2, value2=B
 リスト2[2]:key=5, value2=F
 リスト2[3]:key=6, value2=G
 ・
 ・
 ・

 ↓

 リスト3[0]:key=1, value1=A, value=""
 リスト3[1]:key=2, value1=b, value=B
 リスト3[2]:key=3, value1=d, value=""
 リスト3[3]:key=4, value1=e, value=""
 リスト3[4]:key=5, value1="", value=F
 リスト3[5]:key=6, value1="", value=G
 ・
 ・
 ・

・リスト1・2はkeyの昇順でソート済。各リスト内では重複しているkeyはない。
・マージ後もkeyの昇順にしたい。
・実際のリストはそれぞれ数万件~数十万件なので、パフォーマンスを考慮したい。

下記のように作成してみたのですが、無理やりやりました感があり、分かりづらくバグがありそうです。またループでnewもしてたりしてパフォーマンスも悪そうです。もっとスマートにパフォーマンスもよい方法がないでしょうか?

int checkedCount = 0;

for (int i = 0; i < list1.size(); i++) {
String str1 = list1.get(i).get("key");

for (int j = checkedCount; j < list2.size(); j++) {
Map<String, String> map3 = new HashMap<String, String>();
String str2 = list2.get(j).get("key");

if (str1.compareTo(str2) < 0) {
if (i != list1.size() - 1) {
map3.put("key", str1);
map3.put("value1", list1.get(i).get("value1"));
map3.put("value2", "");
list3.add(map3);
break;
} else {
Map<String, String> map4 = new HashMap<String, String>();
map4.put("key", str2);
map4.put("value1", "");
map4.put("value2", list2.get(j).get("value2"));
list3.add(map4);
}
} else if (str1.compareTo(str2) == 0) {
map3.put("key", str1);
map3.put("value1", list1.get(i).get("value1"));
map3.put("value2", list2.get(j).get("value2"));
list3.add(map3);
checkedCount = j + 1;
break;
} else {
map3.put("key", str2);
map3.put("value1", "");
map3.put("value2", list2.get(j).get("value2"));
list3.add(map3);
checkedCount = j + 1;
}
}
}

このQ&Aに関連する最新のQ&A

A 回答 (2件)

ああ, 再帰するのは「マージ」とは関係ないですから, とりあえず今は無視してもいいです.


で, 形はそんなところ. 実際に動くかどうかは知りませんが....
    • good
    • 0
この回答へのお礼

有難うございました。動作は色々と確認してみます。

お礼日時:2010/04/25 10:19

もとのリストが実際にはどのような構造なのかわかりませんが, ごくごく普通のマージを実行すれば事実上終わりでしょう. マージソートに

ついて調べてみてください.
    • good
    • 0
この回答へのお礼

お返事有難うございます。マージソートを調べてみました。下記が一番分かりやすかったのですが、再帰呼出がいまいちぴんとこなくてまだ理解できていません。

ttp://www.ics.kagoshima-u.ac.jp/~fuchida/edu/algorithm/sort-algorithm/merge-sort.html

ただ今回私がやりたいところは再帰呼出とは直接関係ないようなので(勘違いをしていたらご指摘ください)、下記のように作成しなおしてみましたが、こういった方法ということでしょうか?

int i = 0;
int j = 0;

while (i < list1.size() || j < list2.size()) {
Map<String, String> map3 = new HashMap<String, String>();

if (j >= list2.size() || (i < list1.size() && (list1.get(i).get("key").compareTo(list2.get(j).get("key")) < 0))) {
map3.put("key", list1.get(i).get("key"));
map3.put("value1", list1.get(i).get("value1"));
map3.put("value2", "");
list3.add(map3);
i++;
} else if (j >= list2.size() || (i < list1.size() && (list1.get(i).get("key").compareTo(list2.get(j).get("key")) == 0))) {
map3.put("key", list1.get(i).get("key"));
map3.put("value1", list1.get(i).get("value1"));
map3.put("value2", list2.get(i).get("value2"));
list3.add(map3);
i++;
j++;
} else {
map3.put("key", list2.get(j).get("key"));
map3.put("value1", "");
map3.put("value2", list2.get(i).get("value2"));
list3.add(map3);
j++;
}
}

お礼日時:2010/04/24 22:48

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QJAVA  ArrayListからArrayListへのコピー

java で、ArrayListからArrayListへコピーはできるのでしょうか?
clone()というメソッドがありましたが、よくわからず、コピーできてないようなので伺いました。

ベーシックではできるようですが、JAVAでもできるのでしょうか?
どなたか教えていただけませんでしょうか?

Aベストアンサー

ArrayList li = new ArrayList(list);
でよいでのでは?

Qシンボルが見つかりませんというエラーが理解できません。

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Image[3];
Thread t;
int index1 = 0;
int index2 = 0;
String msg = "";
String msg1 = "";

boolean state = false;
Button b1 = new Button("ぐー");
Button b2 = new Button("ちょき");
Button b3 = new Button("ぱー");

public void init(){
for(int i = 0; i<=2; i++){
img[i] = getImage(getDocumentBase(),"hanabi" + (i+1) + ".JPG");
}
add(b1);
add(b2);
add(b3);
b1.addActionListener(this);
b2.addActionListener(this);
b3.addActionListener(this);
msg1 = "結果は・・";

}

public void paint(Graphics g){
g.drawImage(img[index1],350,30,this);
g.drawImage(img[index2],695,30,this);
g.drawString("コンピューター",420,300);
g.drawString("あなた",800,300);
g.drawString(msg,630,320);
g.drawString(msg1,550,320);
}

public void start(){
state = true;
t = new Thread(this);
t.start();

}

public void run(){
while(state){
index1++;
if(index1 == 3){
index1 = 0;
}
index2++;
if(index2 == 3){
index2 = 0;
}
repaint();
try {
Thread.sleep(60);
}catch(InterruptedException e) { }
}
}

public void actionPerformed(ActionEvent e){
if(state == false) {
start();
return;

}
state = false;
if(e.getSource() == b1) {
msg = "ぐー";
index2 = 0;
}

else if(e.getSource() == b2){
msg = "ちょき";
index2 = 1;
}

else if(e.getSource() == b3){
msg = "ぱー";
index2 = 2;
}
check();
repaint();
}

public void check() {
if(index1 == index2) msg ="あいこ";


else if (index1 == 0) {
if(index2 == 2) msg="あなたの勝ち";
else msg ="あなたの負け";
}

else if(index1 == 1) {
if(index2 == 0) msg="あなたの勝ち";
else msg="あなたの負け";
}

else if(index1 == 2) {
if(index2 == 1) msg="あなたの勝ち";
else msg="あなたの負け";
}

}
}

以下のようなじゃんけんゲームのプログラムを書いたのですが、「シンボルが見つかりません。」というエラーが表示されるのですが、エラーの意味が理解できず、解決できません。どこが間違っているのか教えていただけませんか。

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.io.File;

public class janken extends Applet
implements Runnable, ActionListener {
private static final int EXTERNAL_BUFFER_SIZE = 128000;

Image image[] = new Imag...続きを読む

Aベストアンサー

「シンボルを見つけられません。」というエラーの下に何か表示がありませんでしたか?そこにヒントがあると考えられます。
シンボルを見つけられませんといエラーが表示される主な理由は4つあります。
(1)クラス、メソッド、変数などの綴りミスや定義していない変数を使用している可能性がある。
(2)コンストラクタを呼び出すときに、newを忘れている可能性がある。(3)公開されていないメンバーを呼び出している可能性がある。
(4)必要なimport文を記述し忘れている可能性がある。
ここでのあなたのエラーは(1)番ではないでしょうか?上記ではimageとなっている変数がimgになっていますね。
これはエラー表示をよく見ることで意外と簡単に解決できるのです。
ゆっくり丁寧にエラー表示を見るように心がけることが大事ですよ。

QInner join と Left joinの明確な違いは?

Inner join と Left joinの違いがよくわかりません。
教えてください。

Aベストアンサー

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
4               NULL
5               NULL
6               NULL
の6レコードが出力されますが、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 INNER JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3               3
の3レコードしか出力されません。

出てくる結果が違います。

テーブル1のフィールド1に、






が、

テーブル2のフィールド1に、






が入力されている場合、

SELECT [テーブル1].[フィールド1], [テーブル2].[フィールド1]
FROM テーブル1 LEFT JOIN テーブル2 ON [テーブル1].[フィールド1]=[テーブル2].[フィールド1];
では、結果は、
テーブル1.フィールド1 テーブル2.フィールド1
1               1
2               2
3           ...続きを読む

QIOException ってどういうときに起こるのでしょうか?

IOException ってどういうときに起こるのでしょうか?

http://www.atmarkit.co.jp/fjava/rensai2/javaent12/javaent12.html
を見て勉強しています。

  catch ( IOException e) {
    System.out.println( "キーボードが故障しているのかもしれません" );
  }

と書いてあります。
ハード(キーボード)が故障しているのを Java のプログラムのレベル(ソフトウェア)で感知できるというのがよくわかりません。「

NumberFormatException の方はわかるのですが・・・

Aベストアンサー

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接続だったりするわけですけど、
InputStreamは、その入力元の情報を持っていないので、
データを読み取る際は常に
IOExceptionをキャッチするコードを書かなくてはいけません。
たとえ、絶対にIOエラーが発生しないストリームだとしても。

さらに付け加えるなら、
そもそも「標準入力=キーボード」であるとは限りません。
(一般的にはキーボードであることが多いですが。)
Javaでは、
System.setIn(InputStream)
を呼び出して、標準入力を変えてしまうことができますし、
標準入力を指定してプログラムを実行することができるOSもあります。

追伸1:
例外をキャッチしたときは、
スタックトレースをプリントすることをおすすめします。
catch (IOException e) {
e.printStackTrace();
}

追伸2:
そのプログラムでIOExceptionを発生させる最も簡単な方法は、
readLine()を呼び出す前に
標準入力(System.in)を閉じてしまうことです。
System.in.close();

現実的には、キーボードからの入力でIOExceptionが発生することは、
ほとんどあり得ないと思います。
そもそも、キーボードが故障していたとしても、
IOExceptionは投げられないでしょう。
「キーボードが故障しているのかもしれません」というのは、
その記事の著者が冗談で書いたのだと思います。

ではなぜ、try-catchを書かなくてはいけないのか?
InputStreamやBufferedReaderは、
データ入力を抽象化したものだからです。
実際の入力元はキーボードだったり、ファイルだったり、
ネットワーク接...続きを読む

Qinterface,extend,implementのちがい

お世話になります、

Javaを勉強しているのですが、
interface,extend,implementの使い分けがわかりません。

私の解釈としては、
(1)interfaceは、グローバル変数の定義、グローバルメソッドの定義(実装はしない)。

(2)extendは、extendクラスを親クラスとして親クラスの機能を使用できる。

(3)implementは…,implementもextendと同じような意味だと解釈しているんですが、違う点は、implementで定義してあるメソッドは、使用しなくても、実装しなければならないという点でしょうか?

とにかくこの3つのを使い分けるコツとかあれば教えてください。
よろしくお願いします。

Aベストアンサー

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば、getStringLength()メソッドなどが
あったほうが良いでしょうか。
このgetStringLength()メソッドは、2バイト文字も1バイト文字も「1文字」
と数えてくれると言う点で、まさに、日本語クラス用のメソッドだと言えるでしょう。

例えば、Java的に記述すると、、、
class Japanese {
public int getStringLength() {
  ・・・
return strlength;
 }
 ・・・
}

class TextField {
・・・
}

class JTextField extends TextField, extends Japanese {
・・・・
}

C++ではそのように実装するでしょう。
しかし、Javaにはこのような高度な機能はありません。

そこで、生まれた苦肉の策が、「interfaceとimplements」です。

interface Japanese {
public int getStringLength(); // interfaceは実装を含まない!
                 // すなわち「実装の継承」ができるわけではない。
}

class TextField {
・・・
}

class JTextField extends TextField implements Japanese {
・・・・
public int getStringLength() {
  ・・・
return strlength; //implementsの実装を「各クラスで」実装してやる必要がある。
 }
}


結局のところ、Javaでは、複数のクラスを親クラスには持ち得ないため、継承できなかったクラスは「各クラスで実装してやる必要性」があるのです。


ではどのように使うのが効果的か?

なまえのままです。「代表的なインターフェイス」にたいしてinterfaceを使うのが良いと思います。

例えば、プレイヤー系であれば、ビデオ・コンポ・ウォークマン・などにかかわらず、
interface controlpanel {
public play();
public stop();
public next();
public back();
}
というような基本的インターフェイスを「持っているべき」です。

こうすることで、それぞれのクラス宣言の際に、これらの「インターフェイスを持っているべきであり、実装されるべきである」ということを「強く暗示」することができます。
class videoplayer extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

こうすることで、同様のクラスを作成するユーザーは、
「プレイヤー系は、4つ操作が出来るコントロールパネルをインターフェイスとして持つべきなのだな!?」という暗示を受け取り、自分のクラスでもそれを模倣するでしょう。

class mp3player extends player implements controlpanel {
public play() {・・・}
public stop() {・・・}
public next() {・・・}
public back() {・・・}
}

また、これらのクラスを使用するユーザーも、「implements controlpanel」という
表記を見て、「4つの基本操作は押さえられているのだな!」という基本中の基本動作を抑えることが出来ます。

まとめると、クラスに「こういう特徴もたしてください!」「こういう特徴持ってますよ!」という一種の暗示的警告や方向性を与えることができるわけですね。

バラバラに理解してもしょうがないッス。

まず、
(1)interface と implements
(2)class と extends

が対応しているわけっす。

JavaはC++と違って、比較的言語仕様を「簡単」にしたので「多重継承」という
概念がないです。
多重継承っていうのは、複数のクラスを親クラスにして継承するってことですね。

たとえば、 「TextFieldクラス」と「Japaneseクラス」を多重継承すると、
「JTextFieldクラス」ができるっていうのが自然な考え方でしょう?

まぁ、例えば、日本語クラスであれば...続きを読む

QarrayListの要素を参照出来ません。

arrayListの要素を参照出来ません。
( 参照→とり急ぎ、System.out.printlnで表示させたいという事。)
JBuilderを使用しているので、値が入っている事は確認出来ました。

arrayListは2次元になっています。

過去の書き込みを見たのですが、応用するまでの理解力がない為か
どうもピンと来ません。
周りにはJavaの経験者がいない為、誰にも質問できずに困っています。
ネットでも調べたのですが、上記の理由からかよく分からないのです。
よろしくお願いします。

Windows2000
J2SDKは1.4
JBuilderの8を使用しています。

Aベストアンサー

見当違いの解答であったら申し訳ありませんが…。
以下の前提で話を進めます。

コンストラクタ等必要なモノはすべて備わっているものとして見てください。

ArrayListに入れるオブジェクトAClass:
class AClass {
 private String str1;
 private String str2;
 ...
}

このインスタンスをArrayListに入れます。
ArrayList list = new ArrayList();
AClass a = new AClass(...);
list.add(a);
...

リストの中身をすべて表示します。
for (int i=0; i<list.size(); i++) {
 System.out.println(list.get(i));
}


ここで、System.out.println(Object o)の挙動を説明します。
Javaをある程度理解している方のようなので(失礼がありましたらすみません)直接ソースコードを示して説明します。

System.outフィールドはjava.io.PrintStreamのスタティックインスタンスです。
PrintStream.println(Object x)メソッドを見てみると、
public void println(Object x) {
synchronized (this) {
 print(x);
 newLine();
}
}
となっています。synchronizedは今は気にしなくていいです。ここで、print(x)をした後に改行しているという事に注目してください。

PrintStream.print(Object obj)メソッドを見てみると、
public void print(Object obj) {
 write(String.valueOf(obj));
}
と、String.valueOf(obj)を出力しているのがわかります。

引き続きString.valueOf(Object obj)メソッドを見てみると、
public static String valueOf(Object obj) {
 return (obj == null) ? "null" : obj.toString();
}
となっています。ここで、引数objがnullなら"null"を、そうでなければobj.toString()を返しているのがわかります。

ここで注目すべきは、
AClass a = new AClass();
System.out.println(a);
としたときは、a.toString()が出力されるという事です。
AClassは自分で作ったクラスであり、ただクラスを作った段階ではtoString()メソッドは定義されていません。

しかし、AClassは暗黙的にjava.lang.Objectクラスのサブクラスであり、AClassでtoString()メソッドを定義しなかった場合、ObjectのtoString()メソッドが呼び出されます。
ここでしつこくObject.toString()メソッドを見てみると、
public String toString() {
 return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
となっています。これが呼び出されるので“名前@訳の分からない16進数”が表示されてしまったわけです。

となれば、toString()メソッドをAClass内で定義してやればいいわけです。
class AClass {
 ...
 public String toString() {
  return str1 + ", " + str2;
 }
}
などとすることで、
System.out.println(a);
したときに、AClassのtoString()メソッドが呼び出され、その内容がわかりやすい形で出力されるわけです。
toString()メソッドは自分でわかりやすいように実装するといいでしょう。


ついでですが、クラスを実装した際には、toString(), hashCode(), equals(Object o)の3つのメソッドをオーバーライドされることをお勧めします。
(まぁ理由も分からずオーバーライドするほど危険なモノはありませんが…。)
これはJavaの基本というか、設計する上で必要になるので理解されるといいと思います。

また、今回の説明に使用したコードはすべてJREに付属しているソースコードです。
これらを見てみるのも理解を深めることにつながります。


最後に長くなりましたが見当違いでしたらお詫びします。

見当違いの解答であったら申し訳ありませんが…。
以下の前提で話を進めます。

コンストラクタ等必要なモノはすべて備わっているものとして見てください。

ArrayListに入れるオブジェクトAClass:
class AClass {
 private String str1;
 private String str2;
 ...
}

このインスタンスをArrayListに入れます。
ArrayList list = new ArrayList();
AClass a = new AClass(...);
list.add(a);
...

リストの中身をすべて表示します。
for (int i=0; i<list.size(); i++) {
 System.out.pr...続きを読む

QArrayListを使った多次元配列の作成について

ArrayListで可変長配列を扱っているのですが、
2次元可変長配列を用いる必要が出てきたので、
下記のように変更したのですがうまくいきません。
何が悪いのか教えていただけませんでしょうか?

-----------------------------------------
ArrayList cars=new ArrayList();
cars.add("フェラーリ");
cars.add("ポルシェ");
cars.add("メルセデスベンツ");
for(int i=0;i<cars.size();i++){
 String str=(String)cars.get(i);
 System.out.println(str);}
-----------------------------------------
上記から下記のように変更しました。
-----------------------------------------
ArrayList[] cars=new ArrayList[3];
cars[0].add("フェラーリ");
cars[0].add("ポルシェ");
cars[0].add("メルセデスベンツ");
for(int i=0;i<cars[0].size();i++){
 String str=(String)cars[0].get(i);
 System.out.println(str);}
-----------------------------------------
エラーは「Exception in thread "main" java.lang.NullPointerException」です。
どうやら初期配列が10ではなく3となってしまっているようです。

ArrayListで可変長配列を扱っているのですが、
2次元可変長配列を用いる必要が出てきたので、
下記のように変更したのですがうまくいきません。
何が悪いのか教えていただけませんでしょうか?

-----------------------------------------
ArrayList cars=new ArrayList();
cars.add("フェラーリ");
cars.add("ポルシェ");
cars.add("メルセデスベンツ");
for(int i=0;i<cars.size();i++){
 String str=(String)cars.get(i);
 System.out.println(str);}
---------------------------------------...続きを読む

Aベストアンサー

こんにちは。

>ArrayList[] cars=new ArrayList[3];
はArrayList型のオブジェクトのインスタンス
を格納する箱を3個作成しただけなので、
この時点では、
cars[0] = null
cars[1] = null
cars[2] = null
となっています。ですから、当然
cars[0].add("フェラーリ");
などとやると、NullPointerExceptionが
発生します。これをさけるには、
cars[0] = new ArrayList();
cars[1] = new ArrayList();
cars[2] = new ArrayList();
とする必要があります。

QMAX値を条件にデータを取得するには?

SQL文で困っています。
ご教授下さい。


下記のようなデータがあった場合、それぞれの区分毎に
年月が最大(最新)のデータを取得したいです。
(実際には1レコードにその他項目があり、それらも取得します。)
<検索対象データ>
区分 年月   金額
-----------------------------
A   200412  600
A   200503  560
B   200311  600
B   200508  1000
B   200504  560
C   200508  400
C   200301  1100


<取得したいデータ>

区分 年月   金額
-----------------------------
A   200503  560
B   200508  1000
C   200508  400

よろしくお願いします。

Aベストアンサー

テーブル名をXXXとすると次のようなSQLでよいと思います。(最善の方法かどうかは自信がないですが)

select B.* from (select 区分, max(年月) as 年月 from XXX group by 区分) As A
inner join XXX as B on A.区分 = B.区分 and A.年月 = B.年月
order by B.区分

Qテーブルからのselectにおいてデータの有無により結果をわけたい

id | point
----+-------
1 | 10
2 | 9
3 | 5
....
というテーブルがあるとします.
idを指定してpointを得たいのですが、そのidがこのテーブルに存在しない場合は空の結果ではなく0を返したいのです.
plpgsqlなどを使いif文で場合分けすればできることはわかっているのですがSQL文だけで(それもできれば1文で)これを実現する方法はあるでしょうか?
よろしくお願い致します。

Aベストアンサー

変則的ですが、これでよければidがユニークでなくても大丈夫ですし、集合関数を使わなくてもOKです。

select dm.id,case when ex1.point is null then 0 else ex1.point end from
(select ? as id) as dm left join ex1 on dm.id = ex1.id;

?を適当に変えてください。
chukenkenkouさんの発想はこれですよね。

Qequalsの逆

javaで、文字列の場合は比較演算子の「==」は用いずに

if ((str1.getText()).equals(str2)){
(※…str1,2は文字列)

と書きますよね?
この逆で、文字列str1とstr2は等しくないとき、にはif以下の条件文をどのように書けばよいでしょうか?

Aベストアンサー

>if !((str1.getText()).equals(str2)){

あくまで
if(){
}


!(str1.getText()).equals(str2)
が入っているので
if !((str1.getText()).equals(str2)){
じゃなくて
if (!(str1.getText()).equals(str2)){
こう。


人気Q&Aランキング