0
public class Test10 
{ 
  public static void main( String[] args ) 
  { 
    Thing2 first = new Thing2( 1 ); 
    Thing2 second = new Thing2( 2 ); 
    Thing2 temp = second; 
    second = first; 
    first = temp; 
    System.out.println( first.toString() ); 
    System.out.println( second.toString() ); 
    Thing2 third = new Thing2( 3 ); 
    Thing2 fourth = new Thing2( 4 ); 
    third.swap1( fourth ); 
    System.out.println( third.toString() ); 
    System.out.println( fourth.toString() ); 
    second.setCount( fourth.getCount() ); 
    third = first; 
    System.out.println( third == first ); 
    System.out.println( fourth == second ); 
    System.out.println( first.toString().equals( third.toString() ) ); 
    System.out.println( second.toString().equals( fourth.toString() ) ); 
    System.out.println( first.toString() ); 
    System.out.println( second.toString() ); 
    System.out.println( third.toString() ); 
    System.out.println( fourth.toString() ); 
    first = new Thing2( 1 ); 
    second = new Thing2( 2 ); 
    first.swap2( second ); 
    System.out.println( first.toString() ); 
    System.out.println( second.toString() ); 
  } 
} 



class Thing2 
{ 
  private int count; 

  public Thing2( int count ) 
  { 
    this.count = count; 
  } 
  public int getCount() 
  { 
    return this.count; 
  } 
  public void setCount( int count ) 
  { 
    this.count = count; 
  } 
  public String toString() 
  { 
    String s = " "; 
    switch( this.count ) 
    { 
      case 1: 
        s = s + "first ";  
      case 2: 
        s = s + "mid "; 
        break; 
      case 3: 
        s = s + "last "; 
        break; 
      default: 
        s = s + "rest "; 
        break; 
    } 
    return s; 
  } 
  public void swap1( Thing2 t2 ) 
  { 
    int temp; 
    temp = this.getCount(); 
    this.setCount( t2.getCount() ); 
    t2.setCount( temp ); 
  } 
  public void swap2( Thing2 t2 ) 
  { 
    Thing2 temp; 
    Thing2 t1 = this; 
    temp = t1; 
    t1 = t2; 
    t2 = temp; 
  } 
} 

クラス Thing2 の次の定義が与えられた場合、Java アプリケーション Test10 の出力は何ですか?

こんにちは、これは私のクラスの 1 つです。Thing2 と Test10 の 2 つのクラス (上記) があります。これは出力ですが、出力に到達する方法がわかりません (つまり、何が何を指し、すべてが解決される順序は何ですか?)。ありがとう!

mid
first mid
rest  
last
true
false
true
true 
mid  
last 
mid 
last
first mid
mid
4

2 に答える 2

2

1つのトリックはcase 1、switchステートメントにbreakステートメントがないため、コードはcase 2命令を続行し、Thing(1)の「first」ではなく「firstmid」という文字列を作成することです。

このように印刷ステートメントにコメントを追加すると役立つ場合があります

System.out.println("First is " + first.toString());
System.out.println("third == first?" + (first == third));

それを行う場合は、printステートメントをさらに追加します。

各変数を大きな矢印と考えてください。

このステートメントa = new Thing(2)は、「mid」という単語でThingを作成し、aそれに矢印を向けます。

ステートメントは、矢印が見ているa = bものをすべて取り、同じものに矢印を向けます。ba

于 2012-12-11T02:31:48.123 に答える
1

3 つの提案:

  1. switch の case 1 にはブレークが含まれていません。そのため、ケース 1 が満たされると、制御はケース 2 に流れ、さらにケース 2 を実行します。

  2. コンソールに何を出力しているかがわかるように、いくつかの print ステートメントを使用します。

  3. あなたの質問は正確ではありません。あなたはコードを持っています。出力があります。そして、あなたは出力に到達する方法を理解していないと言っています。コードを読んで、Java プログラムで制御がどのように流れるかを理解する必要があるかもしれません。特定の制御フロー構造が見つかった場合は、私たちがお手伝いします。あなたが言ったことでは、あなたが直面している問題が何であるかわかりません。それでも、「分割統治」戦略を提案します。すべてをコメントアウトし、コードの小さな論理部分を実行します。最初の小さな部分を理解したら、数行のコメントを外し、実行して出力を確認します。実行されているものと印刷されているものを関連付けることができます。例: 最初に 1 つの swap 関数だけを処理します。

于 2012-12-11T03:21:04.117 に答える