Java 我的第二个System.out.print没有打印,但可以编译

Java 我的第二个System.out.print没有打印,但可以编译,java,system.out,Java,System.out,我正在使用这个类作为另一个程序的一部分,我想知道为什么第二个System.out.print不打印任何东西。我对其他算法也做了同样的处理,效果很好。它仍然在方法中,因此我不确定它为什么不会打印 public class EnhancedBubbleSort { int temp = 0; boolean sorted = false; long counter1 = 0, counter2 = 0; public void sort(int[] numbers)

我正在使用这个类作为另一个程序的一部分,我想知道为什么第二个
System.out.print
不打印任何东西。我对其他算法也做了同样的处理,效果很好。它仍然在方法中,因此我不确定它为什么不会打印

public class EnhancedBubbleSort
{
   int temp = 0;
   boolean sorted = false;
   long counter1 = 0, counter2 = 0;

   public void sort(int[] numbers)
   {  
      System.out.print("Before Enhanced Bubble Sort: ");
      for(int a: numbers)
         System.out.print(a + ", ");

      int lastSwap = numbers.length-1;
      for(int i=1; i<numbers.length; i++) 
      {
         boolean is_sorted = true;
         int currentSwap = -1;

         for(int j=0; j < lastSwap; j++) 
         {
            counter1++;
            if(numbers[j] > numbers[j+1]) 
            {
               counter2++;
               temp = numbers[j];
               numbers[j] = numbers[j+1];
               numbers[j+1] = temp;
               is_sorted = false;
               currentSwap = j;
            }
         }  
         if(is_sorted) 
            return;
         lastSwap = currentSwap;
      }

      System.out.print("\nAfter Enhanced Bubble Sort: ");
      for(int a: numbers)
         System.out.print(a + ", "); 
   }
}
公共类EnhancedBubbleSort
{
内部温度=0;
布尔排序=假;
长计数器1=0,计数器2=0;
公共无效排序(int[]个数字)
{  
System.out.print(“增强气泡排序之前:”);
用于(int a:数字)
系统输出打印(a+“,”);
int lastSwap=numbers.length-1;
对于(整数i=1;i个数[j+1])
{
计数器2++;
温度=数字[j];
数字[j]=数字[j+1];
数字[j+1]=温度;
is_sorted=false;
currentSwap=j;
}
}  
如果(已排序)
返回;
lastSwap=currentSwap;
}
System.out.print(“\n增强气泡排序后:”);
用于(int a:数字)
系统输出打印(a+“,”);
}
}

请按以下方式修改代码,它可以正常工作:

class EnhancedBubbleSort
{
   int temp = 0;
   boolean sorted = false;
   long counter1 = 0, counter2 = 0;

   public void sort(int[] numbers)
   {  
      System.out.print("Before Enhanced Bubble Sort: ");
      for(int a: numbers)
      System.out.print(a + ", ");

      int lastSwap = numbers.length-1;
      for(int i=1; i<numbers.length; i++) 
      {
         boolean is_sorted = true;
         int currentSwap = -1;

         for(int j=0; j < lastSwap; j++) 
         {
            counter1++;
            if(numbers[j] > numbers[j+1]) 
            {
               counter2++;
               temp = numbers[j];
               numbers[j] = numbers[j+1];
               numbers[j+1] = temp;
               is_sorted = false;
               currentSwap = j;
            }
         }  
         if(is_sorted) 
          break;   // Use break statement instead of return one
      lastSwap = currentSwap;
      }
      System.out.print("\nAfter Enhanced Bubble Sort: ");
      for(int a: numbers)
         System.out.print(a + ", "); 
   }
}

当您执行
if(已排序)返回时
您离开
void sort()
,将不再执行其他语句。你要做的是
if(is_sorted)break
,将
留给
循环。

如果(已排序)返回
你认为这是什么?你有一个
返回值
,它应该是一个
中断
。我已经修复了它,在if中使用break而不是return(排序)
jshell> new EnhancedBubbleSort().sort(data)
Before Enhanced Bubble Sort: 1, 2, 3, 4, 
After Enhanced Bubble Sort: 1, 2, 3, 4,