public class Counter {
private int val;
public Counter() {
reset();
}
public void count() {
val++;
}
public void reset() {
val = 0;
}
public int readValue() {
return val;
}
}
public static void main(String[] args) {
if (args.length != 1) {
System.out.println("Ange ett filnamn som programargument");
return;
}
File fil = new File(args[0]);
Scanner scanner = null;
try {
scanner = new Scanner(fil);
Counter countOdd = new Counter();
Counter countEven = new Counter();
while (scanner.hasNext()) {
int x = scanner.nextInt();
if (x % 2 == 0) { // even number
countEven.count();
} else { // x % 2 == 1, odd number
countOdd.count();
}
}
System.out.println("Filen innehåller " + countOdd.readValue() + " udda tal" +
" och " + countEven.readValue() + " jämna tal.");
} catch (FileNotFoundException e) {
System.out.println("Filen existerar inte.");
} catch (InputMismatchException e) {
System.out.println("Filen ska bara innehålla heltal.");
} finally {
if (scanner != null) scanner.close();
}
}
public class FinSubset {
public static class SetSizeMismatchException extends RuntimeException {
}
private boolean[] members;
public FinSubset(int n) {
members = new boolean[n];
for (int i = 0; i < n; i++) {
members[i] = false;
}
}
public int universeSize() {
return members.length;
}
public void add(int x) {
members[x] = true;
}
public void remove(int x) {
members[x] = false;
}
public boolean isMember(int x) {
return members[x];
}
public int size() {
int s = 0;
// use enhanced for-loop instead of traditional (seel below)
for (boolean m : members) {
if (m) s++;
}
// for (int i = 0; i < members.length; i++) {
// if (members[i]) s++;
// }
return s;
}
private void checkUniverseSizes(FinSubset s) {
if (members.length != s.members.length) {
throw new SetSizeMismatchException();
}
}
public boolean isSubsetOf(FinSubset s) {
checkUniverseSizes(s);
for (int i = 0; i < members.length; i++) {
if (members[i] && !s.members[i]) return false;
}
return true;
}
public FinSubset union(FinSubset s) {
checkUniverseSizes(s);
FinSubset newSet = new FinSubset(members.length);
for (int i = 0; i < members.length; i++) {
if (isMember(i) || s.isMember(i)) {
newSet.add(i);
}
}
return newSet;
}
public FinSubset intersection(FinSubset s) {
checkUniverseSizes(s);
FinSubset newSet = new FinSubset(members.length);
for (int i = 0; i < members.length; i++) {
if (isMember(i) && s.isMember(i)) {
newSet.add(i);
}
}
return newSet;
}
}
Se föregående kod.
private static FinSubset readSet(File fil) {
Scanner scanner = null;
FinSubset s = null;
try {
scanner = new Scanner(fil);
int n = scanner.nextInt();
s = new FinSubset(n);
while (scanner.hasNext()) {
int x = scanner.nextInt();
s.add(x);
}
} catch (FileNotFoundException e) {
System.out.println("Filen existerar inte.");
} finally {
if (scanner != null) scanner.close();
}
return s;
}
public static void main(String[] args) {
FinSubset s1 = readSet(new File(args[0]));
FinSubset s2 = readSet(new File(args[1]));
FinSubset s3 = s1.intersection(s2); // or s2.intersection(s1)
PrintWriter writer = null;
try {
writer = new PrintWriter(new File(args[2]));
writer.print(s3.universeSize() + " ");
for (int i = 0; i < s3.universeSize(); i++) {
if (s3.isMember(i)) {
writer.print(i + " ");
}
}
} catch (FileNotFoundException e) {
System.out.println("Couldn't open output file.");
} finally {
if (writer != null) writer.close();
}
}
public class Point {
private double x, y;
public Point() {
x = y = 0.0;
}
public Point(double x, double y) {
this.x = x;
this.y = y;
}
public Point(Point p) {
x = p.x;
y = p.y;
}
public double getX() {
return x;
}
public double getY() {
return y;
}
public void setX(double x) {
this.x = x;
}
public void setY(double y) {
this.y = y;
}
public void translate(double dx, double dy) {
x += dx;
y += dy;
}
public void rotate(Point center, double angle) {
double relx = x - center.x;
double rely = y - center.y;
double cos = Math.cos(angle);
double sin = Math.sin(angle);
x = center.x + relx * cos + rely * sin;
y = center.y + rely * cos - relx * sin;
}
public boolean equals(Point p) {
return x == p.x && y == p.y;
}
}
public class Line {
Point p1, p2;
public Line(Point p1, Point p2) {
this.p1 = new Point(p1);
this.p2 = new Point(p2);
}
public boolean equals(Line l) {
return p1.equals(l.p1) && p2.equals(l.p2) ||
p2.equals(l.p1) && p1.equals(l.p2);
}
public double length() {
double dx = p1.getX() - p2.getX();
double dy = p1.getY() - p2.getY();
return Math.sqrt(dx * dx + dy * dy);
}
public Point[] getPoints() {
Point[] points = new Point[2];
points[0] = new Point(p1);
points[1] = new Point(p2);
return points;
}
}