public class ThreeN2 { /* A program that computes and displays several 3N+1 sequences. Starting values for the sequences are input by the user. Terms in a sequence are printed in columns, with five terms on each line of output. After a sequence has been displayed, the number of terms in that sequence is reported to the user. */ public static void main(String[] args) { TextIO.putln("This program will print out 3N+1 sequences"); TextIO.putln("for starting values that you specify."); TextIO.putln(); int K; // Starting point for sequence, as specified by the user. do { TextIO.putln("Enter a starting value;"); TextIO.put("To end the program, enter 0: "); K = TextIO.getInt(); // get starting value from user if (K > 0) // print sequence, but only if K is > 0 Print3NSequence(K); } while (K > 0); // continue only if K > 0 } // end main() static void Print3NSequence(int startingValue) { // Prints a 3N+1 sequence to standard output, using // startingValue as the initial value of N. Terms are // printed five to a line. The subroutine also // prints the number of terms in the sequence. // The value of startingValue must be a positive integer. int N; // One of the terms in the sequence. int count; // The number of terms found. int onLine; // The number of terms that have been output // so far on the current line. N = startingValue; // Start the sequence with startingValue; count = 1; // We have one term so far. TextIO.putln("The 3N+1 sequence starting from " + N); TextIO.putln(); TextIO.put(N, 8); // Print initial term of sequence, using 8 characters. onLine = 1; // There is now 1 term on the current output line. while (N > 1) { N = nextN(N); // compute next term count++; // count this term if (onLine == 5) { // if current output line is full TextIO.putln(); // then output a carriage return onLine = 0; // and note that there are no terms on the new line } TextIO.put(N, 8); // print this term in an 8-character column onLine++; // add 1 to record of number of terms on this line } TextIO.putln(); // end current line of output TextIO.putln(); // and then add a blank line TextIO.putln("There were " + count + " terms in the sequence."); } // end of Print3NSequence() static int nextN(int currentN) { // Computes and returns the next term in a 3N+1 sequence, // given that the current term is currentN. if (currentN % 2 == 1) return 3 * currentN + 1; else return currentN / 2; } // end of nextN() } // end of class ThreeN2