epifanio67
asked on
Java: problems with for loop? any thoughts... thx
Hello Experts,
Having problems with the loop below; it may not be a loop... I am not sure...
any thoughts will help ... thx..
based on a home code; need to find all materials belonging to that house... can't get it to work... thx again
Having problems with the loop below; it may not be a loop... I am not sure...
any thoughts will help ... thx..
based on a home code; need to find all materials belonging to that house... can't get it to work... thx again
public class SearchHomeMaterials {
public static void main(String[] args) {
//log source
String source = " home s78i has featureNumber E7i10 built with material Wood " +
"E7i10 has a kitchen, two baths, three bedrooms and bar built with material 4397 " +
" home 67cf6 has featureNumber E2410 built with material890217 " +
"home s78i contains a tree, chairs, and front door with material Plastic " +
" home 65ac has featureNumber D7i10 using material4397 material Plywood " +
"home s78i posseses a patio, closet doors, and cabinets have material Glass " +
" home 67cf6 has featureNumber D5844 built with material 4446" +
"D5844 has a gold window with material5643" +
" home 33zt has featureNumber E4ty8 built with materialm111" +
"E4ty8 has 7 doors and 3 shelves built with material Wood";
//pseudo: 1: search materials belonging to this home
String home = "s78i";
String material = "material";
//pseudo: 2: add materials found for house s78i to vector
Vector<String> homeMaterials = new Vector<String>();
String logs[] = source.split("[\\s]");
boolean addMaterial = false;
for (String log : logs) {
if (addMaterial) {
// add material found for that house: Wood, Plastic, Glass to vector
if(log.equals(material)){
homeMaterials.add(log);
}
addMaterial = false;
}
// if home searched found, add material true
if (log.equals(home)) {
addMaterial = true;
}
}
System.out.println(homeMaterials);
}//END OF MAIN
}//END OF CLASS
That would be better as some of them don't have space after material
Output:
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SearchHomeMaterials {
public static void main(String[] args) {
//log source
String source = " home s78i has featureNumber E7i10 built with material Wood " +
"E7i10 has a kitchen, two baths, three bedrooms and bar built with material 4397 " +
" home 67cf6 has featureNumber E2410 built with material890217 " +
"home s78i contains a tree, chairs, and front door with material Plastic " +
" home 65ac has featureNumber D7i10 using material4397 material Plywood " +
"home s78i posseses a patio, closet doors, and cabinets have material Glass " +
" home 67cf6 has featureNumber D5844 built with material 4446" +
"D5844 has a gold window with material5643" +
" home 33zt has featureNumber E4ty8 built with materialm111" +
"E4ty8 has 7 doors and 3 shelves built with material Wood";
//pseudo: 1: search materials belonging to this home
String home = "s78i";
String material = "material";
//pseudo: 2: add materials found for house s78i to vector
Vector<String> homeMaterials = new Vector<String>();
Pattern p = Pattern.compile("material[\\s]*(\\w+)\\s");
Matcher m = p.matcher(source);
while(m.find()){
System.out.println(m.group(1));
homeMaterials.add(m.group(1));
}
String logs[] = source.split("material[\\s]+");
boolean addMaterial = false;
for (String log : logs) {
if (addMaterial) {
System.out.println(log);
// add material found for that house: Wood, Plastic, Glass to vector
if(log.equals(material)){
homeMaterials.add(log);
}
addMaterial = false;
}
// if home searched found, add material true
if (log.equals(home)) {
addMaterial = true;
}
}
System.out.println(homeMaterials);
}//END OF MAIN
}//END OF CLASS
Output:
Wood
4397
890217
Plastic
4397
Plywood
Glass
4446D5844
5643
m111E4ty8
[Wood, 4397, 890217, Plastic, 4397, Plywood, Glass, 4446D5844, 5643, m111E4ty8]
ASKER
Thank you for_yan...
however, the solution above is printing all the materials...
I need to print all the material that belong to home s78i.... excluding the other ones... see what I am?
thx so much for your help...
regards
however, the solution above is printing all the materials...
I need to print all the material that belong to home s78i.... excluding the other ones... see what I am?
thx so much for your help...
regards
split{) method is not very suitable for this case - you rather want t use Pattern and find pattern wehre the word material if ollowed by the next word and you want toretrieve the next word - ans dthat what it is doing now
this will do only for s78i:
Output:
import java.util.Vector;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class SearchHomeMaterials {
public static void main(String[] args) {
//log source
String source = " home s78i has featureNumber E7i10 built with material Wood " +
"E7i10 has a kitchen, two baths, three bedrooms and bar built with material 4397 " +
" home 67cf6 has featureNumber E2410 built with material890217 " +
"home s78i contains a tree, chairs, and front door with material Plastic " +
" home 65ac has featureNumber D7i10 using material4397 material Plywood " +
"home s78i posseses a patio, closet doors, and cabinets have material Glass " +
" home 67cf6 has featureNumber D5844 built with material 4446" +
"D5844 has a gold window with material5643" +
" home 33zt has featureNumber E4ty8 built with materialm111" +
"E4ty8 has 7 doors and 3 shelves built with material Wood";
//pseudo: 1: search materials belonging to this home
String home = "s78i";
String material = "material";
//pseudo: 2: add materials found for house s78i to vector
Vector<String> homeMaterials = new Vector<String>();
String [] homes = source.split("home");
for(String homeS: homes) {
if(homeS.indexOf("s78i") == -1)continue;
Pattern p = Pattern.compile("material[\\s]*(\\w+)\\s");
Matcher m = p.matcher(homeS);
while(m.find()){
System.out.println(m.group(1));
homeMaterials.add(m.group(1));
}
}
String logs[] = source.split("material[\\s]+");
boolean addMaterial = false;
for (String log : logs) {
if (addMaterial) {
System.out.println(log);
// add material found for that house: Wood, Plastic, Glass to vector
if(log.equals(material)){
homeMaterials.add(log);
}
addMaterial = false;
}
// if home searched found, add material true
if (log.equals(home)) {
addMaterial = true;
}
}
System.out.println(homeMaterials);
}//END OF MAIN
}//END OF CLASS
Output:
Wood
4397
Plastic
Glass
[Wood, 4397, Plastic, Glass]
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
thank you for_yan...
I see what you did... thank you so much....
boy, I have long way to go with Java... thx for your patience....
I see what you did... thank you so much....
boy, I have long way to go with Java... thx for your patience....
Open in new window
Output:
Open in new window