java - Trying to correct simple array program -
i'm trying practice java before starting new programming class. this, decided remake old perl programs made earlier class. original perl file entered numbers entered user array , output array in 4 ways: numbers entered, ascending order, descending order, , largest , smallest numbers.
i looked through several examples here , elsewhere online troubleshoot , while program compiles, output wrong. is, array outputted couple dozen times, outputting numbers entered. think have 4 loops set wrong, i'm still learning java there's missed. here's java code now:
import java.util.arraylist; import java.util.scanner; public class arrayoutput { static scanner input = new scanner(system.in); static string converttostring(arraylist<integer> numbers) { stringbuilder builder = new stringbuilder(); (int : numbers) { builder.append(numbers); builder.append(","); } builder.setlength(builder.length() - 1); return builder.tostring(); } public static void main(string args[]) { arraylist<integer> numbers = new arraylist<integer>(); int userinput; int largest = 0, smallest = 0; system.out.print( "this program takes set of integers user, , outputs results screen in 4 ways:\n"); system.out.print( "the order entered seperated comma , space, in ascending order, in descending order, , largest:smallest.\n\n"); // explain user program does, needs, etc. system.out.print("please enter number or -1 end: "); userinput = input.nextint(); while (userinput != -1) { system.out.print("please enter number or -1 end: "); numbers.add(userinput); userinput = input.nextint(); } // prints array contents entered string sort = converttostring(numbers); system.out.println(sort); // prints numbers ascending (int = 0; < numbers.size(); i++) { system.out.println(sort); } // prints numbers descending, largest first (int = numbers.size() - 1; >= 0; i--) { system.out.println(sort); } (int = 0; < numbers.size(); i++) { int number = numbers.get(i); if (i < smallest) { smallest = i; } if (i > largest) { largest = i; } system.out.println(largest + smallest); } } }
for additional reference, here's original perl program:
#!/usr/bin/perl use modern::perl; (@numbers, $userinput);# declare array , more 1 variable @ time print("\nthis program takes set of integers user, , \nthen outputs results screen in 4 ways: \nthe ordered entered seperated comma , space, \nin ascending order, in descending order, , largest:smallest.\n\n"); # explain user does, needs, etc print "please enter number or -1 end: "; chomp ($userinput = <>); #loop primed if ($userinput == -1) { "\nthere's no numbers process.\n"; } else{ while($userinput != -1) { push (@numbers, $userinput); #push variable $userinput @numbers. print "please enter number or -1 end: "; chomp ($userinput = <>); } } #don't declare @numbers array again, otherwise that'll clear out entered numbers. $" = ", "; print "@numbers\n"; @upsorted = sort {$a <=> $b} @numbers; #prints numbers ascending, smallest first. #don't use $a, $b, or number variable because they're reserved. $" = ", "; print "@upsorted\n"; @downsorted = sort {$b <=> $a} @numbers; #prints numbers descending, largest first $" = ", "; print "@downsorted\n"; print "$downsorted[0]:$upsorted[0]\n"; #must set off blank line above , below ##end of program
okay, quick update, i've gotten program run after looking comparators on tutorialspoint.com. here's code @ now:
import java.util.*; public class arrayoutput { static string converttostring(arraylist<integer> numbers) { stringbuilder builder = new stringbuilder(); (int : numbers){ builder.append(i); builder.append(","); } builder.setlength(builder.length() - 1); return builder.tostring(); } public static void main(string args[]){ scanner input = new scanner(system.in); arraylist<integer> numbers = new arraylist<integer>(); int userinput, largest = integer.min_value, smallest = integer.max_value; system.out.println("this program takes set of integers user, , " + "outputs results screen in 4 ways:"); system.out.println("the order entered seperated comma , space, " + "in ascending order, in descending order, , largest:smallest."); system.out.println(); system.out.print("this program takes set of integers user, , outputs results screen in 4 ways:\n"); system.out.print("the order entered seperated comma , space, in ascending order, in descending order, , largest:smallest.\n\n"); //explain user program does, needs, etc. { system.out.print("please enter number or -1 end: "); userinput = input.nextint(); if (userinput != -1) { numbers.add(userinput); largest = math.max(largest, userinput); smallest = math.min(smallest, userinput); } } while (userinput != -1); //prints array contents entered string sort = converttostring(numbers); comparator cmp = collections.reverseorder(); system.out.println(sort); collections.sort(numbers); system.out.println(converttostring(numbers)); collections.sort(numbers, comparator.reverseorder()); system.out.println(converttostring(numbers)); system.out.printf("smallest = %d, largest = %d%n", smallest, largest); } }
my concern when compiled, got note says program uses unchecked or unsafe operations, , should recompile -xlint:unchecked details.
first, if using java 8+, use stringjoiner
in converttostring
1
static string converttostring(list<integer> numbers) { stringjoiner sj = new stringjoiner(","); numbers.stream().map(string::valueof).foreach(sj::add); return sj.tostring(); }
second, need sort
, call converttostring
again print results. prefer variables lower case names. , can eliminate loops built-in functions. check userinput
isn't -1
before adding list
. , prefer do-while
. like,
public static void main(string args[]) { scanner input = new scanner(system.in); list<integer> numbers = new arraylist<>(); int userinput, largest = integer.min_value, smallest = integer.max_value; system.out.println("this program takes set of integers user, , " + "outputs results screen in 4 ways:"); system.out.println("the order entered seperated comma , space, " + "in ascending order, in descending order, , largest:smallest."); system.out.println(); // explain user program does, needs, etc. { system.out.print("please enter number or -1 end: "); userinput = input.nextint(); if (userinput != -1) { numbers.add(userinput); largest = math.max(largest, userinput); smallest = math.min(smallest, userinput); } } while (userinput != -1); // prints array contents entered string sort = converttostring(numbers); system.out.println(sort); collections.sort(numbers); system.out.println(converttostring(numbers)); collections.sort(numbers, comparator.reverseorder()); system.out.println(converttostring(numbers)); system.out.printf("smallest = %d, largest = %d%n", smallest, largest); }
update
based on edit(s), you're using java 7 (not java 8+). in case, code (glad hear working), can "corrected" typed comparator
. like,
comparator<integer> cmp = collections.<integer> reverseorder();
which give integer
based comparator
in reverse order. however, it's possible create custom comparator
. such as,
comparator<integer> cmp = new comparator<integer>() { @override public int compare(integer o1, integer o2) { if (o1 == null) { return (o2 == null) ? 0 : -1; } return o1.compareto(o2); } };
and can use (and reverse it) like
system.out.println(sort); collections.sort(numbers, cmp); system.out.println(converttostring(numbers)); collections.sort(numbers, cmp.reversed()); system.out.println(converttostring(numbers));
1and, please prefer list
interface on arraylist
concrete type.
Comments
Post a Comment