这是我第一次发布到这个网站,所以如果我的格式错误,请对我很轻松Lol
我正在编写一个Java程序,需要从库存中查找部件号,然后打印部件号以及随后的数据。代码只打印出文件顶部的信息,然后重复我的else语句5次。
以下是代码:
select t.id, t.name, t.yearofstudy, t.mark
from t
inner join (
select
yearofstudy
, min(mark) as minMark
from t
group by yearofstudy
) as m
on t.yearofstudy = m.yearofstudy
and t.mark = minMark
这是我想要提取的数据文件:
package inventory;
import java.util.Scanner;
import java.io.*;
public class inventory
{
public static void main(String[] args) throws IOException
{
Scanner keyboard = new Scanner(System.in);
// File Information
String parts;
File inventoryFile;
FileWriter inventoryFW;
PrintWriter inventoryPW;
Scanner inventorySC;
//User Information
String userChoice;
// Part Information
String partID, partFileID, partFileDesc, partFileLoc, partDesc, partLoc;
double partFilePrice, partPrice;
int partFileQuan, partQuan;
userChoice = ("A");
// Loop
if(userChoice.equalsIgnoreCase("Q"))
System.exit(0);
else
while(!userChoice.equalsIgnoreCase("Q"))
{
// Get Employee Decision
System.out.println("Please choose a letter: \n"
+ "L - Look Up Part \n"
+ "A - Add to Inventory File \n"
+ "E - Erase From Inventory File \n"
+ "G - Generate a Sales Slip \n"
+ "I - Add Quantity to Inventory File \n"
+ "D - Display Inventory \n"
+ "Q - Quit \n"
+ "Selection: ");
userChoice = keyboard.nextLine();
// Process User Choice
if(userChoice.equalsIgnoreCase("L"))
{ // Choice L
// Look Up Part
System.out.println("Enter Part I.D. Number: ");
partID = keyboard.nextLine();
// Do until partID is equal to partFileID
parts = "inventoryFile.txt";
inventoryFile = new File(parts);
inventorySC = new Scanner(inventoryFile);
partFileID = "0";
partFileDesc = "0";
partFilePrice = 0;
partFileLoc = "0";
partFileQuan = 0;
while(inventorySC.hasNextLine())
{
String lineFromFile = inventorySC.nextLine();
if(lineFromFile.contains(partID))
{
partFileDesc = inventorySC.nextLine();
partFilePrice = inventorySC.nextDouble();
inventorySC.nextLine();
partFileLoc = inventorySC.nextLine();
partFileQuan = inventorySC.nextInt();
System.out.println("Part I.D. Number: " + partFileID + "\n");
System.out.println("Part Description: " + partFileDesc + "\n"
+ "Part Price: " + partFilePrice + "\n"
+ "Part Location: " + partFileLoc + "\n"
+ "Part Quantity: " + partFileQuan);
}
else
System.out.println("Sorry, this part cannot be found");
}
}
}
}
}
例如,如果用户输入了部件号“1234”,程序应在文件中搜索该部件号,然后显示:
1234567
Clutch
45.68
Warehouse B
8
1234
Brake
66.78
Warehouse A
4
对于任何糟糕的代码格式化,我很抱歉,我一直在争论这段时间。 任何帮助将不胜感激。
答案 0 :(得分:0)
您的问题是,如果零件清单中不包含零件值,您只会跳到下一行。如果零件不在“下一行”上,你实际上想要跳过5行。
在“else”语句中,您只想调用inventorySC.nextLine();再多4次到达你想要检查零件号的文件中的下一个位置。
如果您希望“未找到”条件更有效地反映实际上根本找不到部件号,则您需要将该消息移动到扫描整个文件之后。在文件扫描之前,将名为“found”的布尔值设置为false。如果您输入'包含'条件,因为文件中包含您输入的部件号,请将'found'设置为true。
如果'found'仍为'false',则可以输出'not found'消息。
答案 1 :(得分:0)
有一些问题。
boolean found = false;
while(inventorySC.hasNextLine()){
String lineFromFile = inventorySC.nextLine();
if(lineFromFile.equals(partID)) {
partFileDesc = inventorySC.nextLine();
partFilePrice = inventorySC.nextLine();
partFileLoc = inventorySC.nextLine();
partFileQuan = inventorySC.nextLine();
System.out.println("Part I.D. Number: " + partFileID + "\n");
System.out.println("Part Description: " + partFileDesc + "\n"
+ "Part Price: " + partFilePrice + "\n"
+ "Part Location: " + partFileLoc + "\n"
+ "Part Quantity: " + partFileQuan);
found = true;
break;
}
}
if(!found)
System.out.println("Sorry, this part cannot be found");
答案 2 :(得分:0)
正如MadProgrammer在上面评论的那样,你需要使用等于'等等。而不是'包含' - 这就是您在第一个条目上匹配的原因。当你找到一个匹配并输出它时,你需要使用' break'退出while循环。 - 否则你输出剩下的每一行的else值(发生在你身上)。但是还有一个问题是你可能需要阅读整个记录 - 而不仅仅是记录的第一行 - 如果没有匹配,那么当库存项目的数量为1234时你就不会搞砸了在搜索零件号1234时。