View Single Post
  #2 (permalink)  
Old 08-07-2007, 09:05 AM
lenny lenny is offline
Member
 
Join Date: Jul 2007
Posts: 40
lenny is on a distinguished road
Please Check this:

Code:
import java.util.Vector; import java.util.Stack; import java.util.Collections; import java.io.*; import java.util.StringTokenizer; public class Study { private static File F=null; private static String fileName=""; private BufferedReader br=null; private FileInputStream fin=null; private String currentLine=""; private boolean ascendingDescendingNumbersAreEquals=false; public Study() { } /*Setting File Name*/ public static void setFileName(String fName) { fileName=fName; F = new File(fName); } public static void main(String[] args) { Study study = new Study(); study.setFileName(args[0]); study.completeTask(); } public void completeTask() { int lineNo=1; try { fin = new FileInputStream(F); br = new BufferedReader(new InputStreamReader(fin)); //Read Line by Line while((currentLine=br.readLine())!=null) { if(checkSorting(currentLine)) { System.out.println("Line "+lineNo+", contains numbers in sorted in order"); if(areAscendingDescendingNumbersAreEquals()) { System.out.println("For Line "+lineNo+", numbers are equal in ascending and descending way"); } } else { System.out.println("Line "+lineNo+", does NOT contain numbers in sorted order"); } lineNo++; } fin.close(); br.close(); } catch (Exception e) { e.printStackTrace(); } } /*First Condition Check Sorting */ private boolean checkSorting(String line) { boolean sorted=true; StringTokenizer tokenizer=null; int totalNumbersFound=0; Vector ascendingNumbers;//Vector for ascending Numbers Stack descendingNumbers;//Stack for descending Numbers //For Vector list is stored in list (used for ascending) //For stack it is last in first out (used for descending) int counter=0; try { tokenizer = new StringTokenizer(line);//Space is default token totalNumbersFound=tokenizer.countTokens(); // Half are considered ascending and half descending if(totalNumbersFound%2==0) { ascendingNumbers = new Vector();//Vector for ascending Numbers descendingNumbers = new Stack();//Stack for descending Numbers while(tokenizer.hasMoreElements()) { counter++; //Checking till half numbers if(counter<=(totalNumbersFound/2)) { ascendingNumbers.add(tokenizer.nextElement().toString());//add Element } else { descendingNumbers.push(tokenizer.nextElement().toString());//push } }//while /*Checking for ascending numbers*/ for(int i=0;i<ascendingNumbers.size()-1;i++) { int num1=-1,num2=0; num1=Integer.parseInt((String)ascendingNumbers.get(i)); num2=Integer.parseInt((String)ascendingNumbers.get(i+1)); //Num2 should be greater here than num1 if(num2!=(num1+1)) { sorted=false; break; } } /*Checking for descending numbers*/ for(int i=0;i<descendingNumbers.size()-1;i++) { int num1=-1,num2=0; num1=Integer.parseInt((String)descendingNumbers.get(i)); num2=Integer.parseInt((String)descendingNumbers.get(i+1)); //Num1 should be greater here than num2 if(num1!=(num2+1)) { sorted=false; break; } } //Check for equality ascendingDescendingNumbersAreEquals=checkNumbersForEquality(ascendingNumbers,descendingNumbers); } else { sorted=false; } } catch (Exception e) { e.printStackTrace(); } return sorted; } private boolean checkNumbersForEquality(Vector ascendingNumbers,Stack descendingNumbers) { boolean equal=true; int num1=0,num2=0; for(int i=0;i<ascendingNumbers.size();i++) { num1=Integer.parseInt((String)ascendingNumbers.get(i)); num2=Integer.parseInt((String)descendingNumbers.pop()); if(num1!=num2) { equal =false; break; } } ascendingDescendingNumbersAreEquals = equal; return equal; } private boolean areAscendingDescendingNumbersAreEquals() { return ascendingDescendingNumbersAreEquals; } }
Code:
Output: Line 1, contains numbers in sorted in order For Line 1, numbers are equal in ascending and descending way Line 2, does NOT contain numbers in sorted order Line 3, does NOT contain numbers in sorted order Line 4, contains numbers in sorted in order For Line 4, numbers are equal in ascending and descending way File data.txt: 10 11 12 13 14 14 13 12 11 10 10 11 12 13 12 11 10 10 11 12 10 11 12 1 2 3 4 4 3 2 1
Reply With Quote