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 converttostring1

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

Popular posts from this blog

jOOQ update returning clause with Oracle -

java - Warning equals/hashCode on @Data annotation lombok with inheritance -

java - BasicPathUsageException: Cannot join to attribute of basic type -