Help with code explanation
Help explaining this section of the code, mainly the loop part. A pseudo code explaination would be greatful. What I confuses me is how the two consective loops work? Let say if the first loop on line 260 is terminated then what?{color:#808080}
239 public static class RandomIvValidator {
240 private long m_rand = 0;
241 public char next() {
242 m_rand = (m_rand * 1103515245) + 24691;
243 return (char)(m_rand >>> 16);
244 }
245 /** This function takes the random number generator back a step.
246 *
247 */
248 public char prev() {
249 m_rand = (m_rand * 4005161829L) + 171270561;
250 return (char)(m_rand >>> 16);
251 }{color}
{color:#808080} 252 public boolean isLegal(int[] ivs, AnimalNature nature, boolean dp) {
253 int internal = nature.getInternalValue();
254 long num1 = (ivs[Char.S_DEFENCE] << 10)
255 + (ivs[Char.S_ATTACK] << 5)
256 + ivs[Char.S_HP];
257 long num2 = (ivs[Char.S_SPDEFENCE] << 10)
258 + (ivs[Char.S_SPATTACK] << 5)
259 + ivs[Char.S_SPEED];
{color}{color:#ff0000} 260 for (int i = 0; i < 2; ++i) {
261 for (int j = 0; j < 65536; ++j) {
262 m_rand = (i << 31) + (num1 << 16) + j;
{color} {color:#808080}263 long first = m_rand;
264 long second = next();
265 if (second >= 32768) {
266 second -= 32768;
267 }{color}
Edited by: Bakery on May 15, 2008 5:23 AM
They're not consecutive, because that means "one after another". These loops are nested. If the outer loop, which starts on 260, were to be broken, it would proceed to the next line after the loop's closing brace, which is not shown in this snippet.
I'm not even going to bother trying to pseudo-code this, because it's written at such a low level that all the high-level semantic information is lost, other than what's provided in the comments. It looks like C code that was directly ported to Java.
for(...) { //outer loop runs n times
outer loop statements //I am executed n times
for(...) { //inner loop runs m times
inner loop statements //I am executed n * m times
}Edited by: nclow on May 15, 2008 1:20 PM
Similar Messages
-
Combo box and Check box..help with code please?
Here is my problem...i have a list of check boxes and according to which one is checked, i need combo boxes to populate different choices.
as an easy example im only using 2 check boxes and two combo boxes.
the check boxes are named Choice 1or2 with export values of 1 and 2
the Combo Boxes are named List A and List B..
both containing options that say you checked box 1 and you checked box 2
any help would be greatly appreciatedImplode wrote:
"Help with code please."
In the future, please use a meaningful subject. Given that you're posting here, it's kind of a given that you're looking for help with the code. The whole point of the subject is to give people a high level idea of what KIND of help with what KIND of code you need, so they can decide if they're interested and qualified to help.
Exception in thread "main" java.lang.NumberFormatException: For input string: "fgg"
at java.lang.NumberFormatException.forInputString(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at java.lang.Integer.parseInt(Unknown Source)
at assignment1.Game.Start(Game.java:120)
at assignment1.RunGame.main(RunGame.java:18)This error message is telling you exactly what's wrong. At line 120 of Game.java, in the Start method (which should start with lowercase "s" to follow conventions, by the way), you're calling Integer.parseInt, but "fgg" is not a valid int. -
Can somebody help me get rid of the following compile errors:
coreservlets/OrderPage.java:61: setNumOrdereed(int, int) in coreservlets.ShoppingCart
cannont be applied to (java.lang.String,int)
cart.setNumOrdered(recordingid, numItems);
.\coreservlets\shoppingCart.java:44 cannot resolve symbol
symbol : variable recordingid
location: class coreservlets.ShoppingCart
if (order.getrecordingid() == (recordingid)) {
.\coreservlets\ShoppingCart.java:49: cannot resolve symbol
symbol : variable recordingid
location: class coreservlets.ShoppingCart
itemOrder new order = new ItemOrder(Catalog.getItem(recordingid));I know that not very helpful with out the code but the code is very big so if anyone wants me to post extracts from the code please tell me.Thank you i put that code in but now get the following:
coreservlets/OrderPage.java:40: incompatible types
found : java.lang.strgin
required: int int recordingid = request.getParameter("recordingid")!=null?request.getParameter("recordingid"):1;
^/code]
coreservlets/OrderPage.java:48: addItem(java.lang.String) in coreservlets.ShoppingCart cannot be applied to (int)
cart.additem(recordingid);
.\coreservlets\AhoppingCart.java:44: cannot resolve symbol
symbol: variable recordingid
location: class coreservlets.ShoppingCart
if (order.getrecordingid() == (recordingid)) {
.\coreservlets\AhoppingCart.java:49: cannot resolve symbol
symbol: variable recordingid
location: class coreservlets.ShoppingCart
ItemOrder newOrder = new ItemOrder(Catalog.getItem(recordingid));
4 errors.
Also could you explain what the line you added to the code means:
!=null?request.getParameter("recordingid"):1;
!=null?request.getParameter("numItems"):"1";and how come you got rid of if (recordingid != null) {Thanks for any help with these errors
OK I HAVE GOT RID OF ALL THE ERRORS APART FROM THE TOP ONE:
code]coreservlets/OrderPage.java:40: incompatible types
found : java.lang.strgin
required: int
int recordingid = request.getParameter("recordingid")!=null?request.getParameter("recordingid"):1;
/code]
Message was edited by:
ajrobson -
Urgent-Need help with code for Master data enhancement
hi Experts,
I have appended YMFRGR field(Table MARC) to 0MAT_PLANT_ATTR datasource.
The key fields in the MARC table are MATNR and WERKS.Can anybody help with the user exit to populate this field,as am pretty new to ABAP.
Thanks in advanceHi,
go through this link which has the similar problem:
https://forums.sdn.sap.com/click.jspa?searchID=1331543&messageID=2794783
hope it helps.
Thanks,
Amith -
Help with some explanation of code
Hi
could some one explain how the code in italics works below. Is the varaiable currentObject which has a data type of DragDrop an
array as well that gets loaded up with the string values of the dragdrops array?
public class Map extends MovieClip
var dragdrops:Array;
public function Map()
// constructor code
dragdrops = [deathvalley,goldengate,grapes,hollywood,
joshuatree,laketahoe,mission,redwood];
var currentObject:DragDrop;
for (var i:uint = 0; i < dragdrops.length; i++)
currentObject = dragdrops[i];
currentObject.target = getChildByName(currentObject.name + "_target");
AND THIS CODE I THINK TESTS FOR IF THE OBJECT HITS ITS TARGET BUT I DON'T UNDERSTAND HOW IT WORKS?
if (hitTestObject(target))
visible = false;
target.alpha = 1;
Object(parent).match();Hi ,
Try to write the code in this type of format.
I think this may help you.
TABLES: bapiache08, bapiacgl08,bapiaccr08, bapiret2.
DATA: t_bapiache08 LIKE TABLE OF bapiache08 WITH HEADER LINE,
t_bapiacgl08 LIKE TABLE OF bapiacgl08 WITH HEADER LINE,
t_bapiaccr08 LIKE TABLE OF bapiaccr08 WITH HEADER LINE,
t_bapiret2 LIKE TABLE OF bapiret2 WITH HEADER LINE,
ct_bapiret2 LIKE TABLE OF bapiret2 WITH HEADER LINE.
t_bapiache08-obj_type = 'BKPFF'. "BKPFF
t_bapiache08-obj_key = '010000000000062005'.
t_bapiache08-obj_sys = 'T90CLNT800'. "T09CLNT800
t_bapiache08-username = 'SSI4'.
t_bapiache08-header_txt = 'DOCUMENT POSTING'.
t_bapiache08-comp_code = '1000'.
t_bapiache08-fisc_year = '2005'.
t_bapiache08-doc_date = '20050805'.
t_bapiache08-pstng_date = '20050805'.
t_bapiache08-fis_period = '07'.
t_bapiache08-doc_type = 'SA'.
t_bapiache08-compo_acc = 'FI'. "GL
APPEND t_bapiache08.
t_bapiacgl08-itemno_acc = '031'.
t_bapiacgl08-gl_account = '160000'.
t_bapiacgl08-comp_code = '1000'.
t_bapiacgl08-pstng_date = '20050805'.
t_bapiacgl08-doc_type = 'SA'.
t_bapiacgl08-fisc_year = '2005'.
t_bapiacgl08-fis_period = '07'.
t_bapiacgl08-stat_con = 'X'.
t_bapiacgl08-vendor_no = '1920'. "ACCOUNTING NO.FOR VENDOR/CREDITOR.
t_bapiacgl08-item_text = 'LINE ITEM TEXT BY VIN'.
APPEND t_bapiacgl08.
t_bapiaccr08-itemno_acc = '031'.
t_bapiaccr08-currency_iso = 'EUR'.
t_bapiaccr08-amt_doccur = '2000'.
APPEND t_bapiaccr08.
CALL FUNCTION 'BAPI_ACC_GL_POSTING_POST'
EXPORTING
documentheader = t_bapiache08
IMPORTING
OBJ_TYPE =
OBJ_KEY =
OBJ_SYS =
TABLES
accountgl = t_bapiacgl08
currencyamount = t_bapiaccr08
return = t_bapiret2
EXTENSION1 =
Thanks & Regards,
Ravi Kanth Yechuri. -
Checking Account and help with code ?
Hi all..my computer hung up on me, so I'm not sure if my last post went through. First of all thank you all for helping me out the other day with my question on the Bank Account. It continues :)
I'm trying to work on each class one by one..when I test my Checking Account, it isn't printing out the correct balance. The string method to print this is coming from the Withdrawal class...so I know it has to be somewhere in there but I can't seem to figure out why it isn't totalling the balance...or how to get it too.
Then when I test my MyBank class, it hangs up on line 63..which I could swear I have written correctly. Again I am getting a NullPointerException and I honestly think I have the line of code written right, but I'm guessing I dont.
Any help would be appreciated.
public abstract class BankAccount {
public static final String bankName = "BrianBank";
protected String custName;
protected String pin;
protected Transaction[] history;
private double balance;
private double amt, amount;
private double bal, initBal;
private int transactions;
private final int MAX_HISTORY = 100;
private int acct;
protected BankAccount(String cname, String cpin, double initBal) {
custName = cname;
pin = cpin;
balance = initBal;
history = new Transaction[MAX_HISTORY];
transactions =0;
public double getBalance() {
return balance;
public void withdraw(double amt) {
history [transactions] = new Withdrawal (bal, amt);
balance = bal;
amount = amt;
balance -= amt;
transactions = transactions + 1;
public void deposit(double amt) {
history [transactions] = new Deposit (bal, amt);
balance = bal;
amount = amt;
balance += amt;
transactions = transactions +1;
// abstract method to return account number
public abstract int getAcctNum();
// abstract method to return a summary of transactions as a string
public abstract String getStatement();
public class CheckingAccount extends BankAccount implements IncursFee
private int transactions;
private double balance, initBal, amt;
private static final int NOFEE_WITHDRAWALS = 10;
private static final double TRANSACTION_FEE = 5.00;
public static final String bankName = "iBank";
public static final int STARTING_ACCOUNT_NUMBER = 10000;
private int checkingAccountNumber = STARTING_ACCOUNT_NUMBER;
private static int accountNumberCounter = STARTING_ACCOUNT_NUMBER;
private String custName;
private String pin;
public CheckingAccount (String cname, String cpin, double initBal)
super (cname, cpin, initBal);
custName = cname;
pin = cpin;
balance = initBal;
accountNumberCounter++;
checkingAccountNumber = accountNumberCounter;
//initialize a count of transactions
transactions = 0;
public double getBalance()
return balance;
public void withdraw(double amt)
super.withdraw (amt);
transactions ++;
public void deposit(double amt)
super.deposit (amt);
transactions ++;
public int getAcctNum ()
return checkingAccountNumber;
public String getStatement ()
int i = 0;
String output = "";
while ( i < history.length && history[i] != null )
output += history.toString () + "\n";
i++;
return output;
public void deductFee(double fee)
if (transactions > NOFEE_WITHDRAWALS)
{ fee = TRANSACTION_FEE *(transactions - NOFEE_WITHDRAWALS);
super.withdraw(fee);
balance -=fee;
transactions = 0;
public interface IncursFee {
public abstract void deductFee(double fee);
public abstract class Transaction {
protected double initBal;
protected double tranAmt;
// constructor
protected Transaction(double bal, double amt) {
initBal = bal;
tranAmt = amt;
abstract public String toString();
public class Withdrawal extends Transaction
private double initBal;
private double amount;
private static NumberFormat fmt = NumberFormat.getCurrencyInstance();
public Withdrawal (double bal, double amt)
super (bal, amt);
initBal = bal;
amount = amt;
public String toString ()
return "Balance : " + fmt.format(initBal) + "\n" + "Withdrawal : " + fmt.format(amount);
import java.text.NumberFormat;
public class Deposit extends Transaction
private double initbal, balance;
private double amount;
private static NumberFormat fmt = NumberFormat.getCurrencyInstance();
public Deposit (double bal, double amt)
super (bal, amt);
initbal = bal;
amount = amt;
public String toString ()
return "Balance : " + fmt.format(initbal) + "\n" + "Deposit : " + fmt.format(amount);
public class TestCheckingAcct {
public static void main(String[] args) {
BankAccount b1 = new CheckingAccount("Harry", "1234", 500.0);
System.out.println (b1.getBalance ());
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.deposit(50);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.deposit(10);
b1.withdraw(1);
System.out.println(b1.getStatement());
// This interface specifies the functionality requirements of a bank
public interface Bank {
public abstract int openNewAccount(String customerName, String customerPIN, String accType, double initDepAmount);
public abstract void processWithdrawal(int accNum, String pin, double amount);
// executes a deposit on the specified acct by the amount
public abstract void processDeposit(int accNum, String pin, double amount);
// returns the balance of acct
public abstract double processBalanceInquiry(int accNum, String pin);
// returns summary of transactions
public abstract String processStatementInquiry(int accNum, String pin);
import java.util.ArrayList;
public class MyBank implements Bank
private ArrayList<BankAccount> savAccounts = new ArrayList<BankAccount>(); //dynamically grows
private ArrayList<BankAccount> chkAccounts = new ArrayList<BankAccount>(); //dynamically grows
private SavingsAccount sav;
private CheckingAccount chk;
private int accNum;
private String customerName, customerPIN, accType, pin;
private double initDepAmount, amount, balance;
public int openNewAccount(String customerName, String customerPIN, String accType, double initDepAmount)
this.customerName = customerName;
this.customerPIN = customerPIN;
this.accType = accType;
this.initDepAmount = initDepAmount;
if ( accType.equals("Savings"))
BankAccount savAcct = new SavingsAccount(customerName, customerPIN, initDepAmount);
try
savAccounts.add(savAcct);
catch (ArrayIndexOutOfBoundsException savAccounts)
return savAcct.getAcctNum();
else
CheckingAccount chkAcct = new CheckingAccount(customerName, customerPIN, initDepAmount);
try
chkAccounts.add(chkAcct);
catch (ArrayIndexOutOfBoundsException chkAccounts)
return chkAcct.getAcctNum();
public void processWithdrawal (int accNum, String pin, double amount)
this.accNum = accNum;
this.pin = pin;
this.amount = amount;
if (accNum >10000 && accNum < 20000)
chk.withdraw (amount);
if (accNum >50000 && accNum <60000)
sav.withdraw (amount);
public void processDeposit (int accNum, String pin, double amount)
this.accNum = accNum;
this.pin = pin;
this.amount = amount;
if (accNum >10000 && accNum < 20000)
chk.deposit (amount);
if (accNum >50000 && accNum <60000)
sav.deposit (amount);
public double processBalanceInquiry (int accNum, String pin)
this.accNum = accNum;
this.pin = pin;
this.balance = 0;
if (accNum >10000 && accNum <20000)
balance = chk.getBalance ();
if (accNum >50000 && accNum <60000)
balance = sav.getBalance ();
return balance;
public String processStatementInquiry(int accNum, String pin)
this.accNum = accNum;
this.pin = pin;
this.statement = "";
if (accNum >10000 && accNum <20000)
statement = chk.getStatement ();
if (accNum >50000 && accNum <60000)
statement= sav.getStatement ();
return statement;Here's some quick code review:
public abstract class BankAccount {
public static final String bankName =
me = "BrianBank";
protected String custName;
protected String pin;
protected Transaction[] history;
private double balance;
private double amt, amount;
private double bal, initBal;
private int transactions;// make MAX_HISTORY private static final, too.
private final int MAX_HISTORY = 100;
private int acct;
protected BankAccount(String cname, String cpin,
pin, double initBal) {
custName = cname;
pin = cpin;
balance = initBal;
history = new Transaction[MAX_HISTORY];
transactions =0;
public double getBalance() {
return balance;
public void withdraw(double amt) {
history [transactions] = new Withdrawal (bal, amt);
balance = bal;
amount = amt;
balance -= amt;// ++transactions above would be elegant.
transactions = transactions + 1;
public void deposit(double amt) {
history [transactions] = new Deposit (bal, amt);
balance = bal;
amount = amt;
balance += amt;
transactions = transactions +1;
// abstract method to return account number// why abstract?
public abstract int getAcctNum();
// abstract method to return a summary of
y of transactions as a string// why abstract?
public abstract String getStatement();
public class CheckingAccount extends BankAccount
implements IncursFee
private int transactions;
private double balance, initBal, amt;
private static final int NOFEE_WITHDRAWALS =
WALS = 10;
private static final double TRANSACTION_FEE =
_FEE = 5.00;
public static final String bankName = "iBank";
public static final int STARTING_ACCOUNT_NUMBER
NUMBER = 10000;
private int checkingAccountNumber =
mber = STARTING_ACCOUNT_NUMBER;
private static int accountNumberCounter =
nter = STARTING_ACCOUNT_NUMBER;// BankAccount has a custName attribute; why does CheckingAccount need
// one if it extends BankAccount?
private String custName;
private String pin;
public CheckingAccount (String cname, String
String cpin, double initBal)
super (cname, cpin, initBal);
custName = cname;
pin = cpin;
balance = initBal;
accountNumberCounter++;
checkingAccountNumber =
tNumber = accountNumberCounter;
//initialize a count of transactions
transactions = 0;
// same as BankAccount - why rewrite it?
public double getBalance()
return balance;
// same as BankAccount - why rewrite it?
public void withdraw(double amt)
super.withdraw (amt);
transactions ++;
// same as BankAccount - why rewrite it?
public void deposit(double amt)
super.deposit (amt);
transactions ++;
// same as BankAccount - why rewrite it?
public int getAcctNum ()
return checkingAccountNumber;
public String getStatement ()
int i = 0;
String output = "";
while ( i < history.length && history[i] !=
ory[i] != null )
output += history.toString () + "\n";
i++;
return output;
public void deductFee(double fee)
if (transactions > NOFEE_WITHDRAWALS)
{ fee = TRANSACTION_FEE *(transactions -
ansactions - NOFEE_WITHDRAWALS);
super.withdraw(fee);
balance -=fee;
transactions = 0;
public interface IncursFee {
public abstract void deductFee(double fee);
public abstract class Transaction {
protected double initBal;
protected double tranAmt;
// constructor
// why protected? make it public.
protected Transaction(double bal, double amt) {
initBal = bal;
tranAmt = amt;
abstract public String toString();
public class Withdrawal extends Transaction
private double initBal;
private double amount;
private static NumberFormat fmt =
= NumberFormat.getCurrencyInstance();
public Withdrawal (double bal, double amt)
super (bal, amt);
initBal = bal;
amount = amt;
public String toString ()
return "Balance : " + fmt.format(initBal) + "\n" +
+ "Withdrawal : " + fmt.format(amount);
import java.text.NumberFormat;
public class Deposit extends Transaction
private double initbal, balance;
private double amount;
private static NumberFormat fmt =
= NumberFormat.getCurrencyInstance();
public Deposit (double bal, double amt)
super (bal, amt);
initbal = bal;
amount = amt;
public String toString ()
return "Balance : " + fmt.format(initbal) + "\n" +
+ "Deposit : " + fmt.format(amount);
public class TestCheckingAcct {
public static void main(String[] args) {
BankAccount b1 = new CheckingAccount("Harry",
, "1234", 500.0);
System.out.println (b1.getBalance ());
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.deposit(50);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.withdraw(1);
b1.deposit(10);
b1.withdraw(1);
System.out.println(b1.getStatement());
// This interface specifies the functionality
requirements of a bank
public interface Bank {
public abstract int openNewAccount(String
String customerName, String customerPIN, String
accType, double initDepAmount);
public abstract void processWithdrawal(int
(int accNum, String pin, double amount);
// executes a deposit on the specified acct by
t by the amount
public abstract void processDeposit(int accNum,
Num, String pin, double amount);
// returns the balance of acct
public abstract double processBalanceInquiry(int
(int accNum, String pin);
// returns summary of transactions
public abstract String
ring processStatementInquiry(int accNum, String
pin);
import java.util.ArrayList;
public class MyBank implements Bank
private ArrayList<BankAccount> savAccounts =
unts = new ArrayList<BankAccount>(); //dynamically
grows
private ArrayList<BankAccount> chkAccounts =
unts = new ArrayList<BankAccount>(); //dynamically
grows
private SavingsAccount sav;
private CheckingAccount chk;
private int accNum;
private String customerName, customerPIN,
erPIN, accType, pin;
private double initDepAmount, amount, balance;
public int openNewAccount(String customerName,
erName, String customerPIN, String accType, double
initDepAmount)
this.customerName = customerName;
this.customerPIN = customerPIN;
this.accType = accType;
this.initDepAmount = initDepAmount;
if ( accType.equals("Savings"))
BankAccount savAcct = new
vAcct = new SavingsAccount(customerName, customerPIN,
initDepAmount);
try
savAccounts.add(savAcct);
catch (ArrayIndexOutOfBoundsException
Exception savAccounts)
return savAcct.getAcctNum();
else
CheckingAccount chkAcct = new
hkAcct = new CheckingAccount(customerName,
customerPIN, initDepAmount);
try
chkAccounts.add(chkAcct);
catch (ArrayIndexOutOfBoundsException
Exception chkAccounts)
return chkAcct.getAcctNum();
public void processWithdrawal (int accNum,
accNum, String pin, double amount)
this.accNum = accNum;
this.pin = pin;
this.amount = amount;
if (accNum >10000 && accNum < 20000)
chk.withdraw (amount);
if (accNum >50000 && accNum <60000)
sav.withdraw (amount);
public void processDeposit (int accNum, String
String pin, double amount)
this.accNum = accNum;
this.pin = pin;
this.amount = amount;
if (accNum >10000 && accNum < 20000)
chk.deposit (amount);
if (accNum >50000 && accNum <60000)
sav.deposit (amount);
public double processBalanceInquiry (int accNum,
String pin)
this.accNum = accNum;
this.pin = pin;
this.balance = 0;
if (accNum >10000 && accNum <20000)
balance = chk.getBalance ();
if (accNum >50000 && accNum <60000)
balance = sav.getBalance ();
return balance;
public String processStatementInquiry(int accNum,
m, String pin)
this.accNum = accNum;
this.pin = pin;
this.statement = "";
if (accNum >10000 && accNum <20000)
statement = chk.getStatement ();
if (accNum >50000 && accNum <60000)
statement= sav.getStatement ();
return statement;
Very bad style with those brace placements. Pick a style and stick with it. Consistency is the key.
Your code isn't very readable.
You don't have a SavingsAccount here anywhere, even though your MyBank uses one.
You use JDK 1.5 generics yet you've got ArrayList as the static type on those declarations. Better to use the interface type List as the compile time type on the LHS.
You have a lot of compile time problems, and some incomprehensible stuff, but I was able to change it enough to my TestCheckingAcct run to completion. No NPE exceptions.
I'm not sure I agree with your design.
No SavingsAccount. The accounts I have ALL incur fees - no need for a special interface there. Savings accounts are usually interest bearing. That's the way they behave differently from checking accounts. Where do you have that?
You rewrite too much code. If you put behavior in the abstract BankingAccount class (a good idea), the whole idea is that concrete classes that extend BankingAccount don't need to overload any methods whose default behavior is correct for them.
I don't know that I'd have separate Deposit and Withdrawal to implement Transaction. I'd make Transaction concrete and have starting balance, ending balance, and a transaction type String (e.g., "DEPOSIT", "WITHDRAWAL")
It'd be good to see some thought put into exception handling. I don't see an OverdrawnException anywhere. Seems appropriate.
No transfer methods from one account to another. I often do that with my bank.
That's enough to get started. -
Help with code to print HTML in Java 5
Hi,
The following code works and runs successfully..
However, the printing in Java 1.4.2_03 is better than Java 5 (latest version).
i.e in particular the characters are not monospaced compared with compiling with Java 1.4.2_03. e.g si so ss squashed together.
This issue does not seem to occur when running the same code in Java 1.4.2_03. (I haven't tried other 1.4.2 java versions).
Any help would be appreciated. We really need this working under Java 5 or bust.
Here is the complete listing ... PrintHtml.java (it uses the DocumentRenderer)
and following this is the input file.
import javax.swing.text.html.HTMLDocument;
import java.net.URL;
import java.net.MalformedURLException;
import java.io.IOException;
import java.io.DataInputStream;
import java.io.InputStream;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;
import javax.swing.*;
import javax.swing.text.*;
import javax.swing.text.html.*;
import java.lang.reflect.*;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.Shape;
import java.awt.print.PageFormat;
import java.awt.print.Printable;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JEditorPane;
import javax.swing.text.Document;
import javax.swing.text.PlainDocument;
import javax.swing.text.View;
import javax.swing.text.html.HTMLDocument;
import java.awt.*;
import javax.swing.*;
import java.awt.print.*;
import java.text.ParseException;
public class PrintHtml {
* Utility helper to convert HTML Text to HTML Document.
* @param baseUrl URL to be used in order
* to resolve relative HTML references, in lieu of an
* HTML BASE tag. May be null, if not required or HTML
* BASE tag is to be used.
* @see jbox.view.jfx.JboxHtmlEditor
* @see jbox.utility.JboxPrint
* @see jbox.utility.JboxPrintUtil
public static HTMLDocument htmlTextToHtmlDoc(String htmlText, URL baseUrl)
try
// JboxHtmlEditorKit editorKit = new JboxHtmlEditorKit();
HTMLEditorKit editorKit = new HTMLEditorKit();
HTMLDocument doc = (HTMLDocument)editorKit.createDefaultDocument();
if (baseUrl != null)
try
doc.setBase(baseUrl);
catch(Exception e)
//JboxTraceManager.trace(e);
StringReader reader = new StringReader(htmlText);
editorKit.read(reader, doc, 0);
return doc;
catch(Exception e)
//JboxTraceManager.trace(e);
return null;
public static void main(String[] args) {
System.out.println("printing...");
HTMLDocument x = new HTMLDocument();
DocumentRenderer invoice = new DocumentRenderer();
//invoice.setScaleWidthToFit(false);
String s = "";
try {
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("mark.html"));
InputStreamReader in = new InputStreamReader(bis , "ASCII");
StringWriter sw = new StringWriter();
while (true) {
int datum = in.read();
if (datum == -1) break;
sw.write(datum);
in.close();
s = sw.toString();
System.out.println("s="+s);
catch (IOException e) {
System.err.println(e);
HTMLDocument htmldoc = htmlTextToHtmlDoc(s, null);
invoice.print(htmldoc);
// the good old infamous DocumentRenderer.
/* Copyright 2002
Kei G. Gauthier
Suite 301
77 Winsor Street
Ludlow, MA 01056
class DocumentRenderer implements Printable {
/* DocumentRenderer prints objects of type Document. Text attributes, including
fonts, color, and small icons, will be rendered to a printed page.
DocumentRenderer computes line breaks, paginates, and performs other
formatting.
An HTMLDocument is printed by sending it as an argument to the
print(HTMLDocument) method. A PlainDocument is printed the same way. Other
types of documents must be sent in a JEditorPane as an argument to the
print(JEditorPane) method. Printing Documents in this way will automatically
display a print dialog.
As objects which implement the Printable Interface, instances of the
DocumentRenderer class can also be used as the argument in the setPrintable
method of the PrinterJob class. Instead of using the print() methods
detailed above, a programmer may gain access to the formatting capabilities
of this class without using its print dialog by creating an instance of
DocumentRenderer and setting the document to be printed with the
setDocument() or setJEditorPane(). The Document may then be printed by
setting the instance of DocumentRenderer in any PrinterJob.
protected int currentPage = -1; //Used to keep track of when
//the page to print changes.
protected JEditorPane jeditorPane; //Container to hold the
//Document. This object will
//be used to lay out the
//Document for printing.
protected double pageEndY = 0; //Location of the current page
//end.
protected double pageStartY = 0; //Location of the current page
//start.
protected boolean scaleWidthToFit = true; //boolean to allow control over
//whether pages too wide to fit
//on a page will be scaled.
/* The DocumentRenderer class uses pFormat and pJob in its methods. Note
that pFormat is not the variable name used by the print method of the
DocumentRenderer. Although it would always be expected to reference the
pFormat object, the print method gets its PageFormat as an argument.
protected PageFormat pFormat;
protected PrinterJob pJob;
/* The constructor initializes the pFormat and PJob variables.
public DocumentRenderer() {
pFormat = new PageFormat();
pJob = PrinterJob.getPrinterJob();
/* Method to get the current Document
public Document getDocument() {
if (jeditorPane != null) return jeditorPane.getDocument();
else return null;
/* Method to get the current choice the width scaling option.
public boolean getScaleWidthToFit() {
return scaleWidthToFit;
/* pageDialog() displays a page setup dialog.
public void pageDialog() {
pFormat = pJob.pageDialog(pFormat);
/* The print method implements the Printable interface. Although Printables
may be called to render a page more than once, each page is painted in
order. We may, therefore, keep track of changes in the page being rendered
by setting the currentPage variable to equal the pageIndex, and then
comparing these variables on subsequent calls to this method. When the two
variables match, it means that the page is being rendered for the second or
third time. When the currentPage differs from the pageIndex, a new page is
being requested.
The highlights of the process used print a page are as follows:
I. The Graphics object is cast to a Graphics2D object to allow for
scaling.
II. The JEditorPane is laid out using the width of a printable page.
This will handle line breaks. If the JEditorPane cannot be sized at
the width of the graphics clip, scaling will be allowed.
III. The root view of the JEditorPane is obtained. By examining this root
view and all of its children, printView will be able to determine
the location of each printable element of the document.
IV. If the scaleWidthToFit option is chosen, a scaling ratio is
determined, and the graphics2D object is scaled.
V. The Graphics2D object is clipped to the size of the printable page.
VI. currentPage is checked to see if this is a new page to render. If so,
pageStartY and pageEndY are reset.
VII. To match the coordinates of the printable clip of graphics2D and the
allocation rectangle which will be used to lay out the views,
graphics2D is translated to begin at the printable X and Y
coordinates of the graphics clip.
VIII. An allocation Rectangle is created to represent the layout of the
Views.
The Printable Interface always prints the area indexed by reference
to the Graphics object. For instance, with a standard 8.5 x 11 inch
page with 1 inch margins the rectangle X = 72, Y = 72, Width = 468,
and Height = 648, the area 72, 72, 468, 648 will be painted regardless
of which page is actually being printed.
To align the allocation Rectangle with the graphics2D object two
things are done. The first step is to translate the X and Y
coordinates of the graphics2D object to begin at the X and Y
coordinates of the printable clip, see step VII. Next, when printing
other than the first page, the allocation rectangle must start laying
out in coordinates represented by negative numbers. After page one,
the beginning of the allocation is started at minus the page end of
the prior page. This moves the part which has already been rendered to
before the printable clip of the graphics2D object.
X. The printView method is called to paint the page. Its return value
will indicate if a page has been rendered.
Although public, print should not ordinarily be called by programs other
than PrinterJob.
public int print(Graphics graphics, PageFormat pageFormat, int pageIndex) {
double scale = 1.0;
Graphics2D graphics2D;
View rootView;
// I
graphics2D = (Graphics2D) graphics;
disableDoubleBuffering(jeditorPane);
// II
jeditorPane.setSize((int) pageFormat.getImageableWidth(),Integer.MAX_VALUE);
jeditorPane.validate();
// III
rootView = jeditorPane.getUI().getRootView(jeditorPane);
// IV
if ((scaleWidthToFit) && (jeditorPane.getMinimumSize().getWidth() >
pageFormat.getImageableWidth())) {
scale = pageFormat.getImageableWidth()/
jeditorPane.getMinimumSize().getWidth();
graphics2D.scale(scale,scale);
// V
graphics2D.setClip((int) (pageFormat.getImageableX()/scale),
(int) (pageFormat.getImageableY()/scale),
(int) (pageFormat.getImageableWidth()/scale),
(int) (pageFormat.getImageableHeight()/scale));
// VI
if (pageIndex > currentPage) {
currentPage = pageIndex;
pageStartY += pageEndY;
pageEndY = graphics2D.getClipBounds().getHeight();
// VII
graphics2D.translate(graphics2D.getClipBounds().getX(),
graphics2D.getClipBounds().getY());
// VIII
Rectangle allocation = new Rectangle(0,
(int) -pageStartY,
(int) (jeditorPane.getMinimumSize().getWidth()),
(int) (jeditorPane.getPreferredSize().getHeight()));
// X
if (printView(graphics2D,allocation,rootView)) {
return Printable.PAGE_EXISTS;
else {
pageStartY = 0;
pageEndY = 0;
currentPage = -1;
return Printable.NO_SUCH_PAGE;
/** The speed and quality of printing suffers dramatically if
* any of the containers have double buffering turned on.
* So this turns if off globally.
* @see enableDoubleBuffering
public static void disableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(false);
/** Re-enables double buffering globally. */
public static void enableDoubleBuffering(Component c) {
RepaintManager currentManager = RepaintManager.currentManager(c);
currentManager.setDoubleBufferingEnabled(true);
/* print(HTMLDocument) is called to set an HTMLDocument for printing.
public void print(HTMLDocument htmlDocument) {
setDocument(htmlDocument);
printDialog();
/* print(JEditorPane) prints a Document contained within a JEDitorPane.
public void print(JEditorPane jedPane) {
setDocument(jedPane);
printDialog();
/* print(PlainDocument) is called to set a PlainDocument for printing.
public void print(PlainDocument plainDocument) {
setDocument(plainDocument);
printDialog();
/* A protected method, printDialog(), displays the print dialog and initiates
printing in response to user input.
protected void printDialog() {
if (pJob.printDialog()) {
pJob.setPrintable(this,pFormat);
try {
pJob.print();
catch (PrinterException printerException) {
pageStartY = 0;
pageEndY = 0;
currentPage = -1;
System.out.println("Error Printing Document");
/* printView is a recursive method which iterates through the tree structure
of the view sent to it. If the view sent to printView is a branch view,
that is one with children, the method calls itself on each of these
children. If the view is a leaf view, that is a view without children which
represents an actual piece of text to be painted, printView attempts to
render the view to the Graphics2D object.
I. When any view starts after the beginning of the current printable
page, this means that there are pages to print and the method sets
pageExists to true.
II. When a leaf view is taller than the printable area of a page, it
cannot, of course, be broken down to fit a single page. Such a View
will be printed whenever it intersects with the Graphics2D clip.
III. If a leaf view intersects the printable area of the graphics clip and
fits vertically within the printable area, it will be rendered.
IV. If a leaf view does not exceed the printable area of a page but does
not fit vertically within the Graphics2D clip of the current page, the
method records that this page should end at the start of the view.
This information is stored in pageEndY.
protected boolean printView(Graphics2D graphics2D, Shape allocation,
View view) {
boolean pageExists = false;
Rectangle clipRectangle = graphics2D.getClipBounds();
Shape childAllocation;
View childView;
if (view.getViewCount() > 0 &&
!view.getElement().getName().equalsIgnoreCase("td")) {
for (int i = 0; i < view.getViewCount(); i++) {
childAllocation = view.getChildAllocation(i,allocation);
if (childAllocation != null) {
childView = view.getView(i);
if (printView(graphics2D,childAllocation,childView)) {
pageExists = true;
} else {
// I
if (allocation.getBounds().getMaxY() >= clipRectangle.getY()) {
pageExists = true;
// II
if ((allocation.getBounds().getHeight() > clipRectangle.getHeight()) &&
(allocation.intersects(clipRectangle))) {
view.paint(graphics2D,allocation);
} else {
// III
if (allocation.getBounds().getY() >= clipRectangle.getY()) {
if (allocation.getBounds().getMaxY() <= clipRectangle.getMaxY()) {
view.paint(graphics2D,allocation);
} else {
// IV
if (allocation.getBounds().getY() < pageEndY) {
pageEndY = allocation.getBounds().getY();
return pageExists;
/* Method to set the content type the JEditorPane.
protected void setContentType(String type) {
jeditorPane.setContentType(type);
/* Method to set an HTMLDocument as the Document to print.
public void setDocument(HTMLDocument htmlDocument) {
jeditorPane = new JEditorPane();
setDocument("text/html",htmlDocument);
/* Method to set the Document to print as the one contained in a JEditorPane.
This method is useful when Java does not provide direct access to a
particular Document type, such as a Rich Text Format document. With this
method such a document can be sent to the DocumentRenderer class enclosed
in a JEditorPane.
public void setDocument(JEditorPane jedPane) {
jeditorPane = new JEditorPane();
setDocument(jedPane.getContentType(),jedPane.getDocument());
/* Method to set a PlainDocument as the Document to print.
public void setDocument(PlainDocument plainDocument) {
jeditorPane = new JEditorPane();
setDocument("text/plain",plainDocument);
/* Method to set the content type and document of the JEditorPane.
protected void setDocument(String type, Document document) {
setContentType(type);
jeditorPane.setDocument(document);
/* Method to set the current choice of the width scaling option.
public void setScaleWidthToFit(boolean scaleWidth) {
scaleWidthToFit = scaleWidth;
}The sample input file is "mark.html":::
<html>
<head>
<style type="text/css">
<!--
ol { list-style-type: decimal; margin-top: 10; margin-left: 50; margin-bottom: 10 }
u { text-decoration: underline }
s { text-decoration: line-through }
p { font-weight: normal; font-size: medium; margin-top: 15 }
dd p { margin-top: 0; margin-left: 40; margin-bottom: 0 }
ol li p { margin-top: 0; margin-bottom: 0 }
address { color: blue; font-style: italic }
i { font-style: italic }
h6 { font-weight: bold; font-size: xx-small; margin-top: 10; margin-bottom: 10 }
h5 { font-weight: bold; font-size: x-small; margin-top: 10; margin-bottom: 10 }
h4 { font-weight: bold; font-size: small; margin-top: 10; margin-bottom: 10 }
h3 { font-weight: bold; font-size: medium; margin-top: 10; margin-bottom: 10 }
dir li p { margin-top: 0; margin-bottom: 0 }
h2 { font-weight: bold; font-size: large; margin-top: 10; margin-bottom: 10 }
b { font-weight: bold }
h1 { font-weight: bold; font-size: x-large; margin-top: 10; margin-bottom: 10 }
a { color: blue; text-decoration: underline }
ul li ul li ul li { margin-right: 0; margin-top: 0; margin-left: 0; margin-bottom: 0 }
menu { margin-top: 10; margin-left: 40; margin-bottom: 10 }
menu li p { margin-top: 0; margin-bottom: 0 }
table table { border-color: Gray; margin-right: 0; border-style: outset; margin-top: 0; margin-left: 0; margin-bottom: 0 }
sup { vertical-align: sup }
body { margin-right: 0; font-size: 14pt; font-family: SansSerif; color: black; margin-left: 0 }
ul li ul li ul { list-style-type: square; margin-left: 25 }
blockquote { margin-right: 35; margin-top: 5; margin-left: 35; margin-bottom: 5 }
samp { font-size: small; font-family: Monospaced }
cite { font-style: italic }
sub { vertical-align: sub }
em { font-style: italic }
table table table { border-color: Gray; margin-right: 0; border-style: outset; margin-top: 0; margin-left: 0; margin-bottom: 0 }
ul li p { margin-top: 0; margin-bottom: 0 }
ul li ul li { margin-right: 0; margin-top: 0; margin-left: 0; margin-bottom: 0 }
var { font-weight: bold; font-style: italic }
table { border-color: Gray; margin-right: 7; border-style: outset; margin-top: 7; margin-left: 7; margin-bottom: 17 }
dfn { font-style: italic }
menu li { margin-right: 0; margin-top: 0; margin-left: 0; margin-bottom: 0 }
strong { font-weight: bold }
ul { list-style-type: disc; margin-top: 10; margin-left: 50; margin-bottom: 10 }
center { text-align: center }
ul li ul { list-style-type: circle; margin-left: 25 }
kbd { font-size: small; font-family: Monospaced }
dir li { margin-right: 0; margin-top: 0; margin-left: 0; margin-bottom: 0 }
th p { font-weight: bold; padding-left: 2; padding-bottom: 3; padding-right: 2; margin-top: 0; padding-top: 3 }
ul li menu { list-style-type: circle; margin-left: 25 }
dt { margin-top: 0; margin-bottom: 0 }
ol li { margin-right: 0; margin-top: 0; margin-left: 0; margin-bottom: 0 }
li p { margin-top: 0; margin-bottom: 0 }
strike { text-decoration: line-through }
dl { margin-top: 10; margin-left: 10; margin-bottom: 10 }
tt { font-family: Monospaced }
ul li { margin-right: 0; margin-top: 0; margin-left: 0; margin-bottom: 0 }
dir { margin-top: 10; margin-left: 40; margin-bottom: 10 }
pre p { margin-top: 0 }
th { border-color: Gray; border-style: solid; padding-left: 3; padding-bottom: 3; padding-right: 1; padding-top: 1 }
pre { font-family: Monospaced; margin-top: 5; margin-bottom: 5 }
td { border-color: Gray; border-style: inset; padding-left: 3; padding-bottom: 3; padding-right: 1; padding-top: 1 }
td p { padding-left: 2; padding-bottom: 3; padding-right: 2; margin-top: 0; padding-top: 3 }
code { font-size: small; font-family: Monospaced }
small { font-size: x-small }
big { font-size: x-large }
-->
</style>
</head>
<body>
<p style="margin-top: 0">
</p>
<table width="500" cellspacing="20" border="1">
<tr>
<td height="330" valign="top">
<table border="0">
<tr>
<td>
<font size="2">This is to certify that [[Client Name]], born
on [[Client Date of Birth]], of [[Client Residential
Address]], was the holder of motor vehicle driver
licence number [[Client Licence Number]], first issued on
[[First Issue Date of Holding]] and expired on [[Holding
Expiry Date]].<br></font>
</td>
</tr>
</table>
</td>
</tr>
</table>
<table width="500" border="2">
<tr>
<td>
<table width="480" border="0">
<tr>
<td align="right">
<font size="2"><br>
<b>Fred Flintstone<br>Manager</b><br>Records Services Division<br>State
Police<br>An authorised person for the purposes of the
Road Act 1986</font>
</td>
</tr>
<tr>
<td align="left">
<font size="2"><b>User ID: wzvqv7<br>Dated: 29 November 2006</b>
</font>
</td>
</tr>
</table>
</td>
</tr>
</table>
</body>
</html>I have finally cracked it!!!!!!!!!!!!!!!!
The issue is definitely with Java Sun. "Uneven character spacing when printing JTextComponent"
It is raised on the http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6488219
And currently in OPEN state, and raised on 31 Oct 2006 and mentions it was caused by fix 4352983.
So where do we go from here. It's not good because I have tried all later version of the JVM and the issue is still there.
Why? Because it hasn't been fixed yet. Read the bug report above, as it gives more insight -- and mentions the workaround is NOT good for existing code.
So the way forward is to use an earlier version of the JVM 5.
I download the JVM version 1.5.0 (starting version) and works Ok... I would probably think version prior to 4352983 would be Ok too.
Please vote for this.... We have a workaround (use older version of the JVM).
So I am very happy. -
Newbie needing help with code numbers and if-else
I'm 100% new to any kind of programming and in my 4th week of an Intro to Java class. It's also an on-line class so my helpful resources are quite limited. I have spent close to 10 hours on my class project working out P-code and the java code itself, but I'm having some difficulty because the project seems to be much more advanced that the examples in the book that appear to only be partly directly related to this assignment. I have finally come to a point where I am unable to fix the mistakes that still show up. I'm not trying to get anyone to do my assignment for me, I'm only trying to get some help on what I'm missing. I want to learn, not cheat.
Okay, I have an assignment that, in a nutshell, is a cash register. JOptionPane prompts the user to enter a product code that represents a product with a specific price. Another box asks for the quanity then displays the cost, tax and then the total amount plus tax, formatted in dollars and cents. It then repeats until a sentinel of "999" is entered, and then another box displays the total items sold for the day, amount of merchandise sold, tax charged, and the total amount acquired for the day. If a non-valid code is entered, I should prompt the user to try again.
I have this down to 6 errors, with one of the errors being the same error 5 times. Here are the errors:
C:\PROGRA~1\XINOXS~1\JCREAT~1\MyProjects\Sales.java:50: 'else' without 'if'
else //if invalid code entered, output message
^
C:\PROGRA~1\XINOXS~1\JCREAT~1\MyProjects\Sales.java:39: unexpected type
required: variable
found : value
100 = 2.98;
^
C:\PROGRA~1\XINOXS~1\JCREAT~1\MyProjects\Sales.java:41: unexpected type
required: variable
found : value
200 = 4.50;
^
C:\PROGRA~1\XINOXS~1\JCREAT~1\MyProjects\Sales.java:43: unexpected type
required: variable
found : value
300 = 6.79;
^
C:\PROGRA~1\XINOXS~1\JCREAT~1\MyProjects\Sales.java:45: unexpected type
required: variable
found : value
400 = 5.29;
^
C:\PROGRA~1\XINOXS~1\JCREAT~1\MyProjects\Sales.java:47: unexpected type
required: variable
found : value
500 = 7.20;
^
And finally, here is my code. Please be gentle with the criticism. I've really put a lot into it and would appreciate any help. Thanks in advance.
import java.text.NumberFormat; // class for numeric formating from page 178
import javax.swing.JOptionPane; // class for JOptionOPane
public class Sales {
//main method begins execution ofJava Application
public static void main( String args[] )
double quantity; // total of items purchased
double tax; // total of tax
double value; // total cost of all items before tax
double total; // total of items including tax
double totValue; // daily value counter
double totTax; // daily tax counter
double totTotal; // daily total amount collected (+tax) counter
double item; //
String input; // user-entered value
String output; // output string
String itemString; // item code entered by user
String quantityString; // quantity entered by user
// initialization phase
quantity = 0; // initialize counter for items purchased
// get first code from user
itemString = JOptionPane.showInputDialog(
"Enter item code:" );
// convert itemString to double
item = Double.parseDouble ( itemString );
// loop until sentinel value read from user
while ( item != 999 ) {
// converting code to amount using if statements
if ( item == 100 )
100 = 2.98;
if ( item == 200 )
200 = 4.50;
if ( item == 300 )
300 = 6.79;
if ( item == 400 )
400 = 5.29;
if ( item == 500 )
500 = 7.20;
else //if invalid code entered, output message
JOptionPane.showMessageDialog( null, "Invalid code entered, please try again!",
"Item Code", JOptionPane.INFORMATION_MESSAGE );
} // end if
} // end while
// get quantity of item user
itemString = JOptionPane.showInputDialog(
"Enter quantity:" );
// convert quantityString to int
quantity = Double.parseDouble ( quantityString );
// add quantity to quantity
quantity = quantity + quantity;
// calculation time! value
value = quantity * item;
// calc tax
tax = value * .07;
// calc total
total = tax + value;
//add totals to counter
totValue = totValue + value;
totTax = totTax + tax;
totTotal = totTotal + total;
// display the results of purchase
JOptionPane.showMessageDialog( null, "Amount: " + value +
"\nTax: " + tax + "\nTotal: " + total, "Sale", JOptionPane.INFORMATION_MESSAGE );
// get next code from user
itemString = JOptionPane.showInputDialog(
"Enter item code:" );
// If sentinel value reached
if ( item == 999 ) {
// display the daily totals
JOptionPane.showMessageDialog( null, "Total amount of items sold today: " + quantity +
"\nValue of ites sold today: " + totValue + "\nTotal tax collected today: " + totTax +
"\nTotal Amount collected today: " + totTotal, "Totals", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 ); // terminate application
} // end sentinel
} // end message
} // end class SalesHere you go. I haven't tested this but it does compile. I've put in a 'few helpful hints'.
import java.text.NumberFormat; // class for numeric formating from page 178
import javax.swing.JOptionPane; // class for JOptionOPane
public class TestTextFind {
//main method begins execution ofJava Application
public static void main( String args[] )
double quantity; // total of items purchased
double tax; // total of tax
double value; // total cost of all items before tax
double total; // total of items including tax
// double totValue; // daily value counter
// double totTax; // daily tax counter
// double totTotal; // daily total amount collected (+tax) counter
// Always initialise your numbers unless you have a good reason not too
double totValue = 0; // daily value counter
double totTax = 0; // daily tax counter
double totTotal = 0; // daily total amount collected (+tax) counter
double itemCode;
double item = 0;
String itemCodeString; // item code entered by user
String quantityString; // quantity entered by user
// initialization phase
quantity = 0; // initialize counter for items purchased
// get first code from user
itemCodeString = JOptionPane.showInputDialog("Enter item code:" );
// convert itemString to double
itemCode = Double.parseDouble ( itemCodeString );
// loop until sentinel value read from user
while ( itemCode != 999 ) {
* 1. variable item mightnot have been initialised
* You had item and itemCode the wrong way round.
* You are supposed to be checking itemCode but setting the value
* for item
// converting code to amount using if statements
if ( item == 100 )
{itemCode = 2.98;}
else if ( item == 200 )
{itemCode = 4.50;}
else if ( item == 300 )
{itemCode = 6.79;}
else if ( item == 400 )
{itemCode = 5.29;}
else if ( item == 500 )
{itemCode = 7.20;}
else {//if invalid code entered, output message
JOptionPane.showMessageDialog( null, "Invalid code entered, please try again!",
"Item Code", JOptionPane.INFORMATION_MESSAGE );
} // end if
} // end while
// get quantity of item user
itemCodeString = JOptionPane.showInputDialog("Enter quantity:" );
* 2.
* You have declared quantityString here but you never give it a value.
* I think this should be itemCodeString shouldnt it???
* Or should you change itemCodeString above to quantityString?
// convert quantityString to int
// quantity = Double.parseDouble ( quantityString ); // old code
quantity = Double.parseDouble ( itemCodeString );
// add quantity to quantity
quantity = quantity + quantity;
// calculation time! value
value = quantity * itemCode;
// calc tax
tax = value * .07;
// calc total
total = tax + value;
//add totals to counter
* 3. 4. and 5.
* With the following you have not assigned the 'total' variables a value
* so in effect you are saying eg. "total = null + 10". Thats why an error is
* raised. If you look at your declaration i have assigned them an initial
* value of 0.
totValue = totValue + value;
totTax = totTax + tax;
totTotal = totTotal + total;
// display the results of purchase
JOptionPane.showMessageDialog( null, "Amount: " + value +
"\nTax: " + tax + "\nTotal: " + total, "Sale", JOptionPane.INFORMATION_MESSAGE );
// get next code from user
itemCodeString = JOptionPane.showInputDialog("Enter item code:" );
// If sentinel value reached
if ( itemCode == 999 ) {
// display the daily totals
JOptionPane.showMessageDialog( null, "Total amount of items sold today: " + quantity +
"\nValue of ites sold today: " + totValue + "\nTotal tax collected today: " + totTax +
"\nTotal Amount collected today: " + totTotal, "Totals", JOptionPane.INFORMATION_MESSAGE );
System.exit( 0 ); // terminate application
} // end sentinel
} // end message
} // end class SalesRob. -
Hey there,
I've just started programming J2ME using Netbeans using the java mobility pack, trying to create a program which interacts with a php webserver..
I created some code which accessed my php script on my server and returned the contents of the page back, and successfully got it working. However, i did a bit of treaking, and then tried to remove it all.. and now my code won't work. I've been examining it for a good hour and can't seem to find the error! It's annoying me pretty badly.. I'm not liking J2ME already.
Could someone please look at my code and help me out? I really really want to get this working..
* VisualMidlet.java
* Created on 26 October 2007, 19:37
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
* @author Will
public class VisualMidlet extends MIDlet{
/** Creates a new instance of VisualMidlet */
private Display display;
private Command Submit;
private Command okCommand2;
private Command Submit1;
private Form Form1;
private StringItem stringItem1;
String url = "http://people.bath.ac.uk/wal20/testGET.php?type=3";
public VisualMidlet() {
System.out.println("initialized");
display = Display.getDisplay(this);
Connect();
public void startApp() {
public void Connect(){
try {getViaStreamConnection(url);}
catch (IOException e) {
System.out.println("IOException " + e);
e.printStackTrace();
public void getViaStreamConnection(String url) throws IOException {
StreamConnection streamConnection = null; //declares a stream connection
InputStream inputStream = null; // declares an input Stream
StringBuffer b = new StringBuffer();
TextBox textBox = null;
try {
System.out.println("Establishing stream");
streamConnection = (StreamConnection)Connector.open(url);
System.out.println("Stream established");
inputStream = streamConnection.openInputStream();
int ch;
while((ch = inputStream.read()) != -1) {
b.append((char) ch);
textBox = new TextBox("Simple URL Fetch", b.toString(), 1024, 0);
} finally {
if(inputStream != null) {
inputStream.close();
if(streamConnection != null) {
streamConnection.close();
display.setCurrent(textBox);
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
/** This method initializes UI of the application.
private void initialize() {
getDisplay().setCurrent(get_Form1());
* This method should return an instance of the display.
public Display getDisplay() {
return Display.getDisplay(this);
* This method should exit the midlet.
public void exitMIDlet() {
getDisplay().setCurrent(null);
destroyApp(true);
notifyDestroyed();
/** This method returns instance for Submit component and should be called instead of accessing Submit field directly.
* @return Instance for Submit component
public Command get_Submit() {
if (Submit == null) {
// Insert pre-init code here
Submit = new Command("Submit", Command.OK, 1);
// Insert post-init code here
return Submit;
/** This method returns instance for okCommand2 component and should be called instead of accessing okCommand2 field directly.
* @return Instance for okCommand2 component
public Command get_okCommand2() {
if (okCommand2 == null) {
// Insert pre-init code here
okCommand2 = new Command("Ok", Command.OK, 1);
// Insert post-init code here
return okCommand2;
/** This method returns instance for Submit1 component and should be called instead of accessing Submit1 field directly.
* @return Instance for Submit1 component
public Command get_Submit1() {
if (Submit1 == null) {
// Insert pre-init code here
Submit1 = new Command("Submit", Command.OK, 1);
// Insert post-init code here
return Submit1;
/** This method returns instance for Form1 component and should be called instead of accessing Form1 field directly.
* @return Instance for Form1 component
public Form get_Form1() {
if (Form1 == null) {
// Insert pre-init code here
Form1 = new Form(null, new Item[] {get_stringItem1()});
// Insert post-init code here
return Form1;
/** This method returns instance for stringItem1 component and should be called instead of accessing stringItem1 field directly.
* @return Instance for stringItem1 component
the code for the php script is:
<?php
$response = "Hello";
if (isset($_GET)) {
switch ($_GET["type"]) {
case 1: $response = "Good Morning"; break;
case 2: $response = "Good Afternoon"; break;
case 3: $response = "Good Evening"; break;
default: $response = "Hello"; break;
echo $response;
?>
I would be grateful for any reply
Thank you in advance
-Willsorry! i'll repost the code in code format
* VisualMidlet.java
* Created on 26 October 2007, 19:37
import java.io.*;
import javax.microedition.io.*;
import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;
* @author Will
public class VisualMidlet extends MIDlet{
/** Creates a new instance of VisualMidlet */
private Display display;
private Command Submit;
private Command okCommand2;
private Command Submit1;
private Form Form1;
private StringItem stringItem1;
String url = "http://people.bath.ac.uk/wal20/testGET.php?type=3";
public VisualMidlet() {
System.out.println("initialized");
display = Display.getDisplay(this);
Connect();
public void startApp() {
public void Connect(){
try {getViaStreamConnection(url);}
catch (IOException e) {
System.out.println("IOException " + e);
e.printStackTrace();
public void getViaStreamConnection(String url) throws IOException {
StreamConnection streamConnection = null; //declares a stream connection
InputStream inputStream = null; // declares an input Stream
StringBuffer b = new StringBuffer();
TextBox textBox = null;
try {
System.out.println("Establishing stream");
streamConnection = (StreamConnection)Connector.open(url);
System.out.println("Stream established");
inputStream = streamConnection.openInputStream();
int ch;
while((ch = inputStream.read()) != -1) {
b.append((char) ch);
textBox = new TextBox("Simple URL Fetch", b.toString(), 1024, 0);
} finally {
if(inputStream != null) {
inputStream.close();
if(streamConnection != null) {
streamConnection.close();
display.setCurrent(textBox);
public void pauseApp() { }
public void destroyApp(boolean unconditional) { }
/** This method initializes UI of the application.
private void initialize() {
getDisplay().setCurrent(get_Form1());
* This method should return an instance of the display.
public Display getDisplay() {
return Display.getDisplay(this);
* This method should exit the midlet.
public void exitMIDlet() {
getDisplay().setCurrent(null);
destroyApp(true);
notifyDestroyed();
/** This method returns instance for Submit component and should be called instead of accessing Submit field directly.
* @return Instance for Submit component
public Command get_Submit() {
if (Submit == null) {
// Insert pre-init code here
Submit = new Command("Submit", Command.OK, 1);
// Insert post-init code here
return Submit;
/** This method returns instance for okCommand2 component and should be called instead of accessing okCommand2 field directly.
* @return Instance for okCommand2 component
public Command get_okCommand2() {
if (okCommand2 == null) {
// Insert pre-init code here
okCommand2 = new Command("Ok", Command.OK, 1);
// Insert post-init code here
return okCommand2;
/** This method returns instance for Submit1 component and should be called instead of accessing Submit1 field directly.
* @return Instance for Submit1 component
public Command get_Submit1() {
if (Submit1 == null) {
// Insert pre-init code here
Submit1 = new Command("Submit", Command.OK, 1);
// Insert post-init code here
return Submit1;
/** This method returns instance for Form1 component and should be called instead of accessing Form1 field directly.
* @return Instance for Form1 component
public Form get_Form1() {
if (Form1 == null) {
// Insert pre-init code here
Form1 = new Form(null, new Item[] {get_stringItem1()});
// Insert post-init code here
return Form1;
/** This method returns instance for stringItem1 component and should be called instead of accessing stringItem1 field directly.
* @return Instance for stringItem1 component
} -
Why can't I get this extension to show up after I download it, help with code?
Is there an error in the source code somwhere, here is the url https://addons.mozilla.org/en-US/firefox/addon/wisecampus-1/. I created this extension with the app builder where it generates a zip and you modify it to what you want. I made very little changes, I just would like to have a button on the toolbar that launches the site when clicked. If someone with more experience could take a look at the source code and possibly help me get this up and running it would be greatly appreciated. Thanks all!
Not really a Firefox user support issue. I am not am add-on developer, but I think I found your problem. ''Can't show the actual css code from that file, this forum software would try to execute it instead of displaying the code.''
In the '''overlay.css''' file the '''''wcextension-toolbar-button - list-style-image''''' shows the '''''url''''' as http://www.wisecampusbooks.com/images/WC_icon2.jpg . Shouldn't it point to the '''toolbar-button.png''' image in the \chrome\skin\ folder instead?
I can see the image from that URL when the toolbar button is sitting in the Customize Palette, but the image disappears when the button is moved to a Toolbar. I think that using a web based image in the UI is a security fault, which Firefox is blocking. Something like that could potentially be used to "track" a user or to count how often that button is clicked.
''BTW'' the Add-ons support forum is here: <br />
https://forums.mozilla.org/addons/ <br />
or you could post here, if you need additional help <br />
http://forums.mozillazine.org/viewforum.php?f=53&sid=554d097b5d69110d4859bd054051b9b2 -
Need help with code for adding dates to form
Hello forum goers
I'm new to making forms and figured out how to auto add the date, however I need the form to change the date for every copy made.
For example today is 06/08/2012 if I print 10 copies of the form it will output 10 pages ranging from 06/08/2012 to 06/17/2012. If code exists to do this I would be very gratefull to whoever helps, I also wouldn't mind if that is not possible for manually inputing the start / end dates.
Currently I print 15-30 copies of the form and hand write each of the dates but I'm just getting to busy to do that. I also cannot print one a day it must be in batches.
Thanks in advanced.What you are asking for is more complex than just setting the current date. Each time the form prints it has to know that it has to change the date. I would suggest doing this.
First, setup a document level script to set the date to the current date. I suspect that you have already done this?
Next, Create a "DidPrint" document action to increment the date. To do this the script will need to scan the current text value of the date, add one day to it, and then reformat it. You'll find information on this type of scripting in these articles:
http://acrobatusers.com/tutorials/working-with-date-and-time-in-acrobat-javascr
ipt
http://acrobatusers.com/tutorials/working-with-date-and-time-in-acrobat-javascr
ipt-part-2
http://acrobatusers.com/tutorials/working-with-date-and-time-in-acrobat-javascr
ipt-part-3
Since the increment happenes in the Did Print you will need to print each copy individually. If you enter 10 copies in the print dialog it won't work. You have to print one at a time. You can automate this activity with a console script.
One of the advantages of incrementing in the DidPrint is that you can also manually enter a date and it will increment from there.
Thom Parker
The source for PDF Scripting Info
pdfscripting.com
The Acrobat JavaScript Reference, Use it Early and Often
Then most important JavaScript Development tool in Acrobat
The Console Window (Video tutorial)
The Console Window(article)
Having trouble, Why Doesn't my Script Work? -
Hi,
I'm new to java, i'm creating java analog clock application. but i'm getting so many errors. i still try to figur out what are those. can someone please help me with this code. Thank you
here is my code
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import java.text.*;
import javax.swing.*;
//The main class
public class AnalogClock extends JFrame
// Initialize all the variables
SimpleDateFormat f_s = new SimpleDateFormat ("ss", Locale.getDefault());
SimpleDateFormat f_m = new SimpleDateFormat ("mm", Locale.getDefault());
SimpleDateFormat f_h = new SimpleDateFormat ("hh", Locale.getDefault());
SimpleDateFormat standard = new SimpleDateFormat ("HH:mm:ss", Locale.getDefault());
int xs, ys, xm, ym, xh, yh, s, xcenter, ycenter, m, h, x, y, mouse_x, mouse_y;
String temp;
Dimension d;
Date now;
Thread thr = null;
Image im;
Boolean M = false;
Graphics gIm;
Dimension dIm;
int sx, sy, sx2, sy2;
Color digital = Color.blue, hour = Color.blue, minute = Color.yellow,
second = Color.green, circle = Color.red, hours = Color.blue, mute_logo = Color.green;
// paint(): the main part of the program
public void paint(Graphics g)
d = getSize();
xcenter = d.width/2;
ycenter = d.height/2;
x = d.width;
y = d.height;
if(im == null)
im = createImage(x, y);
gIm = im.getGraphics();
dIm = new Dimension(x, y);
// Get the current timestamp
now = new Date();
// Get the seconds
temp = f_s.format(now);
s = Integer.parseInt(temp);
temp = f_m.format(now);
m = Integer.parseInt(temp);
temp = f_h.format(now);
h = Integer.parseInt(temp);
// Calculate all the positions of the hands
xs = (int) (Math.cos(s * Math.PI / 30 - Math.PI / 2) * 45 + xcenter);
ys = (int) (Math.sin(s * Math.PI / 30 - Math.PI / 2) * 45 + ycenter);
xm = (int) (Math.cos(m * Math.PI / 30 - Math.PI / 2) * 40 + xcenter);
ym = (int) (Math.sin(m * Math.PI / 30 - Math.PI / 2) * 40 + ycenter);
xh = (int) (Math.cos((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + xcenter);
yh = (int) (Math.sin((h * 30 + m / 2) * Math.PI / 180 - Math.PI / 2) * 30 + ycenter);
// Refresh the image
gIm.setColor(getBackground());
gIm.fillRect(0, 0, dIm.width, dIm.height);
// Draw the circle of the clock
gIm.setColor(circle);
gIm.drawOval(0, 0, d.width-1, d.height-1);
gIm.setColor(hours);
// Draw the stripes of the hours
for(int i = 0;i<12;i++)
sx = (int) (Math.cos((i * 30) * Math.PI / 180 - Math.PI / 2) * 47 + xcenter);
sy = (int) (Math.sin((i * 30) * Math.PI / 180 - Math.PI / 2) * 47 + xcenter);
sx2 = (int) (Math.cos((i * 30) * Math.PI / 180 - Math.PI / 2) * 49 + xcenter);
sy2 = (int) (Math.sin((i * 30) * Math.PI / 180 - Math.PI / 2) * 49 + xcenter);
gIm.drawLine(sx, sy, sx2, sy2);
// Draw the time on the top of the clock
gIm.setColor(digital);
gIm.drawString(standard.format(now), 25, 30);
// Draw the mute logo
Mute m = new Mute(M, gIm);
// Draw the hands
// Seconds
gIm.setColor(second);
gIm.drawLine(xcenter, ycenter, xs, ys);
// Minutes
gIm.setColor(minute);
gIm.drawLine(xcenter, ycenter-1, xm, ym);
gIm.drawLine(xcenter-1, ycenter, xm, ym);
// Hour
gIm.setColor(hour);
gIm.drawLine(xcenter, ycenter-1, xh, yh);
gIm.drawLine(xcenter-1, ycenter, xh, yh);
// Paint the generated image on the screen
if(im != null)
g.drawImage(im, 0, 0, null);
if(M == false)
play(getCodeBase(), "Sound/Click.wav");
public void update(Graphics g)
paint(g);
class Mute
Mute(Boolean mute, Graphics g)
g.setColor(mute_logo);
Polygon p = new Polygon();
p.addPoint(1, 7);
p.addPoint(6, 2);
p.addPoint(6, 12);
g.fillPolygon(p);
g.drawLine(7, 5, 7, 9);
g.drawLine(9, 4, 9, 10);
g.drawLine(11, 3, 11, 11);
if(mute == true)
g.drawLine(13, 3, 1, 11);
/* // All the mouse events
public void mousePressed(MouseEvent evt)
mouse_x = evt.getX();
mouse_y = evt.getY();
if(mouse_x <= 11 && mouse_x >= 1 && mouse_y <= 12 && mouse_y >= 2)
if(M == true)
M = false;
} else {
M = true;
repaint();
public void mouseReleased(MouseEvent evt){}
public void mouseEntered(MouseEvent evt){}
public void mouseExited(MouseEvent evt){}
public void mouseClicked(MouseEvent evt){}
}There is a gross misconception among the new and learning programmers that a lot of code is good and once you put that last close scope in place that things are wonderful because you have all the code down...
Please repeat this: NO, short debugged runs and incremental builds are better.
As a matter of fact, that is so important, go back and say it again and again until it really truly sinks in.
This concept is really pounded into your soul when you program in assembler--probably an ailment of the new generation of programmers, they never have had to do assembler or machine coding--but any time you get more than about 20 lines of code that hasn't been checked for bugs, you should start thinking... "Oh, do I really have the skills and patience to go back and debug (yes, actually use the debugger to step through it all.) that big of mess?" The biggest project is just like eating an elephant, you do it one small bite at a time over as long a time as it takes--you don't cook half the elephant and sit down and expect to eat it in one meal; neither do you sit down and decide to code a whole program and then debug it. You just don't have the skill to do it.
When you modify someone else's code, the same is true--small changes and debug as you change. Making all the changes you want, then debugging just runs into a huge error file of related problems that are basically indiscernible from each other because many of them are probably related.
Most of the request for "Help, I cannot get this to run." Also contain the words: "I just finished coding..." That statement in and of itself is one of the great flawed concepts that anyone can have--coding is complete when you have an acceptable release candidate, and then only until you decide or are asked to make further changes.
Work in small blocks of code and incrementally build a project--your frustration levels will be much less. And as you gain skill, increase the size of the code blocks (I had a friend in college that never had 5 consecutive lines of code compile--ever! He works for MS now.) and get to know your debugger. Your debugger is your friend, if you've not been introduced to your debugger, then get acquainted soon! Like maybe before you even try to cut another piece of code.
On the other side of things... cheer up, we've all been there and learned the lessons... some lessons just come harder than others... make your life less frustrating, it's a lot more fun and enjoyable. -
SSL - Default SSL context init failed: null - need help with code
Hi!
Once Again I have problems with SSL.
I read something about SSL here:
http://www.javaalmanac.com/egs/javax.net.ssl/Server.html
Now I tried to test this stuff, that resulted in this program (I simply tried to put the SSL stuff from the above code in a small skeleton):
import java.io.*;
import java.net.*;
import java.security.*;
import javax.net.ssl.*;
import javax.net.*;
public class MyServer
public static void main(String arguments[])
try
int port = 443;
ServerSocketFactory ssocketFactory = SSLServerSocketFactory.getDefault();
ServerSocket ssocket = ssocketFactory.createServerSocket(port);
// Listen for connections
Socket socket = ssocket.accept();
System.out.println("Connected successfully");
// Create streams to securely send and receive data to the client
InputStream in = socket.getInputStream();
OutputStream out = socket.getOutputStream();
// Read from in and write to out...
// Close the socket
in.close();
out.close();
catch(IOException e)
System.out.println("GetMessage() = "+e.getMessage());
e.printStackTrace();
} Now I compiled this stuff with : 'javac MyServer.java' - there were no errors. After this I run the program
with the following command (also taken from java almanac):
'java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=123456 MyServer'
But if I run it, it reports:
"GetMessage() = Default SSL context init failed: null
java.net.SocketException: Default SSL context init failed: null
at javax.net.ssl.DefaultSSLServerSocketFactory.createServerSocket(Dasho
6275)
at MyServer.main(MyServer.java:15)"
createServerSocket() seems to be the wrong line, but what is wrong with it.
Is there any mistake in my code ?
Btw. I created my keystore etc. according to the instructions at
http://forum.java.sun.com/thread.jsp?forum=2&thread=528092&tstart=0&trange=15
Any help appreciated
Greets
dancing_coderI got this error last week.
The problem was that the keystore I was pointing to, was in other location, so it could not initialize the default context.
I had defined ...
String CLIENT_CERTIFPATH = getParam("client.certificate.path", "/users/pridas/myKeystoreFile");
// getParam extracts the location of the keystore from a text file which contains some configuration parameters. The default value will be /users/pridas/myKeystoreFile
In my case, I will try to develop a secure SOAP conexion using certificates.
Before to try the conexion, I defined ...
System.setProperty("javax.net.ssl.trustStore", CLIENT_CERTIFPATH);
System.setProperty("javax.net.ssl.keyStore", CLIENT_CERTIFPATH);
... and the problem when I got this error ... the keystore file was not in the correct location.
That was how I resolved this error.
I hope everybody will be oriented about this kind of errors.
Salu2. -
HELP WITH CODE IN FM 'ME_UPDATE_AGREEMENT_PO'
Hi all,
can anyone tell me as to what iam missing in here
It giving a short dump
let me know
data: w_ekko type ekko,
t_ekpo type standard table of ekpo with header line,
t_ekpo2 type standard table of ekpo with header line,
start-of-selection.
select single * into corresponding fields of w_ekko
from ekko
where ebeln = '4600004012'.
select * into table t_ekpo
from ekpo
where ebeln = '4600004012'.
t_ekpo2[] = t_ekpo[].
loop at t_ekpo2.
if t_ekpo2-matnr = 'KHGGH'.
t_ekpo2-txz01 = 'test'.
modify t_ekpo2.
endif.
endloop.
This is giving me a dump.
So i changed the code to
data: w_ekko type ekko,
t_ekpo type standard table of UEKPO with header line,
t_ekpo2 type standard table of UEKPO with header line,
start-of-selection.
select single * into corresponding fields of w_ekko
from ekko
where ebeln = '4600004012'.
select * into corresponding fields of table t_ekpo
from ekpo
where ebeln = '4600004012'.
t_ekpo2[] = t_ekpo[].
loop at t_ekpo2.
if t_ekpo2-matnr = 'KHGGH'.
t_ekpo2-txz01 = 'test'.
modify t_ekpo2.
endif.
endloop.
call function 'ME_UPDATE_AGREEMENT_PO'
exporting
i_ekko_new = w_ekko
I_EKKO_OLD =
I_LOGSY =
tables
XEKBES =
xekpo = t_ekpo
yekpo = t_ekpo2
XSVAB =.
This doesn't give me a dump, but i doesn't change the outline agreement
ThanksHi,
You can use the follwoing bapi "<b>BAPI_AGREEMENT_MAIN</b>TAIN"
to update the agreement.
Revert back if any issues.
Reward with points if helpful.
Go thru the following :
Create/Change Contract/Scheduling Agreement
Functionality
This method enables you to create Enjoy purchase orders.
Notes
Authorizations
The following authorization objects are checked when you create an Enjoy purchase order (PO) (activity 01):
M_BEST_BSA Document type in PO
M_BEST_EKG Purchasing group in PO
M_BEST_EKO Purchasing organization in PO
M_BEST_WRK Plant in PO
Data transfer
The header data of the Enjoy PO is passed on in the table PoHeader and the item data in the table PoItem.
If an item has been assigned to one or more accounts, the account assignment data for each item can be passed on in the table PoAccount. The account assignment category determines which objects relevant to cost accounting have to be passed on. If the account assignment category is K, for example, a cost center must be passed on.
Delivery schedule lines are passed on for each item in the table PoSchedule.
Conditions are passed on in the table PoCond.
The vendor's address is passed on in the table PoAddrVendor, the delivery address in the table PoAddrDelivery. The fields of the central address management facility are used in the process.
Note
The following restrictions regarding addresses must be taken into account with this method:
Addresses can be created but not changed. You can only change address data using the method BAPI_ADDRESSORG_CHANGE.
When you create addresses, they are not checked. An Enjoy PO may therefore contain faulty address data.
You pass on service items in the table PoServices. The following data can also be passed on: account assignments (table PoSrvAccessValues), texts (table PoServicesText), limits (table PoLimits) and limits referencing a contract (tablePoContractLimits).
Note
With this method, service items can be created, but not changed.
Return
The PO number is returned in the parameter ExpPurchaseOrder.
Return messages
Messages are returned in the parameter Return.
Restrictions
Texts, partners, import data, subcontracting components, and customers' own fields cannot be passed on via these BAPIs.
It is not possible to put faulty or incomplete purchase orders on hold.
Further information
More information on POs is available in the SAP library under MM Purchasing -> Purchase Orders and in the Help for the Enjoy purchase order.
Regards,
Naveen -
Borderless Window help with code please!
I am using Dreamweaver MX 2004.
I just cannot get my head round this Java code and would really appreciate some help or direction!
I want to make a nice little window to show a few lines of text, with a close button or X in the corner (not fussed). I have looked at lots of tutorials and produced numerous codes to use.
OK, fine I get that bit. My problem comes with placing the codes in the right places. I paste the HEAD portion in the head of the doc. The BODY in the body. BUT is this the doc I am going to call up with my few lines of text in, or the doc I am going to call from? Get what I mean? Also I want to call from a link and haven't had much luck with the line of code I put in the link box. I have tried lots ways and have just managed to confuse myself.
I am not asking for someone to do it for me and believe me I have tried to work this out for myself but it's not happening for me. Please can someone explain this to me in very plain English as I am obviously some sort of delinquent!
Thank youYes I am using HTML and Javascript. So Java and Javascript are not the same thing? Right ,OK ,well that has taught me something. Don't suppose you can help me with script on this forum then. Sorry!
Maybe you are looking for
-
Lync keeps prompting for username and password.
Hi All, Lync 2013 prompt for username and password. The request for username and password happens intermittently. Appreciate any help. Thanks denciod
-
Memory issue LabVIEW won't deallocte
Hello, I was wondering if anyone could help. I am running LabVIEW 2012 and playing with manipulating data from a reasonably large file 40Mb using a lot of String Arrays. Everything runs ok, the problem I am having is that everytime I run the VIs asso
-
Issues with iPad and Facebook newsfeed
I have an iPad, and when I am using Facebook, I get a little way down on my newsfeed and it stops.....then a small grey dot appears at the bottom of the newsfeed? Any ideas?
-
RFC Adapter Settings - stage 2 problems
Friends , I am working on a RFC to XI to Mail senerio. 2 diff adapters are required for this, as we know. From r3 perspective, I have a se38 program to run the RFC. see the code below! report zrfc_adapter. data: it_final1 type standard table of zrfc_
-
we are using ISR in combination with adobe forms. we managed to get the data elements dynamic. But now I want to get the data fields end values and safe them in SAP. the code i am using is: try { IPublicISR_Form.IMappedFieldsElement field =