不懂简单java程序的输出

时间:2012-12-11 02:20:55

标签: java

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?

嘿伙计们,这是我的一个班级。有两个类(如上所列),Thing2和Test10。这是输出,但我不明白如何获得输出(即什么指向什么以及什么是一切都被解决的顺序?)。谢谢!

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

2 个答案:

答案 0 :(得分:2)

一个技巧是switch语句中的case 1没有break语句,因此代码继续执行case 2指令并为Thing创建字符串“first mid”而不是“first” (1)

可能有助于在您的打印语句中添加注释,例如

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

如果您这样做,请添加更多打印报表。

将每个变量视为一个大箭头。

声明a = new Thing(2)使用“mid”这个词制作一个东西并指向a箭头。

声明a = b采用b箭头所看到的任何内容,并将a箭头指向同一物体。

答案 1 :(得分:1)

3条建议:

  1. 交换机中的案例1不包含中断。因此,当满足案例1时,控制将流向案例2,甚至将执行案例2.

  2. 使用一些打印语句,以便您知道在控制台上打印的内容。

  3. 您的问题不准确。你有代码。你有输出。你说你不明白如何获得输出。可能是您需要阅读代码并了解控件如何在Java程序中流动。如果你找到一些特定的控制流程结构,那么我们可以提供帮助。根据你所说的,我们不知道你面临的问题。然后,我会建议你“分而治之”策略。注释掉所有内容并执行小的逻辑代码片段,当您理解第一个小部分,取消注释几行,运行并查看输出时,您可以将相关内容与正在打印的内容联系起来。示例:首先处理一个交换函数。